Pixhawk 添加超聲波定高
記錄一下自己在Pixhawk上添加超聲波模塊進行定高的過程:
硬件:Pixhawk2.4.8(APM3.5固件)、STM32開發板、幾塊錢一個的超聲波模塊
軟件:Mission Planner、Keil(STM32編程用)
過程:
1.分析官方給出的各種RangFinder的添加方案和源碼,確定使用STM32單片機讀取超聲波數據,然後以串口方式發送給Pixhawk飛控。
相關源碼鏈接:https://github.com/ArduPilot/ardupilot/tree/master/libraries/AP_RangeFinder
官方給出的傳感器添加方式:http://ardupilot.org/copter/docs/common-rangefinder-maxbotixi2c.html
對AP_RangeFinder_LightWareSerial.cpp進行分析:
通過閱讀以上代碼,可以得出兩點信息:
a. 數據以字符串形式發送(單位為m),以回車符‘\r‘結尾;
b.兩次數據發送的時間間隔要小於200ms;
2.在Mission Planner中進行相關配置(以下圖片為盜用):
首先配置串口,這裏我們配置串口4,波特率為115200,協議選擇9:Lidar
這裏要特別註意,要保證其他的串口協議不為9,否則程序在運行時可能會在其他串口處找數據!
其次對RNGFND相關變量進行配置:
RNGFND_TYPE設為8,因為我們參考的是LightWareSerial的數據包格式;
RNGFND_MIN_CM和RNGFND_MAX_CM是設置超聲波的距離範圍;
其他幾項如下圖:
配置完之後,點擊右側Write Param;
3.STM32單片機編程
這裏就不再詳述,就是配置一個STM32的定時器,輸入捕獲獲取超聲波距離值,然後配置一個串口,波特率115200,以字符串形式向外發送數據;
4.接線,測試:
把兩個板子的串口連接起來,打開Mission Planner,就可以在State中的sonarrange處看到我們發過去的距離信息
總結:
以上為串口通信方式添加,如果以IIC或AD方式,只要查看源碼對應部分的信息即可,IIC方式是把距離值分成高八位和第八位發出去;
網上有人用Arduino連接超聲波,然後以IIC方式發出去,也是一樣的道理;
(以上圖片均為盜用,但自己確實實現了,只是不想再去接線)
Pixhawk 添加超聲波定高