2011-09-08 91 views
0

我在編程四旋翼直升機無人機,使用圖像處理自動追蹤移動的地面目標。我正在使用的硬件是相當有限的,所以爲了使我的自動命令考慮到無人駕駛飛機的速度(它不知道它何時移動),我必須隨時間手動跟蹤目標的相對位置(可以粗略地轉化爲無人機的動作)。四旋翼飛行器目標跟蹤飛行模式

所以這裏就是我在這方面有:

int lastX = Targets_Last_Position_Xcoord(); 
int lastY = Targets_Last_Position_Ycoord(); 
int nowX = Targets_Current_Position_Xcoord(); 
int nowY = Targets_Current_Position_Ycoord(); 

int speedModX = (float)(60 - (abs(lastX)-abs(nowX)))/60.0f; // Image dimension is 120 
int speedModY = (float)(73 - (abs(lastY)-abs(nowY)))/73.0f; // Other dimension is 146 

changePitch(((nowX - 60)/60.0f)*(1 + speedModX)); 
changeRoll(((nowY - 73)/73.0f)*(1 + speedModY)); 

功能「changePitch」及其他類似導致發送到無人機的下一個命令,包括預設的指定百分比的音高變化最大傾斜度。所以,我告訴無人機傾斜與目標距屏幕中心距離直接相關的數量;然後我根據目標移動的位置(目標的最後一個點與其當前點之間的距離)投擲乘數。

無論如何,這是我的意圖;這個代碼似乎只是在幫助一點點,而其他因素,如空氣流動和機械不平衡(這不是最高質量的設備)可能會干擾,讓我只看到我想看到的東西。

我用來解釋無人駕駛飛機速度的方法是否正確,和/或是否有更好的方法來處理?

編輯:計算speedModX和speedModY已更改,以前的窗體在某些情況下有不需要的結果。新公式根據目標與原點之間的距離與目標距離原點的當前距離之間的差異正確創建修改器。

回答

1

如果你不能找出一個更好的建模系統的方法,你可能需要考慮爲此調整一個proportional–integral–derivative (PID) controller。它們是自動化中用於處理反饋迴路的通用解決方案。

每維基百科文章:

甲PID控制器計算一個「誤差」值作爲測得的過程變量和期望的設定點之間的差。控制器通過調整過程控制輸入來嘗試最小化錯誤 ... 由於缺乏底層過程的知識,PID控制器是最好的控制器。

+0

我已經開始沿着這條道路,現在很明顯,PID不僅是我的問題的解決方案,而且涵蓋了任何自主控制方法的一些重要方面。謝謝! – Andrew

1

這是一個相當具有挑戰性的問題,這是不太可能,你會發現有特設控制規則,一個好的解決方案。在機器人學的文獻中,這個問題被表達爲一個跟蹤目標的問題(谷歌的「目標跟蹤機器人運動規劃」,用於一些有趣的閱讀。)

我已經爲地面輪式機器人實現了目標跟蹤,我認爲這些方法適用於你的問題。此外,我認爲它們可以很好地擴展到問題中增加的第三維運動。看看實施「潛在領域」。該方法將機器人,目標和/或障礙物模擬爲帶電荷的粒子。目標展現吸引力;障礙物以排斥力爲模型。這個模型很容易實現,並且對於簡單的跟蹤/避免任務來說效果非常好。

Here是一組介紹該主題的幻燈片。 Here是關於使用潛在領域避免障礙的相當不錯的論文。將這些方法應用於跟蹤問題應該不是什麼重要的任務(只需反轉標誌!)。最後,here是ACM論文,作者描述瞭解決類似的目標跟蹤問題。 (我無法訪問PDF,很抱歉)。

1

所以,你在上面的代碼是做一個比例控制器。如果您堅持使用PID控制器,您可能需要添加Integral和Derivative部分。同樣取決於您的傳感器的精度和準確度,您需要考慮使用濾波器來平滑您的值。從一個簡單的移動平均值開始,到一個卡爾曼濾波器(你會學到很多東西)。

這裏是爲您的工作的另一個很好的參考:
穩定與一個四旋翼微型無人機的控制權使用視覺傳感器 http://contentdm.lib.byu.edu/ETD/image/etd2375.pdf

另一個有趣的參考: http://www.ludep.com/