以前装PX4二次开发环境遇到了很多坑,也查过了很多帖子都很难达到理想的效果,现在重新捡起来,在安装时遇到的问题一个一个记录与解决,现在我把我成功安装与编译运行所遇到的问题与解决方案全都记录下来,希望给初入坑的人提供帮助。

linux系统:ubuntu18.04 (非虚拟机)

网络条件:可以上谷歌

一、下载源码和子模块

git clone -b v1.11.3 https://github.com/PX4/PX4-Autopilot.git

下载完毕后,界面如下:

进入源码目录:

cd PX4-Autopilot

接着:

sudo chmod 777 -R * 

下载子模块:

git submodule update --init --recursive

这个过程时长视网络状况而定,我的网络可以上谷歌,所以7分钟就解决了。

二、安装依赖项,编译

进入源码目录,运行:

bash ./Tools/setup/ubuntu.sh

接下来,输入如下命令检查gcc安装状态arm-none-eabi-gcc --version,如果提示没有该工具,则按照提示下载:

下载的命令:

sudo spt update
sudo apt install gcc-arm-none-eabi

再次查看该工具,提示如下即安装成功。

然后编译PX4固件,编译之前我们先查看PIX飞控对应版本的编译命令,

(官网:https://docs.px4.io/master/en/dev_setup/building_px4.html)

我的飞控为Pixhawk 4,所以进入源码目录并执行:

cd PX4-Autopilot
make px4_fmu-v5_default

编译过程中可能会出现如下错误:

/usr/include/newlib/math.h:18:3: error: '__ULong' does not name a type   __ULong i[2];  
 ^~~~~~~compilation terminated due to -Wfatal-errors.

按照字面意思理解,这个错误的意思就是源码中出现了未知的数据类型ULong,这是因为新的代码适用于新的系统,而老的系统没有定义这个。所以我们要去做的就是去系统的头文件中定义这个类型:

在/usr/include/newlib/math.h前面添加定义#define __ULong unsignedlong就行(具体位置:#ifndef _MATH_H_ 后面)。

再次编译,该错误解决,但出现如下新错误:

../../platforms/common/include/px4_platform_common/atomic.h:169:34: error: parameter 'expected' set but not used [-Werror=unused-but-set-parameter]  inline bool compare_exchange(T *expected, T desired)                                
compilation terminated due to -Wfatal-errors.cc1plus: all warnings being treated as errors

错误解释:当我们在函数中定义一个变量,我们给这个变量赋初值,但是在我们的函数结束之前,这个值并没有用于使用,换句话说,这个变量是没有实际意义的,完全可以去掉不用。

针对PX4 1.11.0 可修改文件PX4-Autopilot\cmake\px4_add_common_flags.cmake,注释-Werror行:

针对PX4 1.8.0,可修改文件PX4-Autopilot\cmake\common\px4_base.cmake,注释-Werror行。

再次编译,该错误变成警告,可忽略。

最后,成功编译。

三、地面站的安装

在上面这个网站下载QGC:

Releases · mavlink/qgroundcontrol · GitHub

在这里,我选择了4.0.11版本。不选择新版本的原因是安装完后不能打开,可能是版本太高的原因与我linux一些软件不兼容。

QGC安装与运行说明文档:

Download and Install · QGroundControl User Guide

按如下图安装运行:

对于运行后QGC地面站没有地图显示的问题,科学上网后问题得到解决。

在PX4源码目录下,运行

make px4_sitl jmavsim

这时候QGC就会与jmavsim连接上啦,可以在地面站进行航点规划

四、gazebo环境搭建与使用

1、下载模型

Building PX4 Software | PX4 User Guide

从这里下载gazebo模型,放到~/.gazebo/models/里,若没有.gazebo则运行一下gazebo,若没有models则新建一个。

2、更改python默认编码,sudo gedit /usr/lib/python2.7/site.py,找到setencoding()函数修改 encoding=”utf-8”

3、先安装一下mavros相关包,看官方说明文档这里,我选择二进制安装运行下面这一步就行:

ROS with MAVROS Installation Guide | PX4 User Guide

这里我将kinetic改为我ubuntu18.04的ros版本melodic。

进入PX4源码目录,运行

make px4_sitl gazebo

 

根据网上的说法,说这些错误不影响代码的运行,故忽略。

对此,我们尝试用QGC航点规划,来控制GAZEBO的无人机,效果如下图:

参考官方文档链接:Gazebo Simulation | PX4 User Guide

 后续将继续完善~……

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐