2013-10-31 56 views
1

我正在尋找一種方法/算法來使機器人氣球飛到一定的高度。機器人由樹莓派控制,並配有螺旋槳。螺旋槳速度可以設置爲幾個值(它使用PWM,所以在技術上1024個不同的功率輸出)。 氣球有一個向下指向的距離傳感器,所以可以每秒獲得幾次當前高度。 到目前爲止,唯一的想法是不斷測量高度,並根據剩下的高度設置最大速度。這似乎並不是最好的選擇,但不知道如何適合所有的功率輸出。使氣球飛到指定的高度/高度的算法

任何想法都會受到歡迎。我使用Java來編寫項目代碼,但任何高級算法/描述都會很棒!

THX,

魔術

+0

你確定使用Java嗎? – 2013-10-31 12:38:48

+0

@nipkon:爲什麼不使用Java?當然,C對於R-Pi來說可能更好,但它也支持Java。 – Izmaki

回答

1

僞代碼。

while(true){ 
    val height = getHeight(); // from sensor 

    // Get the difference between the current height and 
    // the TARGET height. Positive values mean too low 
    // while negative values mean too high 
    val offset = TARGET_VALUE - height; 

    // Set the power to some direct ratio of the offset 
    // When the baloon is at 0 height, the offset should 
    // be relatively high, so the power will be set 
    // high. If the offset is negative, the power will be 
    // set negative from the current power. 
    setPower(offset);// I'll leave it up to you to figure out the ratio 
} 
2

有一個偉大的「遊戲」可以讓你嘗試玩的正是這樣的問題:Colobot(似乎是現在開源的)。創建一個帶翅膀的抓取器(或者如果你是更多的FPS類型的人,則是射手),並嘗試僅使用高度和運動控制器將其飛往特定目的地。

一般來說,MadConan的僞碼是要走的路,但主要任務在於編寫一個智能setPower函數。最後,您需要一些平滑功能,以降低與您所希望的高度距離有多近的功率,但該功能的確切值完全取決於您的硬件和最終系統的重量。

根據您的設置到底有多寶貴和/或易碎,您可能需要開發一個學習系統,它將欠/超過濾作爲調整平滑功能的基礎。確保在計算中考慮上/下風等因素。

+0

很好的解釋。我的算法將這個考慮在內(大致)。這將取決於執行多少次測量/秒。當氣球接近目標值時,偏移將變得越來越小,因此功率也應該降低。不過,我同意,這並不是那麼簡單,因爲它實際上可能無法達到最高點。再次取決於採樣頻率。 – MadConan

+0

取樣不是問題,因爲您可以根據速度,加速度和時間輕鬆地內插當前位置。傳感器只是對您的假設進行修正,特別是對於風等外部因素。 我強烈建議嘗試一下這款遊戲。我起初認爲應該很容易控制一個這樣的機器人,但是第一個(幸運的是數字)崩潰教我不然。 ;) – TwoThe

+0

我一直在想它是真正的垂直,但現在我想到了,風會引起俯仰,使傳感器與地面成一定角度,這會給實際高度帶來巨大的變化。因此需要一個完整的x,y和z座標傳感器來進行補償。 – MadConan