天天看点

【Pixhawk】Ubuntu下编译原生固件PX4

环境:

编译主机:Ubuntu 20.0.4 ( 官方推荐18.0.4)

源码版本:PX4_1.12.0 (目前最新,截至2021-7-22)

建议

尽量以官网文档为主:https://dev.px4.io/master/zh/

步骤

1、下载PX4源码

新建一个

pixhawk/source

目录,cd进去git源码

cd pixhawk/source
git clone https://github.com/PX4/Firmware.git
           

下载完成后,该目录下会出现一个Firmware目录

【Pixhawk】Ubuntu下编译原生固件PX4

2、更新子模块

到Firmware目录中更新子模块

cd Firmware
git submodule update --init --recursive
           

中途可能因为网络原因卡住,直接

ctrl+z

退出,删除卡住的子目录,重新执行更新命令,反复几次直到成功,大概20分钟

3、修改权限

PX4官方警告:“永远不要使用sudo来修复权限问题,否则会带来更多的权限问题,需要重装系统来解决”

所以给普通用户一点权限来解决编译时使用sudo可能带来的危机

sudo usermod -a -G dialout $USER
           

4、下载依赖库

运行源码中的脚本来安装依赖

bash ./Firmware/Tools/setup/ubuntu.sh
           
【Pixhawk】Ubuntu下编译原生固件PX4

运行完往上翻一翻,有没有失败的红色段,失败就重复操作几次,直到全部成功,一般是网络问题导致的

没问题则按照提示重启

5、卸载模式管理器

sudo apt-get remove modemmanager
           

Ubuntu配备了一系列代理管理,这会严重干扰相关的串口(或usb串口),最明显的表现就是硬件连接到PC机后,无法读出硬件,无法烧录上传固件。

6.编译仿真工具

编译jmavsim

make px4_sitl jmavsim
           

编译 gazebo,同理

make px4_sitl gazebo
           

编译成功,自动启动gazebo软件,画面里有一个小飞机

在命令行输入help可查看支持的命令

【Pixhawk】Ubuntu下编译原生固件PX4

7、编译源码

在Firmware下编译PX4源码

输入

make p

,按下table键,会出现一系列可编译的px4固件,根据自己需求编译

【Pixhawk】Ubuntu下编译原生固件PX4

这里选择v5

make px4_fmu-v5_default
           

中途会遇到很多缺少的文件,一般是git不完整,删除文件夹重新更新子模块即可,实在不行去git官网复制一下找不到的文件

编译成功

【Pixhawk】Ubuntu下编译原生固件PX4

下载固件

make px4_fmu-v5_default upload
           

【BUG1】

但是发现有时候ninja会报错:

ninja not work to do
           

这个时候我们只需在/Firmware 文件夹下执行:

make clean

然后重新编译即可…

【BUG2】

waiting for the bootloader……
           
【Pixhawk】Ubuntu下编译原生固件PX4

决办法是去

QGC地面站

下载我们的.px4文件到pixhawk中,QGC会帮我们加载bootloader

8.修改源码重新编译验证

现在我们重新编译一下官方给的例子

在/src/example中已经编写好了

我们只需要打开

/Firmware/boards/px4/fmu-v5/default.cmake

去掉px4_simple_app前的#,将此模块编译到固件中

【Pixhawk】Ubuntu下编译原生固件PX4

打开地面站的MAVLink控制台,键入help,发现px4_simple_app已经被编译好了

【Pixhawk】Ubuntu下编译原生固件PX4

运行一下

【Pixhawk】Ubuntu下编译原生固件PX4

验证成功!