作為一名飛控開發的小學生:),最近入坑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是一個坑.
先記這么多,后續有了繼續補充。