Pixhawk原生PX4固件中的坑


作為一名飛控開發的小學生:),最近入坑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控制台時,都會出現亂碼。拔掉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是一個坑. 

先記這么多,后續有了繼續補充。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM