1. 程式人生 > >Ubuntu作業系統下Pixhawk原生韌體PX4的編譯方法

Ubuntu作業系統下Pixhawk原生韌體PX4的編譯方法

在Ubuntu上搭建環境相對簡單許多,按照PX4中文維基官網的教程即可。

工具鏈安裝

  • 許可權設定

把使用者新增到使用者組 “dialout”(如果這步沒做,會導致很多使用者許可權問題):

    .1 sudo usermod -a -G dialout $USER

然後登出後,重新登入,因為重新登入後所做的改變才會有效

  • 安裝CMake
    .1 sudo add-apt-repository ppa:george-edison55/cmake-3.x -y
    .2 sudo apt-get update
    .3 # 必備軟體(python、git、qt)
    .4 sudo
apt-get install python-argparse git-core wget zip \ python-empy qtcreator cmake build-essential genromfs -y .5 # 模擬工具 .6 sudo add-apt-repository ppa:openjdk-r/ppa .7 sudo apt-get update .8 sudo apt-get install openjdk-8-jre .9 sudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-8
-jdk openjdk-8-jre clang-3.5 lldb-3.5 -y
  • 解除安裝模式管理器

Ubuntu配備了一系列代理管理,這會嚴重干擾任何機器人相關的串列埠(或usb串列埠),解除安裝掉它也不會有什麼影響。

    .1 sudo apt-get remove modemmanager
  • 更新包列表和安裝下面的依賴包
    .1 sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded -y
    .2 sudo add-apt-repository ppa:team-gcc-arm-embedded/ppa
    .3 sudo apt-get
update .4 sudo apt-get install python-serial openocd \ flex bison libncurses5-dev autoconf texinfo build-essential \ libftdi-dev libtool zlib1g-dev \ python-empy gcc-arm-none-eabi -y

程式碼編譯

  • 安裝Git
    .1 sudo apt-get install git-all
  • 下載程式碼
    .1 mkdir -p ~/src
    .2 cd ~/src
    .3 git clone https://github.com/PX4/Firmware.git
  • 初始化
    先進入Firmware資料夾,進而進行初始化、更新子模組操作,耐心的等待……
    .1 cd Firmware
    .2 git submodule update --init --recursive
  • 編譯
    在上一步的操作結束之後,即可進行編譯:
    .1 make px4fmu-v2_default

注意到“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 wget https://launchpad.net/gcc-arm-embedded/4.9/4.9-2015-q3-update/+download/gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz
  • 去舊迎新
    .1 pushd .
    .2 # => 解除安裝新版的gcc-arm-none-eabi
    .3 sudo apt-get remove gcc-arm-none-eabi
    .4 # => 安裝下載好的gcc-arm-none-eabi
    .5 .tar -jxf gcc-arm-none-eabi-4_9-2015q3-20150921-linux.tar.bz2
    .6 sudo mv gcc-arm-none-eabi-4_9-2015q3 /opt
    .7 exportline="export PATH=/opt/gcc-arm-none-eabi-4_9-2015q3/bin:\$PATH"
    .8 if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi
    .9 # => 使路徑生效
    .10 . ~/.profile
    .11 popd

對於GCC5.4.3版本的下載:

    .1 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

其餘操作不再贅述

筆者裝的是Ubuntu 64位系統,而上述arm-none-eabi是直接下載的編譯好的32位,還需要安裝一個東西

    .1 sudo apt-get install lsb-core

可以檢查arm-none-eabi 4.9是否安裝成功,輸入以下指令:

    .1 arm-none-eabi-gcc --version

如果出現如下資訊,交叉編譯環境搭建就沒有什麼問題了

    .1 ~$ arm-none-eabi-gcc --version
    .2 arm-none-eabi-gcc (GNU Tools for ARM Embedded Processors) 4.9.3 20150529 (release) [ARM/embedded-4_9-branch revision 227977]
    .3 Copyright (C) 2014 Free Software Foundation, Inc.
    .4 This is free software; see the source for copying conditions.  There is NO
    .5 warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  • 編譯
    .1 cd ~/src/Firmware
    .2 make px4fmu-v2_default

進入Firmware所在的資料夾,make成功後,顯示如下:
ok

Ninja

Ninja比Make更快,並且PX4的CMake生成器可以支援它。不幸的是,Ubuntu目前只支援一個非常過時的版本。

這裡博主下載二進位制檔案並新增到系統路徑來安裝最新版本的Ninja

    .1 mkdir -p $HOME/ninja
    .2 cd $HOME/ninja
    .3 wget https://github.com/martine/ninja/releases/download/v1.6.0/ninja-linux.zip
    .4 unzip ninja-linux.zip
    .5 rm ninja-linux.zip
    .6 exportline="export PATH=$HOME/ninja:\$PATH"
    .7 if grep -Fxq "$exportline" ~/.profile; then echo nothing to do ; else echo $exportline >> ~/.profile; fi
    .8 . ~/.profile

按上面的方法配置好ninja之後,以後每次一make都會呼叫它,這樣編譯速度會更快。

如果不想使用ninja的話,可以將其從’~/.profile’中註釋掉。

#export PATH=/home/fantasy/ninja:$PATH

Qt Creator

Qt Creator是官方唯一支援的IDE,在Ubuntu上針對PX4韌體使用,便於看程式碼的同時也可以進行編譯燒錄。

  • 安裝Qt
    .1 sudo apt-get install qtcreator

Qt Creator的常見功能如下:
create

在開啟Qt之前,應該建立project檔案:

    .1 cd ~/src/Firmware
    .2 mkdir ../Firmware-build
    .3 cd ../Firmware-build
    .4 cmake ../Firmware -G "CodeBlocks - Unix Makefiles"
    .5 #可以發現Firmware-build目錄生成了一些檔案

提個醒: 按照官網上面最後一行的命令,當前使用Qt編譯得到的將是build px4 ,因為預設的編譯指令是make posix_sitl_default,這不是大家所期待的結果。

解決方案:對於,Pixhawk硬體,將最後一行改成
cmake ../Firmware -G "CodeBlocks - Unix Makefiles" -DCONFIG=nuttx_px4fmu-v2_default

其他例如使用FMUv4的使用者請根據需求進行替換。

  • 開啟Qt
    Qt
    Ubuntu使用者只要匯入主資料夾裡的CMakeLists.txt檔案就可以了,開啟Qt,通過File -> Open File or Project -> 選擇CMakeLists.txt (預設位置在Firmware資料夾根目錄下)
    open

  • 專案配置
    選擇src/Firmware-build作為構建目錄
    build
    執行設定
    run

  • 編譯
    runit

  • 上傳

upload2

筆者剛開始的時候發現Qt中預設顯示的韌體不全,很多檔案都沒有顯示,如下圖所示
leave

進行下面的操作就哦可了

qtt

file

Eclipse on Ubuntu

ecl

在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有非常多的發行版,可以從這裡看到。

release

也可以在這裡進行選擇:

tag
    .1 ~$:cd ~/src/Firmware
    .2 # 檢視標籤(版本)
    .3 ~$:git tag
    .4 ...
    .5 v1.4.0rc1
    .6 v1.4.0rc2
    .7 v1.4.0rc3
    .8 v1.4.0rc4
    .9 v1.4.1rc1
    .10 v1.4.1rc2
    .11 ...
    .12 # 新建一個工作分割槽並切換到目標版本
    .13 git checkout -b branch_name tag_name

這樣就可以使用你想要的任意版本韌體進行開發了。(因為可能有的版本確實不太穩定)

Makefile

    .1 # Don't be afraid of this makefile, it is just passing
    .2 # arguments to cmake to allow us to keep the wiki pages etc.
    .3 # that describe how to build the px4 firmware
    .4 # the same even when using cmake instead of make.

Makefile只是將引數傳遞給cmake。所有與make相關的指令都可以在這裡找到,也可以自定義編譯指令,比如

    .1 #  explicity set default build target
    .2 fantasy: px4fmu-v2_default

於是博主編譯韌體變成下面這個樣子:

    .1 ~$:~/src/Firmware $ make fantasy
    .2 PX4 CONFIG: px4fmu-v2_default
    .3 ninja: no work to do.

做這些只為讓遇到相同問題的人少走彎路,專注核心問題,這也是筆者開展PX4中文維基漢化專案的初衷。
還望志同道合的你們多多支援!~