1. 程式人生 > >Pixhawk原生PX4韌體中的坑(2017.6.8TREE上的版本)

Pixhawk原生PX4韌體中的坑(2017.6.8TREE上的版本)

origin: http://www.cnblogs.com/fly2mato/p/6575556.html

作為一名飛控開發的小學生:),最近入坑Pixhawk+PX4了。

基於Pixhawk硬體平臺進行二次開發,有兩套韌體可以選擇:Ardupilot系列也就是常說的APM韌體,包含了ArduCopter以及ArduPlane等;另一個就是Pixhawk原生韌體PX4了。前者最開始是為APM硬體(Ardupilot Mega)開發的,升級到3.0版本後已經相容Pixhawk硬體,從個人學習的角度來看,APM韌體的程式碼架構比較容易理解,基本上花個一天時間就能大概摸清整體結構了,而且由於出現的時間早,玩的人以及相關資料都比較豐富,所以屬於首選。後者則採用了Nuttx實時作業系統,一開始接觸的時候簡直頭大,整體結構、資訊傳遞機制都不瞭解,資料相對少點,所以屬於備選。

但是在做HIL模擬時,不論是我自己編譯APM韌體還是下載的官方韌體,前後折騰了快一週還是不能正常工作;而用PX4韌體則比較順利地實現了需求。所以從時間成本以及沉沒成本考慮,還是決定入坑Pixhawk+PX4了。

一、編譯

Windows下編譯坑多而且速度還慢,選擇在Ubuntu裡面編譯。按照dev.px4.io/Linux/Advanced Linux以及Building the Code裡面的說明,還是能比較方便的搭建好PX4的開發環境。但還是有幾點要注意:

1. 在clone完專案後,不要著急新增子模組,先把分支切換到stable上。

2. 新增子模組時不能忘了 --recursive 引數,要不然會缺少幾個模組,導致編譯不過。

1 git submodule update --init --recursive

二、程式碼

1. 無論是目前的master版本還是stable版本,用minicom檢視nsh控制檯(ttyACM0)時,都會出現亂碼。拔掉SD卡依然亂碼。解決辦法(stable版本),參考自這篇部落格

將 /Firmware/ROMFS/px4fmu_common/init.d/rcS 檔案中

# Start MAVLink
    mavlink start -r 800000 -d /dev/ttyACM0 -m config -x

替換成

複製程式碼
1     # Start USB shell if no microSD present, MAVLink else
2 if [ $LOG_FILE == /dev/null ] 3 then 4 # Try to get an USB console 5 nshterm /dev/ttyACM0 & 6 else 7 mavlink start -r 800000 -d /dev/ttyACM0 -m config -x 8 fi
複製程式碼

三、硬體在環在模擬(HIL)

按照官方教程,如果編譯master版本的韌體,而機架選擇固定翼時能夠正常模擬,但是機架選擇四旋翼就沒有輸出了。如果編譯stable版本的韌體, 那麼兩種機架都可以正常模擬. 這也就是在第一點裡提到要切換到stable分支上的一個原因, 另一個原因則是master版本與stable版本之間的子模組有不少差別, 同步之後從master切換到stable是一個坑. 

先記這麼多,後續有了繼續補充。

重點:拔掉SD卡,更改啟動指令碼