Windows / Ubuntu操作系统下Pixhawk原生固件PX4的编译方法
歡迎交流~ 個人 Gitter 交流平臺,點擊直達:
更新于2017.3.13
FAQ
本文說明針對 PX4 Firmware 1.6.0
- 問題 1: 找不到python jinja2模塊
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
解決方案:缺什么安什么
Windows系統下:
pip install jinja2
Linux系統下:
sudo apt-get install python-jinja2
- 問題 2: Windows下出現rsync error錯誤
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
解決方案:cmake nuttx rsync 僅使用相對路徑進行復制
對Firmware/cmake/nuttx/px4_impl_nuttx.cmake文件進行更改,點擊傳送門
- 問題 3:內存溢出
- 1
- 2
- 3
- 4
- 5
解決方案:移除不是必要的模塊. 配置在這里. 為了移除一個模塊, 可以直接注釋掉它:
對于FMUv2(Pixhawk1)或者FMUv3(Pixhawk 2)硬件,找到Firmware/cmake/configs/nuttx_px4fmu-v2_default.cmake
修改為:
- 1
即可
- 問題 4: gcc 版本
解決方案:gcc 4.8.4 已經過時了,目前支持的是 4.9.4還有 5.4.3版本。
正文
各個論壇以及QQ群中經常有人反應不知道怎么編譯Pixhawk原生固件PX4,筆者也為這個問題苦惱了很久,最近一時興起,想嘗試下官網的寫一個應用程序,但是原生代碼都編譯不過這可怎么能行,于是東查西試,解決了在Windows操作系統以及Ubuntu操作系統上編譯PX4固件的問題。
Windows 7 64bit
軟件安裝
首先,需要安裝一些軟件,CMake、32位的Java jdk以及PX4 Toolchain Installer。
CMake的話筆者使用的是CMake-3.3.2-win32-x86版本。
關于CMake的安裝有一點需要注意,在第三步Install Options安裝選項中,需要將CMake加入到系統路徑中:
Java sdk:
Eclipse 需要 Java,用命令 java -version 來查看 Java 是否配置 成功。
接下來進行PX4固件相關的配置,安裝PX4 Toolchain Installer,默認安裝在C盤根目錄下,筆者不服,非要安裝在D盤,安裝的時候一路下一步就行。
安裝完以后在開始菜單會出現一套工具鏈包括,PX4Console、PX4Ecplise.
代碼編譯
打開PX4console,下載PX4固件,輸入指令:
git clone https://github.com/PX4/Firmware.git- 1
切換到Firmware文件夾,輸入指令:
cd Firmware- 1
之后輸入指令:
git submodule update --init --recursive- 1
(根據網速耗時有差異,耐心等待)
關鍵一步
在開始最后的編譯之前,有一個步驟必不可少,將arm-none-eabi-gcc 4.7.4換成4.9.4或5.4.3,下載4.9.4版本的壓縮文件,5.4.3版本。
解壓后將這四個文件夾復制并替換到PX4Toolchain安裝目錄下的toolchain文件夾下,這里筆者替換到的文件夾為D:\px4\toolchain。
隨后啟動PX4 Console控制臺進行編譯,先進入Firmware文件夾,輸入指令:
cd Firmware- 1
進行編譯
make px4fmu-v2_default- 1
(漫長的等待,可能需要半個小時)
編譯成功的界面如下:
如果在沒有進行arm-none-eabi-gcc 4.7.4替換的情況下直接進行固件編譯,則會出現如下所示的錯誤:
為時不晚,依然來得及將下載好的4.9.4版arm-none-eabi-gcc解壓并替換掉Toolchain文件夾下的相應文件。
之后重啟PX4Console控制臺,首先還是先進入到Firmware文件夾下:
cd Firmware- 1
輸入指令:
make clean- 1
清除上一次的編譯,然后重新編譯,輸入指令:
make px4fmu-v2_default- 1
(又是漫長的等待,但是等待都是值得的)
固件燒錄
將飛控板通過USB連接電腦,輸入以下指令即可完成固件的燒錄:
make px4fmu-v2_default upload- 1
燒錄成功的界面如下圖:
配置Eclipse
現在控制臺已經編譯成功了,接下來就是進行Eclipse的配置了
- 打開PX4Eclipse。
第一次啟動時,選擇好workplace,并勾選Use this as the default and……。由于筆者以D盤作為工作目錄,因此這里依然保持將workplace放置在D盤。
- 建立工程
File -> New -> Makefile Project with Existing Code。
然后點擊Browse……到D:\px4\Firmware,并選擇Cross GCC,點擊Finish。
然后進入Workbench:
- 創建編譯目標
可以在右邊板塊中Make Target( 或者菜單 Window -> Show View -> Make Target 也可以打開),選中根文件夾(Firmware),可以創建新的 make Target(綠色圓形按鈕)。 如創建目標 px4fmu-v2_default
px4fmu-v2_default創建好如下:
同理創建目標:all,archives,clean,distclean,px4io-v2_default, px4fmu-v2_default upload
- 各 make target 說明
- clean – 刪除編譯的固件相關文件,不會清除archives
- px4fmu-v2_default—FMU 固件
- px4fmu-v2_default upload – 燒錄固件到飛控板
提示:與make有關的指令可以用Firmware/Makefile文件中查看
路徑配置
必須配置好Eclipse軟件的路徑才能進行編譯,這一步至關重要。
打開eclipse軟件,打開目錄欄的Project -> Priorities
有點意思的是,你得先打開左邊Firmware中的隨便一個文件,否則Priorities這一項會是灰色的,無法進行操作。
打開相應欄,更改CWD、PWD的路徑:
開始的路徑(如果裝在默認路徑則為C:\px4)
然后你的CWD路徑為 C:\px4\Firmware
這里將路徑改為 /D/px4/Firmware
差別不大,還望仔細,筆者當時在這個問題上可是糾結了特別久,無限的報錯,not contain Cmakelists.txt。也是得到高人相助,開始人指出來筆者還根本看不出,然后仔細的發現原來是:“\”、“/”“這樣的問題。
然后再將PWD的路徑也做相應的更改。編譯固件
點擊上述Target中的px4fmu-v2_default,即可進行編譯。此操作與在Console控制臺中輸入make有同樣的效果。
- 燒錄固件
固件的燒錄可以直接使用QGC地面站進行。也可以在PX4 Console或者PX4 Eclipse中進行,編譯成功后在PX4 Eclipse界面右側點擊Target中的px4fmu-v2_default upload即可進行固件的燒錄。這樣就可以將自己的算法加入到原生固件中了。
至此,在Windows環境下編譯Pixhawk原生固件PX4的操作已經完成。
Ubuntu 14.04 LTS
筆者同時也進行了Ubuntu上的環境搭建。跟隨大流,筆者安裝了Ubutnu 14.04 LTS虛擬機,64位操作系統。
在Ubuntu上搭建環境相對簡單許多,按照PX4中文維基官網的教程即可。
工具鏈安裝
- 權限設置
把用戶添加到用戶組 “dialout”(如果這步沒做,會導致很多用戶權限問題):
sudo usermod -a -G dialout $USER- 1
然后注銷后,重新登錄,因為重新登錄后所做的改變才會有效
- 安裝CMake
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 卸載模式管理器
Ubuntu配備了一系列代理管理,這會嚴重干擾任何機器人相關的串口(或usb串口),卸載掉它也不會有什么影響。
sudo apt-get remove modemmanager- 1
- 更新包列表和安裝下面的依賴包
- 1
- 2
- 3
- 4
- 5
- 6
- 7
代碼編譯
根據PX4中文維基官網教程。
- 安裝Git
- 1
- 下載代碼
- 1
- 2
- 3
- 初始化
先進入Firmware文件夾,進而進行初始化、更新子模塊操作,耐心的等待……
- 1
- 2
- 編譯
在上一步的操作結束之后,即可進行編譯:
- 1
注意到“make”是一個字符命令編譯工具,“px4fmu-v2”是硬件版本,“default”是默認配置,所有的PX4編譯目標遵循這個規則。
與Windows環境中相同,這里也可能因為gcc-arm-none-eabi版本不對,需要進行版本升級到4.9.4,方法如下:
- 下載gcc-arm-none-eabi 4.9.4,對于的文件夾命名為arm-none-eabi-4_9-2014**q3**
- 1
- 去舊迎新
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
對于GCC5.4.3版本的下載:
wget https://launchpad.net/gcc-arm-embedded/5.0/5-2016-q2-update/+download/gcc-arm-none-eabi-5_4-2016q2-20160622-linux.tar.bz2- 1
其余操作不再贅述
PX4 中文維基 同步更新。
筆者裝的是Ubuntu 64位系統,而上述arm-none-eabi是直接下載的編譯好的32位,還需要安裝一個東西
sudo apt-get install lsb-core- 1
可以檢查arm-none-eabi 4.9是否安裝成功,輸入以下指令:
arm-none-eabi-gcc --version- 1
如果出現如下信息,交叉編譯環境搭建就沒有什么問題了
~$ arm-none-eabi-gcc --version arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977] Copyright (C) 2014 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.- 1
- 2
- 3
- 4
- 5
- 6
- 編譯
- 1
- 2
進入Firmware所在的文件夾,make成功后,顯示如下:
Ninja
Ninja比Make更快,并且PX4的CMake生成器可以支持它。不幸的是,Ubuntu目前只支持一個非常過時的版本。
這里博主下載二進制文件并添加到系統路徑來安裝最新版本的Ninja:
mkdir -p $HOME/ninja cd $HOME/ninja wget https://github.com/martine/ninja/releases/download/v1.6.0/ninja-linux.zip unzip ninja-linux.zip rm ninja-linux.zip exportline="export PATH=$HOME/ninja:\$PATH" if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi . ~/.profile- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
按上面的方法配置好ninja之后,以后每次一make都會調用它,這樣編譯速度會更快。
如果不想使用ninja的話,可以將其從’~/.profile’中注釋掉。
#export PATH=/home/fantasy/ninja:$PATH
Qt Creator
Qt Creator是官方唯一支持的IDE,在Ubuntu上針對PX4固件使用,便于看代碼的同時也可以進行編譯燒錄。
- 安裝Qt
- 1
Qt Creator的常見功能如下:
在打開Qt之前,應該創建project文件:
cd ~/src/Firmware mkdir ../Firmware-build cd ../Firmware-build cmake ../Firmware -G "CodeBlocks - Unix Makefiles" #可以發現Firmware-build目錄生成了一些文件- 1
- 2
- 3
- 4
- 5
提個醒: 按照官網上面最后一行的命令,當前使用Qt編譯得到的將是build px4 ,因為默認的編譯指令是make posix_sitl_default,這不是大家所期待的結果。
解決方案:對于,Pixhawk硬件,將最后一行改成
cmake ../Firmware -G "CodeBlocks - Unix Makefiles" -DCONFIG=nuttx_px4fmu-v2_default
其他例如使用FMUv4的用戶請根據需求進行替換。
打開Qt
Ubuntu用戶只要導入主文件夾里的CMakeLists.txt文件就可以了,打開Qt,通過File -> Open File or Project -> 選擇CMakeLists.txt (默認位置在Firmware文件夾根目錄下)項目配置
選擇src/Firmware-build作為構建目錄
運行設置編譯
上傳
筆者剛開始的時候發現Qt中默認顯示的固件不全,很多文件都沒有顯示,如下圖所示
進行下面的操作就哦可了
Eclipse on Ubuntu
在Windows下習慣了使用Eclipse的用戶也可以直接在Ubuntu下使用Eclipse進行開發,與Qt一樣,這也是一款跨平臺的IDE。
就是Java配置有點復雜,用起來卻是非常方便的,除了不用更改環境設置,其他的都與Windows下無異,此處不在贅述。
一個很棒的特點就是Ubuntu下的Eclipse可以直接加中文注釋,這是別的編譯器沒有的,我嘗試了用Sublime看代碼,定義跳轉不太給力,Qt打開工程很慢。
目前為止最好的方法還是虛擬機,Windows改一行代碼編譯上傳可能需要五分鐘,非常費勁,但是Ubuntu可以說是極速。但是Windows下有很多好用的工具便于調試,Source Insight看代碼也是很給力。虛擬機完美。
至此,在Windows已經Ubuntu下的環境搭建已經全部搭建成功。
現在是2016.7.26 19:37 為了確保方法的有效性,筆者已經在都裝有Ubuntu虛擬機的筆記本和臺式機上用上述方法完成了兩種系統下環境搭建、代碼編譯的復現,親測有效。
Tips
下載特定版本的固件
PX4Firmware有非常多的發行版,可以從這里看到。
也可以在這里進行選擇:
其實下載鏈接都是https://github.com/PX4/Firmware.git。
~$:cd ~/src/Firmware # 查看標簽(版本) ~$:git tag ... v1.4.0rc1 v1.4.0rc2 v1.4.0rc3 v1.4.0rc4 v1.4.1rc1 v1.4.1rc2 ... # 新建一個工作分區并切換到目標版本 git checkout -b branch_name tag_name- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
這樣就可以使用你想要的任意版本固件進行開發了。(因為可能有的版本確實不太穩定)
Makefile
# Don't be afraid of this makefile, it is just passing # arguments to cmake to allow us to keep the wiki pages etc. # that describe how to build the px4 firmware # the same even when using cmake instead of make.- 1
- 2
- 3
- 4
Makefile只是將參數傳遞給cmake。所有與make相關的指令都可以在這里找到,也可以自定義編譯指令,比如
# explicity set default build target fantasy: px4fmu-v2_default- 1
- 2
于是博主編譯固件變成下面這個樣子:
~$:~/src/Firmware $ make fantasy PX4 CONFIG: px4fmu-v2_default ninja: no work to do.- 1
- 2
- 3
做這些只為讓遇到相同問題的人少走彎路,專注核心問題,這也是筆者開展PX4中文維基漢化項目的初衷。
還望志同道合的你們多多支持!~
Just Enjoy It .
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? By Fantasy
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的Windows / Ubuntu操作系统下Pixhawk原生固件PX4的编译方法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Pixhawk原生固件以往代码版本的下载
- 下一篇: pixhawk自学笔记之px4程序启动顺