作者:Fantasy
开发者,主要研究方向为姿态估计与控制 。
引子
各个论坛以及QQ群中经常有人反应不知道怎么编译Pixhawk原生固件PX4,笔者也为这个问题苦恼了很久,最近一时兴起,想尝试下官网的写一个应用程序
,但是原生代码都编译不过这可怎么能行,于是东查西试,解决了在Windows操作系统以及Ubuntu操作系统上编译PX4固件的问题。
原作链接:
http://blog.csdn.net/oqqenvy12/article/details/52035127
Windows
☆Win7 64位系统测试通过
1软件安装
首先,需要安装一些软件,CMake、32位的Java jdk以及PX4 Toolchain Installer。
CMake的话笔者使用的是CMake 3.3.2版本。
Java sdk:
Eclipse 需要 Java,用命令 java -version 来查看 Java 是否配置 成功。
接下来进行PX4固件相关的配置,安装PX4 Toolchain Installer,默认安装在C盘根目录下,笔者不服,非要安装在D盘,安装的时候一路下一步就行。
安装完以后在开始菜单会出现一套工具链包括,PX4Console、PX4Ecplise.
2代码编译
打开PX4console,下载PX4固件,输入指令:
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;">git <span style="color: #000088;">clone</span> https:<span style="color: #880000;">//github.com/PX4/Firmware.git</span></code>
切换到Firmware文件夹,输入指令:
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="color: #660066;">cd</span> Firmware</code>
之后输入指令:
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="color: #880000;">git</span> <span style="color: #880000;">submodule</span> <span style="color: #880000;">update</span> <span style="color: #006666;">--</span><span style="color: #880000;">init</span> <span style="color: #006666;">--</span><span style="color: #880000;">recursive</span></code>
(根据网速耗时有差异,耐心等待)
最后直接编译,输入指令:
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="color: #660066;">make</span></code>
(漫长的等待,可能需要半个小时)
看到编译100%很开心吧,但是还是存在错误,arm-none-eabi-gcc 4.7.4版本不对,换成4.8.4即可,下载该压缩文件地址点这里(http://pan.baidu.com/s/1c1QzUU0)。
解压后将这四个文件夹复制并替换到PX4Toolchain安装目录下的toolchain文件夹下,这里我替换到的文件夹为D:\px4\toolchain。
之后重启PX4Console控制台,先输入指令:
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="color: #660066;">make</span> clean</code>
清除上一次的编译,然后重新编译,输入指令:
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="color: #660066;">make</span></code>
(又是漫长的等待,但是等待都是值得的)
3配置Eclipse
现在控制台已经编译成功了,接下来就是进行Eclipse的配置了
第一次启动时,选择好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,upload px4fmu-v2_default
打开相应栏,更改CWD、PWD的路径:
开始的路径(如果装在默认路径则为C:\px4)
然后你的CWD路径为 C:\px4\Firmware
这里将路径改为 /D/px4/Firmware
至此,在Windows环境下编译Pixhawk原生固件PX4的操作已经完成。
Ubuntu
☆Ubuntu 14.04 LTS 64位系统测试通过
笔者同时也进行了Ubuntu上的环境搭建。跟随大流,笔者安装了Ubutnu 14.04 LTS虚拟机,64位操作系统。
在Ubuntu上搭建环境相对简单许多,按照PX4中文维基官网的教程即可。
(PX4中文Wiki地址:
https://fantasyjxf.gitbooks.io/px4-wiki/content/1_Getting-Started/linux.html)
1工具链安装
把用户添加到用户组 “dialout”(如果这步没做,会导致很多用户权限问题)
sudo usermod -a -G dialout $USER
然后注销后,重新登录,因为重新登录后所做的改变才会有效。
sudo add-apt-repository ppa:george-edison55/cmake-3.x -ysudo apt-get update
sudo apt-get install python-argparse git-core wget zip \
python-empy qtcreator cmake build-essential genromfs -y
# simulation toolssudo apt-get install ant protobuf-compiler libeigen3-dev libopencv-dev openjdk-7-jdk openjdk-7-jre clang-3.5 lldb-3.5 -y
Ubuntu配备了一系列代理管理,这会严重干扰任何机器人相关的串口(或usb串口),卸载掉它也不会有什么影响。
sudo apt-get remove modemmanager
sudo add-apt-repository ppa:terry.guo/gcc-arm-embedded -ysudo apt-get updatesudo 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
2代码编译
根据PX4中文维基官网教程。
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="font-family: 微软雅黑;">sudo apt-get install git-all</span></code>
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="font-family: 微软雅黑;">mkdir -p ~/srccd ~/srcgit <span style="color: #000088;">clone</span> https:<span style="color: #880000;">//github.com/PX4/Firmware.git</span></span></code>
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="font-family: 微软雅黑;"><span style="color: #880000;">cd</span> <span style="color: #880000;">Firmwaregit</span> <span style="color: #880000;">submodule</span> <span style="color: #880000;">update</span> <span style="color: #006666;">--</span><span style="color: #880000;">init</span> <span style="color: #006666;">--</span><span style="color: #880000;">recursive</span></span></code>
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="font-family: 微软雅黑;">make px4fmu-v2_default</span></code>
注意到“make”是一个字符命令编译工具,“px4fmu-v2”是硬件版本,“default”是默认配置,所有的PX4编译目标遵循这个规则。
与Windows环境中相同,这里也可能因为gcc-arm-none-eabi版本不对,需要进行版本升级到4.8.4,方法如下:
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="font-family: 微软雅黑;">wget https://launchpadlibrarian<span style="color: #444444;">.net</span>/<span style="color: #006666;">186124160</span>/gcc-arm-none-eabi-<span style="color: #006666;">4</span>_8-<span style="color: #006666;">2014</span>q3-<span style="color: #006666;">20140805</span>-linux<span style="color: #444444;">.tar.bz</span>2</span></code>
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="font-family: 微软雅黑;"><span style="color: rgb(102, 0, 102);">pushd</span> .<span style="color: rgb(136, 0, 0);"># => 卸载新版的gcc-arm-none-eabi</span><span style="color: rgb(102, 0, 102);">sudo</span> apt-get remove gcc-arm-none-eabi<span style="color: rgb(136, 0, 0);"># => 安装下载好的gcc-arm-none-eabi</span>tar xjvf gcc-arm-none-eabi-<span style="color: rgb(0, 102, 102);">4</span>_8-<span style="color: rgb(0, 102, 102);">2014</span>q3-<span style="color: rgb(0, 102, 102);">20140805</span>-linux.tar.bz2<span style="color: rgb(102, 0, 102);">sudo</span> mv gcc-arm-none-eabi-<span style="color: rgb(0, 102, 102);">4</span>_8-<span style="color: rgb(0, 102, 102);">2014</span>q3 /optexportline=<span style="color: rgb(0, 136, 0);">"export PATH=/opt/gcc-arm-none-eabi-4_8-2014q3/bin:\$PATH"</span><span style="color: rgb(0, 0, 136);">if</span> grep -Fxq <span style="color: rgb(0, 136, 0);">"<span style="color: rgb(102, 0, 102);">$exportline</span>"</span> ~/.profile; <span style="color: rgb(0, 0, 136);">then</span> <span style="color: rgb(102, 0, 102);">echo</span> nothing to <span style="color: rgb(0, 0, 136);">do</span> ; <span style="color: rgb(0, 0, 136);">else</span> <span style="color: rgb(102, 0, 102);">echo</span> <span style="color: rgb(102, 0, 102);">$exportline</span> >> ~/.profile; <span style="color: rgb(0, 0, 136);">fi</span><span style="color: rgb(136, 0, 0);"># => 使路径生效</span>. ~/.profile<span style="color: rgb(102, 0, 102);">popd</span></span></code>
笔者装的是Ubuntu 64位系统,而上述arm-none-eabi是直接下载的编译好的32位,还需要安装一个东西
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="font-family: 微软雅黑;">sudo apt-get install lsb-core</span></code>
可以检查arm-none-eabi 4.8.4是否安装成功,输入以下指令:
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="font-family: 微软雅黑;">arm-none-eabi-g<span style="color: #000000;">++</span> -v</span></code>
如果出现如下信息,交叉编译环境搭建就没有什么问题了 。
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="font-family: 微软雅黑;"><span style="color: #660066;">cd</span> ~/src/Firmwaremake</span></code>
进入Firmware所在的文件夹,make成功后,显示如下:
3Qt Creator
Qt Creator是官方唯一支持的IDE,在Ubuntu上针对PX4固件使用,便于看代码的同时也可以进行编译烧录。
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="font-family: 微软雅黑;"><span style="color: #660066;">sudo</span> apt-get install qtcreator</span></code>
Qt Creator的常见功能如下:
在打开Qt之前,应该创建project文件:
<code style="display: block; color: inherit; font-family: 'Source Code Pro', monospace;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; box-sizing: border-box; background: transparent;"><span style="font-family: 微软雅黑;"><span style="color: #660066;">cd</span> ~/src/Firmwaremkdir ../Firmware-build<span style="color: #660066;">cd</span> ../Firmware-buildcmake ../Firmware -G <span style="color: #008800;">"CodeBlocks - Unix Makefiles"</span><span style="color: #880000;">#可以发现Firmware-build目录生成了一些文件</span></span></code>
Ubuntu用户只要导入主文件夹里的CMakeLists.txt文件就可以了,打开Qt,通过File -> Open File or Project -> 选择CMakeLists.txt (默认位置在Firmware文件夹根目录下)
运行设置
至此,在Windows已经Ubuntu下的环境搭建已经全部搭建成功。
现在是2016.7.26 19:37 ,为了确保方法的有效性,笔者已经在都装有Ubuntu虚拟机的笔记本和台式机上用上述方法完成了两种系统下环境搭建、代码编译的复现,亲测有效。
做这些只为让遇到相同问题的人少走弯路,专注核心问题,这也是笔者发起PX4中文维基汉化项目的初衷。
PX4中文维基
https://fantasyjxf.gitbooks.io/px4-wiki/content/
还望志同道合的你们多多支持!~
知控制 微信公众号
飞控漫谈交流QQ群
荣誉出品
加入我们
专业的无人机开发交流平台
QQ群
目前一群已满,欢迎大家加入二群
群名称 :飞控漫谈交流II群
群ID:570911686
微信群
飞控漫谈交流微信群,请您加管理员为好友(ID:darkriddle)注明“加群”,邀请您进群。
『知控制』微信公众号
搜索ID:ucontrol
或扫描二维码
关注更多精彩