手把手教你在Windows系统建立PX4的Eclipse开发环境常青藤
转载注明出处
写在前面这几年无人机和开源飞控发展很快,Pixhawk是一款性能和可扩展性都很不错的硬件飞控开发平台。PX4是这个硬件平台搭载的开源软件,近几年的更新一直很活跃,架构越来越完善,功能越来越多。而且这个软件也不限于在Pixhawk上使用,对其他平台比如树莓派等的支持也越来越多。针对众多初次进入这个领域的开发者可能会遇到的问题,笔者在官方文档和网上众多教程的基础上,针对性的做了一些整理和总结,如有侵犯您的权益,请联系修改。
本文主要介绍了在Windows系统下配置PX4的eclipse开发环境的方法,文中主要内容来自网上分享,针对实际情况做了一些整理。按照这个步骤,最终可得到一个包含所有源码的PX4开发环境。
1
前期准备
本文章设置的是运行在Windows7系统、基于eclipse和PX4原生程序的开发环境,本环境在win10系统也能正常运行。严格按照本教程操作后,绝大多数情况会正常运行。
安装说明与下载链接:
(1) Cmake
下载:
Cmake要根据系统位数来安装,笔者使用的是cmake-3.6.1-win64-x64版本,可能有些老了,在官网要到老版本里面去找下载。
安装:
软件安装推荐用默认选项,只有一点要注意,在第三步Install Options安装选项中,必须要将CMake加入到系统路径中,如图。
(2) Java jdk
后面要用的Eclipse软件需要 Java,进入官网下载页面,这里下载的是32位Java jdk,版本如图所示。
下载:
安装:
Java jdk也是默认选项安装,这里如果有专业知识更好。安装完后要用命令 java
-version 来查看 Java 是否配置成功,如图所示就是成功了。
这个软件是PX4官方推荐的开发工具链,里面包含了一个eclipse和必要的开发工具,强烈推荐使用这个软件里面经过配置的eclipse。
下载:
到官网下载软件,或者使用下面的链接直接下载。
安装:
安装px4_toolchain_installer_v14_win.exe,默认是安装在C盘根目录下,笔者安装在D盘根目录,安装的时候一路下一步就行,安装路径不能有空格。注意在安装过程中会安装Pixhawk飞控需要的驱动文件,一定要确认安装。完成后的文件夹如图所示。
安装完以后在开始菜单会出现一套工具包括,PX4Console、PX4Ecplise,以及其他的几个软件都是有用的。
2
PX4源码clonePX4的代码都托管在GitHub上面,现在需要做的是从GitHub上将源码下载到自己的电脑上,需要网络,请保持网络畅通。下载前请先进入GitHub上PX4/Firmware项目的官网,确保网站可以访问。
之后的源码下载有多种方式,如使用“PX4 Software Download”,使用“PX4 Console”等,也可以使用git GUI、git BASH等,由于2018年2月github更改了接口协议,所以之后建议使用官方git软件(git GUI和git bash)进行代码clone,否则有可能出现无法连接网络的问题。
2.1
用PX4 Software Download下载源码这是在
PX4 ToolchainInstaller软件里捆绑安装的一个批处理文件,双击快捷方式就可以自动下载所有的源码(包括子模块)到指定位置,然后请直接用eclipse编译。但是笔者没有用这个方法,推荐使用下一节的PX4 Console方式。
2.2
使用PX4 console克隆源码PX4下分好几个项目,例如:Bootloader,Firmware,Nuttx,等。Firmware是固件(嵌入式软件),对其他项目有依赖,所以若是分别下拉代码到独立的文件夹下,Firmware就不能编译成功。源码clone分为主项目clone和补全子项目两部分。在Windows操作系统下,请在开始菜单的如图所示位置打开PX4控制台进行源码clone。
2.2.1
主项目clone主项目是指PX4飞控程序的主代码,官网如下位置提供了教程,但是笔者按照如下方式多次失败,后来改变了路径后才成功。
注意:这里建议的操作方式与官网推荐的方式不同。官网建议的命令下载的代码是在~PX4文件夹里面的深层位置,路径太长且不好找。所以笔者这里用的是D:/px4/Firmware路径。
下面这段命令是官方教程的命令,不建议使用,仅做说明。
mkdir -p ~/srccd ~/srcgit clone https://github.com/PX4/Firmware.git cd Firmwaregit submodule update --init --recursive
下面是笔者自己使用的方式,亲测可用。
第一步,在Console中定位源码的目标clone文件夹D:/px4/Firmware,使用命令:
cd /D/PX4
第二步,将GitHub项目上的代码clone到目标文件夹中。注意,命令中使用的网址是PX4源的地址,就是下图中“copy”位置的内容,注意不要输错。后面的参数-b v1.5.5是clone程序的v1.5.5版本的意思,这个版本目前比较稳定,编译的时候出问题也少。
git clone https://github.com/PX4/Firmware.git -b v1.5.5
然后就需要等待一段时间,大概半小时左右。如果长时间都未成功就重新来一遍。完成后会在Firmware文件夹中建立以下文件和文件夹。
下图中部分子模块的文件夹如“NuttX”等现在还没有太多内容,里面只有几个“.git”文件,这些文件是下一步补全子项目代码需要用的,不要改动,现在可以进入下一步。
2.2.2
补全子项目源码在转移到其他IDE之前,使用Console验证源码的完整性是很重要的。在windows上,使用PX4 Console,将路径定位在主目录“Firmware”。然后把其依赖项目当成子模块,下拉到Firmware目录下。依次输入如下3条命令加回车。
cd Firmwaregit submodule update --init --recursivecd ..
下拉代码整个过程需要几十分钟。如果在过程中出现长时间不动的情况,有可能是网络不好卡住了,用ctrl + C停止,然后重新执行以上命令。
在重新执行命令的时候,可能出现类似以下的提示:
这是因为,之前在补全“NxWidgets”和“jMAVSim”文件夹时出现了异常停止,重新执行以上命令时这里就会不正常。解决办法是,找到Firmware文件夹里面对应的“NuttX/NxWidgets”文件夹,将这个文件夹删掉,然后重新执行以上命令时,在以上这些文件夹的位置就不会出现异常,会发现程序能够向“NxWidgets”文件夹里下载数据。以上“NxWidgets”文件夹仅仅是举例,可能会在其他位置出现异常,解决方法类似。
下代码的时候网络一定要好,如果网络断了以上情况就会经常出,即使删了某个文件夹也不能完全解决类似问题。执行本节命令时,需要注意执行结果,结果不能出现“fatal……”提示,如果出现了说明问题没有完全解决。
等下拉完成,就可以build项目了。
2.2.3 补全jinja2笔者最初编译px4代码的时候还不需要做这一节操作,但是最近评论中有朋友反应一些问题导致不能正常编译。得益于“zhaosen deng”和“
鼓励斌”的帮助,经过一段时间的摸索,笔者的解决方案如下。在PX4 Console中依次输入如下命令,如果网络正常的话一会就好。
cd /d/px4/Python27/Lib/site-packagesgit clone git://github.com/mitsuhiko/jinja2.git easy_install jinja2
注意,以上语句的第2句没有http://这些字符,可能是知乎自己给加上的,暂时还不清楚
3
使用Console编译PX4源码编译源码可以使用PX4 console,也可以使用PX4 eclipse。强烈建议先使用PX4 Console编译。首先要解决一个GCC版本的问题。
3.1
替换GCC根据笔者的经验,因为GCC版本问题,在正式编译之前需要将PX4 Toolchain中安装的GCC工具链进行替换。比如笔者之前的GCC是arm-none-eabi-gcc
4.7.4版本,编译时出现了如下错误:
这是因为gcc-arm-none-eabi版本不对,需要将arm-none-eabi-gcc 4.7.4换成4.8.4,下载
4.8.4版本的压缩文件。目前GCC可能有更高的版本,当4.8.4不可用时换成4.9.4或5.4.3。注意要下载“.ZIP”文件。
官网地址:
或者直接点击下面链接下载:
下载后解压文件如图。
解压后将这四个文件夹复制并替换覆盖到PX4Toolchain安装目录下的toolchain文件夹下,这里笔者替换到的文件夹为D:\px4\toolchain。替换之后:
然后就可以编译了。
3.2
在Console中编译在Console中输入如下命令(这个make taget适用于NuttX / Pixhawk based boards,其他硬件使用其他taget):
cd Firmwaremake px4fmu-v2_default
第一次编译过程也是要联网的,因为需要从GitHub源继续下载某些必要的文件,首次编译成功后以后编译不需要联网。
注意:编译的时候不要同时打开PX4 eclipise和PX4 console,否则会造成不可预知的问题。
如果编译成功,界面如图所示。
如果不成功,采用如下顺序操作。
第一步:关掉界面,再次make px4fmu-v2_default。如果不成功,执行下一步。
第二步:
使用命令清除编译文件
make clean
然后再次
make px4fmu-v2_default
一般到这一步就不会出现问题,如果还有问题,请仔细检查以上的步骤。
使用make clean之后,第一次编译时间过长,大概30到50分钟,之后每次编译的时间比较短,一般15秒左右。所以可以正常编译的时候,不要轻易make clean,会很耗时间。一般情况对源码改动之后只需要直接编译taget。
4
使用Eclipse编译PX4源码建议在Console中一切正常后,才使用Eclipse编译源码。
4.1
建立工程Eclipse是一个功能非常强大的IDE,能极大方便开发工作。
打开“PX4 Toolchain”下的“PX4 Eclipse”,此快捷方式会启动PX4工具链中自带的Eclipse,不推荐使用其他Eclipse。然后需要在Eclipse中加入Firmware项目。在Eclipse中选择 File -> Import -> C/C++
-> Existing Makefile project ,然后选择Cross GCC,在弹出的文件夹对话框中选择Firmware目录,然后点击完成。
4.2
创建make tagets在Eclipse右边面板中,选择“make targets”面板,展开Firmware文件夹。右键点击Firmware,选择“Add make target”,给target命名,并勾选“Save as
target”,依次创建如下几个target:clean, px4fmu-v2_default, px4fmu-v2_default upload。含义如下:
clean:仅清除应用程序部分即Firmware;
px4fmu-v2_default:编译Pixhawk对应的固件
px4fmu-v2_default
upload:编译并更新固件到PX4FMU
v2版上。
编译代码并上传到硬件
首先,双击px4fmu-v2_default 一次构建Firmware和所有依赖项目,在build过程中,如果长时间没有进度,就关掉整个Eclipse,然后再执行一遍直到编译成功。强制关掉时不会清除已经编译好的文件。
然后双击
px4fmu-v2_default upload。就可以通过USB开始上传固件到PX4FUM硬件。
到此为止,整个PX4开发环境就建立完成。
5
其他问题5.1 与java相关的问题在启动px4 eclipse可能出现一些与java有关的错误问题。因为自带的eclipse需要Java的支持才能正常运行,这时请检查Java的版本、系统路径配置、安装位置以及是否被安全软件干扰的问题。
如果之前安装过Java,务必要检查现在使用的Java与之前的Java是否冲突,需要注意Java系统环境变量的配置,不要指向之前的Java。
5.2
编译不成功造成这个结果的原因多种多样,有可能是软件位数的问题。在32位Windows 7系统上,所有相关软件都使用32位;在64位系统上,除了Cmake使用64位意外,其他软件要和32位电脑相同。
另外,Eclipse中需要确定环境变量的内容,环境变量在Eclipse中的Firmware文件夹上右键找properties。
以及,注意:编译的时候不要同时打开PX4 eclipise和PX4 console,否则会造成不可预知的问题。
另外,如果之前装过Cmake,建议先卸载完全再重新安装推荐的版本。
5.3 执行编译目标时出现“Permission denied”问题这个问题可能是由于别的程序也在同时访问程序文件造成的,按照原开发者的建议,让电脑闲置一会,然后再试试
5.4 有关Error 1或jinja2报错的解决这里要感谢“zhaosen deng”和“
鼓励斌”的帮助。
可能会出现“*** [px4fmu-v2_default] Error 1”、“couldn't find Python module jinja2”等报错,如下图。
根据提示意思是不能发现Python中的jinja2模块,这是因为在Python27中缺少jinja2模板语言的文件,可以使用以下命令来解决。
在PX4 Console中依次输入如下命令,如果网络正常的话一会就好。
cd /d/px4/Python27/Lib/site-packagesgit clone git://github.com/mitsuhiko/jinja2.git easy_install jinja2
注意,以上语句的第2句没有http://这些字符,可能是知乎自己给加上的,暂时还不清楚
成功后,再次编译源码。
5.5 关于代码下载失败或依赖库下载不成功的解决方法
网速慢的时候,遇到这种情况是非常正常的。在代码clone的控制台里面,某个模块的代码不完整时会有异常提示。而且如果直接再次更新依赖库并不能解决问题,这是因为不正常的代码占用了路径。需要按照以下方法处理。
检查控制台提示信息时,不要看到最后一句提示是正常的就认为所有都正常,可能前面有报错信息。发现报错信息后,找到对应的文件夹,整个删掉,然后再次进行依赖库更新就可以正常进行了,停止后再检查所有代码是否正常下载。
如果按照以上方法处理后依然有某一两个文件夹更新失败,说明对应的文件夹依赖关系有冲突,是远程库里的依赖关系不对,或者是在代码更新版本的过程中,依赖库的版本发生了较大变化。此时不能用自动更新,需要手动更新。
6
参考文档