我在編程四旋翼直升機無人機,使用圖像處理自動追蹤移動的地面目標。我正在使用的硬件是相當有限的,所以爲了使我的自動命令考慮到無人駕駛飛機的速度(它不知道它何時移動),我必須隨時間手動跟蹤目標的相對位置(可以粗略地轉化爲無人機的動作)。四旋翼飛行器目標跟蹤飛行模式
所以這裏就是我在這方面有:
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已更改,以前的窗體在某些情況下有不需要的結果。新公式根據目標與原點之間的距離與目標距離原點的當前距離之間的差異正確創建修改器。
我已經開始沿着這條道路,現在很明顯,PID不僅是我的問題的解決方案,而且涵蓋了任何自主控制方法的一些重要方面。謝謝! – Andrew