Ubuntu 18.04系统下搭建PX4/Pixhawk原生固件编译环境
经参考总结CSDN上多位开发者的文章,经调整亲测可行!
参考文章:
(7条消息) 搭建无人机仿真环境之PX4安装中出现的一些问题的解决_TYINY的博客-CSDN博客
(9条消息) 最新Linux系统下搭建PX4/Pixhawk原生固件编译环境!!!_C_zzzzz的博客-CSDN博客
添加用户到dialout工作组
创建独立用户的目的是这样可以让开发环境分离开来,避免出现不同用户间的版本冲突等情况。将用户加入dialout用户组的目的是dialout拥有对串口tty的操作权限
sudo usermod -a -G dialout $USER
注意:注销后重新登录
安装软件包
#更新软件源列表:
sudo apt-get update -y
#安装git、zip、cmake、qt、ninja等必用软件包:
sudo apt-get install git zip qtcreator cmake build-essential genromfs ninja-build exiftool -y
注:添加源操作一般成功后会跳出一个“OK”,update成功后会有个“done”。
安装常用python依赖包及管理工具:
sudo apt-get install python-argparse python-empy python-toml python-numpy python-yaml \
python-dev python-pip -y
sudo -H pip install --upgrade pip
sudo -H pip install pandas jinja2 pyserial cerberus
安装正确版本的gcc-arm-none-eabi!!!
用户在ubuntu系统下编译的固件要在arm系统中运行,所以一定会用到交叉编译器,先到下面这个网站下一个比较高版本的安装文件:
https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-rm/downloads
亲测有效,强烈建议2017-q4版本!!!
解压
tar jxvf gcc-arm-none-eabi-7-2017-q4-major-linux.tar.bz2 -C /usr/bin
修改环境变量
vim /etc/profile
添加到最后一行,i进入编辑模式 ,esc推出编辑模式,:wq保存退出。若vim提示权限问题,sudo su 进入管理员模式在进行上述操作。
export PATH=/usr/bin/gcc-arm-none-eabi-7-2017-q4-major/bin:$PATH
使新的环境变量生效,随后重启
source /etc/profile
reboot
查看编译器版本确认是否配置成功
echo $PATH
arm-none-eabi-gcc --version
运行指令且结果如下:
环境配置检测
编译源码
#克隆源码
git clone -b v1.8.2 https://github.com/PX4/Firmware.git
#更新子模块:
git submodule update --init --recursive
#编译:
make px4_fmu-v2_default
下面的列表显示了通用板的构建命令:
Pixhawk 4: make px4_fmu-v5_default
Pixracer: make px4_fmu-v4_default
Pixhawk 3 Pro: make px4_fmu-v4pro_default
Pixhawk Mini: make px4_fmu-v3_default
Pixhawk 2: make px4_fmu-v3_default
mRo Pixhawk: make px4_fmu-v3_default (supports 2MB Flash)
HKPilot32: make px4_fmu-v2_default
Pixfalcon: make px4_fmu-v2_default
Dropix: make px4_fmu-v2_default
MindPX/MindRacer: make airmind_mindpx-v2_default
mRo X-2.1: make auav_x21_default
Crazyflie 2.0: make bitcraze_crazyflie_default
Intel® Aero Ready to Fly Drone: make intel_aerofc-v1_default
Pixhawk 1: make px4_fmu-v2_default
固件编译:
成功
报错问题处理
1.无法make,或者如下图:
方案:
#make是操作字符 px4fmu是固件名称 -v2是版本号 _default是默认配置
#实际make之后是一个文件名称,需要编译的模块都在其中
#可以输入make p 然后按Tab键,会跳出一连串p开头的文件
2.缺少模板
方案:
缺什么补什么,根据提示补模板。中途会出现如下问题:
方案:终端输入如下:
python2 --version #查看python2安装版本
python3 --version #查看python3安装版本
python --version#查看系统正在使用的版本
现在改为python3
终端输入
echo alias python=python3 >> ~/.bashrc
source一下
source ~/.bashrc
版本查看:
python --version
紧接着升级pip,
python -m pip install --upgrade pip
3.交叉环境出错
重装交叉环境,切记强烈建议2017-q4版本!!!
4. git submodule update --init --recursive中遇到的问题
- 问题1
如果使用镜像github.com.cnpmjs.org进行git clone ,在执行git submodule update --init --recursive时出现:
~/PX4_Firmware$ git submodule update --init --recursive
子模组 'Tools/jMAVSim'(https://github.com.cnpmjs.org/PX4/jMAVSim.git)未对路径 'Tools/jMAVSim' 注册
子模组 'Tools/sitl_gazebo'(https://github.com.cnpmjs.org/PX4/sitl_gazebo.git)未对路径 'Tools/sitl_gazebo' 注册
子模组 'boards/atlflight/cmake_hexagon'(https://github.com.cnpmjs.org/PX4/cmake_hexagon.git)未对路径 'boards/atlflight/cmake_hexagon' 注册
子模组 'mavlink/include/mavlink/v2.0'(https://github.com.cnpmjs.org/mavlink/c_library_v2.git)未对路径 'mavlink/include/mavlink/v2.0' 注册
子模组 'platforms/nuttx/NuttX/apps'(https://github.com.cnpmjs.org/PX4/NuttX-apps.git)未对路径 'platforms/nuttx/NuttX/apps' 注册
子模组 'platforms/nuttx/NuttX/nuttx'(https://github.com.cnpmjs.org/PX4/NuttX.git)未对路径 'platforms/nuttx/NuttX/nuttx' 注册
子模组 'platforms/qurt/dspal'(https://github.com.cnpmjs.org/ATLFlight/dspal.git)未对路径 'platforms/qurt/dspal' 注册
子模组 'src/drivers/gps/devices'(https://github.com.cnpmjs.org/PX4/GpsDrivers.git)未对路径 'src/drivers/gps/devices' 注册
子模组 'src/drivers/uavcan/libuavcan'(https://github.com.cnpmjs.org/PX4/uavcan.git)未对路径 'src/drivers/uavcan/libuavcan' 注册
子模组 'src/lib/ecl'(https://github.com.cnpmjs.org/PX4/ecl.git)未对路径 'src/lib/ecl' 注册
子模组 'src/lib/matrix'(https://github.com.cnpmjs.org/PX4/Matrix.git)未对路径 'src/lib/matrix' 注册
子模组 'src/modules/micrortps_bridge/micro-CDR'(https://github.com.cnpmjs.org/PX4/micro-CDR.git)未对路径 'src/modules/micrortps_bridge/micro-CDR' 注册
解决方法:
检查 .gitmodule文件中的url格式
按照以下方法更换一下即可:
gedit .gitmodules
将.gitmodules文件中所有github.com替换为github.com.cnpmjs.org,例如
[submodule “mavlink/include/mavlink/v2.0”]
path = mavlink/include/mavlink/v2.0
url = https://github.com.cnpmjs.org/mavlink/c_library_v2.git
branch = master
修改完后,再次执行:
git submodule sync
- 问题2
wtj-virtual-machine:~/PX4_Firmware$ git submodule update --init --recursive
fatal: Needed a single revision
无法在子模组路径 'Tools/jMAVSim' 中找到当前版本
解决方法:
删除对应文件夹,如删除文件夹 jMAVSim