自動跟隨機器人教程(七)軟體部分 樹莓派程式 多感測器綜合
現在樹莓派的各個感測器就都用上了,超聲波模組、影象識別、聲源定位各司其職,都能對周邊環境做出反應,以便對電機做操作。這樣就不需要電腦的遠端控制了,能真正做到自主執行。
問題是這些感測器都是獨立的,控制電機時以誰為主呢?
經過多次除錯,本人摸索出如下原則:
超聲波模組由於智慧化程度較低,必須配合影象識別使用,因此只有在影象跟蹤有效,才能使用超聲波進行測距,超聲波模組解決了前後的問題,而左右的問題用攝像頭來解決。當攝像頭鎖定目標後,左右轉動小車,使目標居中,此時獲取超聲波距離,通過前後移動把距離調節到合適的位置。
由於影象識別範圍有限,即使是廣角攝像頭也只能處理前方一定角度內的影象,在攝像頭丟失影象後使用聲源定位來獲取人員位置。
也就是說影象識別的優先順序最高,放在主迴圈中實現,如影象識別跟蹤到目標就不使用聲源定位,如果目標丟失才啟用聲源定位(在獨立執行緒中實現)。當影象識別鎖定成功後,才呼叫超聲波模組的感測器資料(感測器資料獲取工作在微控制器中迴圈實現,樹莓派另外開一個執行緒去接收,但是隻管收不使用,只在需要時超聲波距離資料時樹莓派才使用這個數值)。
另外要注意聲源定位容易受到各種因素,比如電機轉動的影響,因此每次探測完成後一定要等待電機做完所有動作才能做下一步的探測。(超聲波模組發射聲波時其實也會干擾聲源定位模組,但是由於超聲波模組有方向性並且強度不大,所以這個干擾這裡可以忽略不計)。
感測器全部加起來後的程式碼比較長,我這裡就不貼了,完整版程式請參考:
https://github.com/jamesshao8/smart_car
下面是完整版小車的樹莓派3b版本映象:
連結:https://pan.baidu.com/s/1NRi-PcM-Hm7Ss1WvzdJKlA 密碼:ygh5
鑑於今年新出的樹莓派3b+的作業系統有變化,本人重新制作了新版映象:
連結: https://pan.baidu.com/s/1fPB6HcuF23jmMU4n94QANA 提取碼: egxe