由于 Jetson Orin NX 常被用作自主无人机机载电脑,其往往需要与烧写了 PX4 固件的飞控进行通信,飞控的烧写与配置往往会遇到很多问题,因此本文将介绍时下最款的 Pixhawk 系列飞控 Pixhawk 6X,做一个固件烧写和参数配置的指南,主要参考
Holybro Pixhawk 6X | PX4 User Guide (main)
Building PX4 Software | PX4 User Guide (main)
GitHub - PX4/PX4-Autopilot: PX4 Autopilot Software
Kakute H7 刷写 px4 固件-CSDN博客
飞控(Pixhawk 4 Mini)与机载电脑(Jetson Xavier NX )实现串口通信_想要个小姑娘的博客-CSDN博客
需要注意的是,Pixhawk 6X 分为 飞控 和 基板(Baseboard)两个部分,而基板又有 Standard 和 Mini 两种类型,参见
Pixhawk Baseboard Ports - Holybro Docs
Pixhawk Mini-Base Ports - Holybro Docs
标准基板的接线如下图所示(Mini 基板的接线大同小异)
根据官方的指导说明
Pixhawk 6X 在连接上 QGroundControl 时会自动安装固件,但是有时出现不小心刷写了别的固件或者固件出错或者需要烧写指定版本的固件,仍然需要自己编译固件并烧写固件,因此本文详细介绍如何烧写固件并进行相关参数的配置!
接下来我们基于 Mini 基板 介绍 Pixhawk 6X 的固件烧写与参数配置。
Pixhawk 系列固件的获取方式有两种,一种是从 PX4 的 GitHub 网站上直接下载编译好的固件,另一种是下载 PX4-Autopilot 源码,自己编译源码生成固件,这里将分别介绍两种方法,并比较其优劣。
值得注意的是 Pixhawk 6X 对应于 px4_fmu-v6x_default 固件,下载其他固件到 Pixhawk 6X 是无效的!
如果不需要对固件作任何改动,推荐使用该方法!
首先进入不同版本固件的下载地址
Releases · PX4/PX4-Autopilot · GitHub
找到 v1.13.3 稳定发行版
然后点击 Assets 下的 Show all 84 assets,找到 px4_fmu-v6x_default.px4 固件并下载
这样我们就得到了 Pixhawk 6X 的原生 px4_fmu-v6x_default 固件!
如果需要修改固件,必须使用该方法!
首先我们需要前往 PX4 的 GitHub 网站上下载相应版本的源码
GitHub - PX4/PX4-Autopilot: PX4 Autopilot Software
这里我们选择了目前最新的稳定版本 1.13.3,我们将其下载在 ~/Documents/ 目录下,终端输入
cd ~/Documents/
git clone -b v1.13.3 https://github.com/PX4/PX4-Autopilot.git
下载完成后进入 PX4-Autopilot 文件夹,并编译生成 px4_fmu-v6x_default 固件,终端输入
cd ~/Documents/PX4-Autopilot/
make px4_fmu-v6x_default
报错可以参考
Building PX4 Software | PX4 User Guide (main)
常见报错举例
CMake Error at cmake/kconfig.cmake:6 (message):
kconfiglib is not installed or not in PATH
please install using "pip3 install kconfiglib"
只需根据提示安装相应的功能包
pip3 install kconfiglib
同理如果遇到别的模块未安装,按照上面的操作进行即可,常见的缺少的包的安装命令如下
sudo pip3 install kconfiglib
pip3 install --user packaging
pip3 install --user jinja2
pip3 install --user jsonschema
pip3 install --user toml
如果出现报错
arm-none-eabi-gcc: Command not found
则先安装交叉编译包
sudo apt-get install gcc-arm-none-eabi -y
最后编译完成
此时我们发现在 ~/Documents/PX4-Autopilot/build/ 文件夹下 生成了一个 文件,其中就有 px4_fmu-v6x_default.px4 文件,这就是编译生成的固件!
烧写 PX4 固件一般有 QGroundControl 烧写和源码烧写两种方法,但是 Pixhawk 6X 并没有进入 DFU 模式的按钮,从而也就无法烧写 Bootloader,没有匹配的 Bootloader 也就无法烧写相应固件,如果你的设备有进入 DFU 模式的按钮,可以参考下文进行源码烧录
Kakute H7 刷写 px4 固件-CSDN博客
因此本文仅介绍通过 QGroundControl 烧写 PX4 固件的方法,但是由于 QGroundControl 并不支持 arm 架构的系统,因此如果要通过 QGroundControl 来烧写 PX4 固件的话就必须另外找 一个非 arm 架构系统(x86架构)的电脑!
在另一台电脑上:
先安装 QGroundControl,其官方下载方式参考
Download and Install · QGroundControl User Guide
终端输入
sudo usermod -a -G dialout $USER
sudo apt-get remove modemmanager -y
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-libav gstreamer1.0-gl -y
sudo apt install libqt5gui5 -y
sudo apt install libfuse2 -y
然后重启或者退出帐号重新登录,之后下载 QGroundControl.AppImage 可执行文件
https://d176tv9ibo4jno.cloudfront.net/latest/QGroundControl.AppImage
授予可执行权限并运行
chmod +x ./QGroundControl.AppImage
./QGroundControl.AppImage
然后打开 QGroundControl,可以看到如下界面
点击左上角的 Q,
选择 Vehicle Setup,并选择 Fireware
插入飞控,右边会弹出一个窗口
勾选 Advanced settings,并选择 Custom firm file...
点击 OK,选择上一节下载的原生固件或者编译的原生固件
开始烧写固件
烧写完成后就可以开始选择飞机模型、陀螺仪校准、遥控器校准、参数配置等行为了!
此时我们打开 Analyze Tools,
可以看到 IMU 频率只有 50 HZ,这是原生固件设置的 IMU 发布频率
接下来我们介绍如何通过源码的方式烧写 PX4 固件,并且将 IMU 频率设置为 200!
在自主无人机中,往往对飞控的 IMU 频率有较高要求,但是在原生固件中 IMU 频率一般不高(50HZ),这就需要我们去修改 IMU 以满足我们的需求,然而通过 QGroundControl 地面站修改 IMU 频率,在飞控断电重启之后会恢复回原来的频率,这需要每次启动飞控都修改 IMU 频率,相当麻烦,幸运的是,通过修改 PX4 源码中 IMU 频率然后生成固件并烧入飞控中就不会出现这样的问题,参考
修改PX4飞控的imu频率-CSDN博客
打开 /Documents/PX4-Autopilot/src/modules/mavlink/ 路径下的 mavlink_main.cpp 文件,
由于一般 IMU 话题一般用的是 /mavros/imu/data_raw 和 mavros/imu/data 分别对应源码中 HIGHRES_IMU 和 ATTITUDE_QUATERNION,因此只要修改这两个变量的值!
搜索 HIGHRES_IMU,将其值修改为 200.0f,一共两处地方
其次修改 ATTITUDE_QUATERNION,将其值修改为 200.0f,一共两处地方
然后重新编译生成 px4_fmu-v6x_default 固件,终端输入
cd ~/Documents/PX4-Autopilot/
make px4_fmu-v6x_default
编译完成后接下来就可以开始烧写固件了,在烧写时选择修改源码后编译生成的固件
点击 OK 开始烧入固件
烧写完成后查看 IMU 发布频率
可以看到 IMU 频率已经到 200 HZ 左右了!
至此,Pixhawk 6X 的 PX4 固件 px4_fmu-v6x_default 的烧写就完成了!
接下来我们通过 QGroundControl 对飞控的一些基本参数进行设置,主要参考
PX4 固件常用 QGroundControl 参数设置-CSDN博客
主要修改一下几点:
(1)