1. 程式人生 > >Pixhawk 添加超聲波定高

Pixhawk 添加超聲波定高

param 就是 3.5 info 道理 註意 2.4 編程 分享

  記錄一下自己在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 添加超聲波定高