PX4的学习
一篇全面的PX4飞控与QGroundControl地面站入门实战教程。首先,文章介绍了PX4作为“无人机领域的安卓”的定位,其支持多旋翼、固定翼、无人车等多种载具,并详细解析了从底层硬件、NuttX实时操作系统、uORB通信中间件到上层控制模块的分层架构。其次,针对Ubuntu 20.04和22.04系统,提供了从Git克隆源码、安装Gazebo仿真环境到编译PX4固件的完整步骤,并汇总了empy
一、PX4固件简介
1、PX4是什么?
PX4是由苏黎世联邦理工学院的计算机视觉与几何实验室的一个软硬件项目PIXHAWK演变而来,有“开源飞控之王”之称,PX4是专业的自动驾驶仪,为各种载具提供支持。
PX4遵循BSD协议,该协议允许将开源软件二次开发后用于商业用途。目前广泛应用于视觉导航、视觉避障、多机协同、目标跟踪等用途。
PX4的定位:无人机领域的安卓
2、PX4能做什么?
支持的载具:多旋翼、直升机、飞艇、固定翼无人机、无人车、无人船、水下机器人、旋翼机。
应用场景:航拍、行业应用、科学研究。
3、学习资料
PX4官方文档:PX4 自动驾驶仪用户指南 | PX4 Guide (main)
MAVLink官方文档:MAVLink Developer Guide | MAVLink Guide
4、PX4架构

PX4架构的具体描述:
PX4的架构是一个从物理硬件到上层应用、再到外部通信的分层协作系统。
(1)底层硬件与实时操作系统
最底层是飞控硬件(如Pixhawk)及其连接的各类传感器(IMU、GPS、气压计、距离传感器等)、电机执行器以及任务载荷(相机等),这些硬件之上运行着NuttX实时操作系统,为整个系统提供多任务调度与实时响应能力。
(2)中间层:驱动 + 通信中间件
在操作系统之上是驱动层和中间件层:驱动层负责与电机、传感器等硬件直接交互;中间件则包括uORB(用于模块间的高效异步消息通信)、MAVLink(与地面站和遥控器进行遥测、数传通信)以及RTPS(用于与ROS2等外部系统集成)。
(3)顶层:飞行应用与控制模块
最顶层是应用/模块层,包含Commander(状态机与任务管理)、Navigator(路径规划)、Controllers(姿态与位置控制)、Logger(日志记录)等核心模块,它们通过uORB订阅和发布传感器数据、控制指令,完成飞行决策与控制输出。
整个系统与外部的地面站(如QGroundControl)和遥控器通过MAVLink或RC链路双向交互,形成一个完整的无人机飞控闭环。
二、PX4编译环境安装
Ⅰ、Ubuntu20.04环境安装
1、选择阿里云服务器


2、安装git
更新软件包列表:sudo apt update
升级已安装的软件包:sudo apt upgrade
安装git:sudo apt install git
3、下载源码
github获取PX4源码:GitHub - PX4/PX4-Autopilot: PX4 Autopilot Software · GitHub
git克隆源码仓库:
git clone https://github.com/PX4/PX4-Autopilot.git --branch v1.13.3(1.13.3版本)
更新项目所有子模块:git submodule update --init --recursive --force
上述两步命令也可以换成一步命令解决。
git克隆源码仓库+自动初始化并克隆该仓库所依赖的所有 Git 子模块:
git clone https://github.com/PX4/PX4-Autopilot.git --branch v1.13.3 --recursive(1.13.3版本)
补充如何在一个虚拟机中将已下载的目录文件传输到另一个虚拟机
查看虚拟机的IP地址:ifconfig
检查SSH是否已安装:which ssh、which sshd
安装SSH服务:sudo apt install openssh-server -y
启动SSH服务:sudo systemctl start sshd 或使用 service命令 sudo service ssh start
设置开机自启:sudo systemctl enable sshd
检查SSH服务状态:sudo systemctl status sshd【应该显示 active (running)】
被传输文件的虚拟机网络需要设置为桥接模式。
传输文件,目录文件需要添加 -r :scp -r ./PX4-Autopilot sean@10.14.17.71:/home/sean/
如果无法设置为桥接模式,两个虚拟机可以直接通过U盘传递文件。
4、安装PX4和gazebo9环境
进入到源码目录下输入如下的命令:
sudo bash ./Tools/setup/ubuntu.sh
接着重启Ubuntu,开始编译部件。
源代码目录彻底清理:make distclean
编译PX4仿真脚本:make px4_sitl_default gazebo
5、问题解决
出现的问题:未安装kconfiglib

解决办法:根据提示进行安装
出现的问题:未安装empy

解决办法:根据提示进行安装
出现的问题:未安装pyros-genmsg

解决办法:根据提示进行安装
出现的问题:未安装packaging

解决办法:根据提示进行安装
出现的问题:未安装toml

解决办法:根据提示进行安装
出现的问题:未安装numpy

解决办法:根据提示进行安装
出现的问题:empy模块版本不兼容

解决办法:
①卸载已有的empy
pip3 uninstall empy
②如果系统包管理安装的也卸掉
sudo apt remove python3-empy -y
③安装3.3.4版本的empy
pip3 install --user empy==3.3.4
出现的问题:未安装jinja2

解决办法:根据提示进行安装
出现的问题:缺少future模块

解决办法:pip3 install --user future
出现的问题:未安装jsonschema

解决办法:根据提示进行安装
6、编译飞控固件
make px4_fmu-v3_default
问题:缺少编译飞控硬件固件所需的编译器

解决:sudo apt install gcc-arm-none-eabi
Ⅱ、Ubuntu22.04环境安装
1、选择阿里云服务器


2、安装git
更新软件包列表:sudo apt update
升级已安装的软件包:sudo apt upgrade
安装git:sudo apt install git
3、下载源码
github获取PX4源码:GitHub - PX4/PX4-Autopilot: PX4 Autopilot Software · GitHub
git克隆源码仓库:
git clone https://github.com/PX4/PX4-Autopilot.git --branch v1.14.4(1.14.4版本)
更新项目所有子模块:git submodule update --init --recursive --force
上述两步命令也可以换成一步命令解决。
git克隆源码仓库+自动初始化并克隆该仓库所依赖的所有 Git 子模块:
git clone https://github.com/PX4/PX4-Autopilot.git --branch v1.14.4 --recursive(1.14.4版本)
4、安装PX4和Gazebo Garden环境
下载并添加 Gazebo 官方 GPG 密钥:
sudo wget https://packages.osrfoundation.org/gazebo.gpg -O /usr/share/keyrings/pkgs-osrf-archive-keyring.gpg
添加 Gazebo 官方源到系统:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/pkgs-osrf-archive-keyring.gpg] http://packages.osrfoundation.org/gazebo/ubuntu-stable $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/gazebo-stable.list > /dev/null
更新软件包列表:sudo apt update
升级已安装的软件包:sudo apt-get upgrade
安装 Gazebo Garden:sudo apt install gz-garden
验证Gazebo Garden:gz sim
进入到源码目录下输入如下的命令:
sudo bash ./Tools/setup/ubuntu.sh --no-sim-tools
接着重启Ubuntu,开始编译部件。
源代码目录彻底清理:make distclean
编译PX4仿真脚本:make px4_sitl gz_x500
5、问题解决
出现的问题:Ubuntu22.04没有软件包openjdk-14-jre和openjdk-14-jdk,可能Ubuntu20.04还有这个软件包。
解决办法:
①安装 Ubuntu 22.04 官方源中提供的 OpenJDK 17。
sudo apt update
sudo apt upgrade
sudo apt install openjdk-17-jre openjdk-17-jdk -y
②修改PX4安装脚本
nano ./Tools/setup/ubuntu.sh
Ctrl + W搜索、Ctrl + X离开
出现的问题:未安装kconfiglib

解决办法:根据提示安装
出现的问题:未安装empy

解决办法:根据提示安装
出现的问题:未安装pyros-genmsg

解决办法:根据提示安装
出现的问题:empy模块版本不兼容

解决办法:
①卸载已有的empy
pip3 uninstall empy
②如果系统包管理安装的也卸掉
sudo apt remove python3-empy -y
③安装3.3.4版本的empy
pip3 install --user empy==3.3.4
出现的问题:未安装jinja2

解决办法:根据提示安装
出现的问题:未安装jsonschema

解决办法:根据提示安装
三、PX4主要参数讲解
1、传感器标定参数
是什么:用于配置和管理传感器(罗盘、陀螺仪、加速度计、气压计等)的标定参数,包括硬件标识、优先级和温度补偿系数。
用来干嘛:
-
识别连接的传感器硬件(通过ID)
-
设置多传感器优先级(如多个罗盘时选择使用哪个)
-
存储传感器标定数据(偏移量、比例系数、温度补偿系数)
怎么用:
-
通过 QGroundControl 执行传感器校准
-
可选启用温度补偿功能(适用于陀螺仪、加速度计、气压计)
-
温度校准可在环境舱中进行,也可通过飞行日志数据进行板外校准
|
参数名 |
说明 |
典型设置 |
规则/注意事项 |
|---|---|---|---|
|
|
罗盘硬件ID |
奇数=外置,偶数=内置 |
ID为奇数→外置罗盘;ID为偶数→内置罗盘 |
|
|
罗盘优先级 |
外置 > 内置 |
外置优先级必须高于内置,否则航向会不稳定 |
|
|
加速度计标定数据 |
标定自动生成 |
标定时需将飞行器置于6个不同静止姿态 |
|
|
陀螺仪标定数据 |
标定自动生成 |
标定时飞行器必须完全静止 |
|
|
陀螺仪温度补偿开关 |
0=禁用,1=启用 |
启用后传统 |
|
|
加速度计温度补偿开关 |
0=禁用,1=启用 |
启用后传统 |
|
|
气压计温度补偿开关 |
0=禁用,1=启用 |
启用温度补偿前需要先完成基本标定 |
|
|
温度校准时所需温升度数 |
5°C |
校准过程中需实际升温这么多,否则无法完成 |
|
|
温度校准范围 |
5°C ~ 60°C |
覆盖从冷启动到工作温度的整个范围 |
2、Control Allocate(控制分配)
是什么:将飞控计算出的力矩和推力指令(如俯仰、滚转、偏航、油门)分配到实际电机/舵机的功能模块。
用来干嘛:
-
将角速率控制器的输出转换为具体执行器指令
-
支持不同飞行器构型(多旋翼、固定翼、VTOL、无人车)
-
处理电机失效时的重新分配
怎么用:
-
在 QGC 中选择机型(自动设置
CA_AIRFRAME参数) -
进入执行器配置界面设置
-
配置哪个输出控制哪个电机/舵机、电机的正反转向、舵机的行程范围
|
参数名 |
说明 |
典型设置 |
规则/注意事项 |
|---|---|---|---|
|
|
飞行器构型类型 |
多旋翼/固定翼/VTOL |
设置后会自动配置电机几何布局,通常由选择机架时自动设置 |
|
|
旋翼数量 |
4 / 6 / 8 |
必须与实际电机数量一致 |
|
|
力矩系数(x = 0 ~ 7) |
默认 0.05 |
表示电机产生力矩的效率,数值越大扭矩效应越强 |
|
|
电机位置偏移 |
根据布局设置 |
正数/负数决定电机在机体轴上的位置,影响混控器计算 |
|
|
启用控制分配 |
1 = 启用 |
必须启用才能使用执行器配置界面 |
3、解锁检查参数
是什么:无人机解锁(arming)前的安全检查项配置。
用来干嘛:
-
确保起飞前系统状态正常
-
防止地面意外启动电机
-
区分预解锁(安全舵面可动)和完全解锁(电机可转)两种状态
怎么用:
-
通过 QGC 参数编辑器配置各项检查
-
测试环境可放宽检查(如使用断路器参数)
-
正式飞行保持严格检查
|
参数名 |
说明 |
典型设置 |
规则/注意事项 |
|---|---|---|---|
|
|
无GPS是否允许解锁 |
0=不允许,1=允许 |
室内飞行必须设为1,否则无法解锁 |
|
|
避障未就绪是否阻止解锁 |
0=忽略,1=阻止 |
若使用避障传感器,建议设为1 |
|
|
预解锁模式 |
0=禁用,1=安全开关,2=上电启用 |
安全开关优先用这个而非 |
|
|
降落后自动上锁延迟(秒) |
2 |
设为0或负数可禁用自动上锁 |
|
|
解锁手势保持时间(秒) |
1 |
防止误触,需保持解锁动作至少1秒 |
|
|
遥控器解锁通道 |
0=未分配 |
建议分配一个两段开关 |
|
|
解锁开关是否为按钮 |
0=两段开关,1=瞬时按钮 |
使用瞬时按钮时设为1,需配合手势解锁 |
|
|
IO安全开关断路器 |
0=启用,22027=禁用 |
生产环境飞行慎用,启用后安全开关被永久旁路 |
4、失控保护与飞行终止参数
是什么:当飞控与遥控器、地面站失去联系或检测到故障时的应急处理机制,以及触发后执行的动作配置。
用来干嘛:
-
遥控信号丢失时自动返航或降落
-
低电压时触发保护动作
-
GPS失效时切换控制模式
-
飞行终止时触发安全设备(降落伞等)
怎么用:
-
设置失联后的等待时间和动作类型
-
配置返航高度确保安全
-
(可选)配置飞行终止的PWM输出值
|
参数名 |
说明 |
典型设置 |
规则/注意事项 |
|---|---|---|---|
|
|
RC失联后等待时间(秒) |
0.5 ~ 5 |
短距飞行可设小值,长距设2-3秒避免信号短暂丢失触发返航 |
|
|
RC失联动作 |
0=返航,1=降落,2=终止任务,3=悬停 |
远航任务必须开启返航;测试环境可设降落 |
|
|
低电压动作 |
0=警告,1=返航,2=降落 |
动力电池一般设1,任务电池需根据飞行时间谨慎设置 |
|
|
低电压阈值(V) |
根据电池设置 |
3S锂电约10.5V,4S约14V,6S约21V |
|
|
GPS失效动作 |
0=悬停,1=降落 |
自动任务中可设悬停,等待GPS恢复 |
|
|
返航高度(m) |
高于周围障碍物 |
返航高度必须高于周围最高障碍物,建议留有冗余 |
|
|
飞行终止断路器 |
0=启用终止功能 |
设为非零值会禁用飞行终止功能 |
|
|
终止时PWM输出值 |
用于展开降落伞等 |
注意:PWM值需根据降落伞展开机构规格设置 |
5、PID控制参数(比例-积分-微分控制器参数)
(1)多旋翼角速度环
是什么:多旋翼飞行器最底层的控制环,控制机体绕各轴的旋转角速度。
用来干嘛:
-
决定飞行器对打杆动作的响应速度和干脆程度
-
是整个控制系统中最重要的调参环节
怎么用:
-
调参顺序为 P → D → I
-
先调P:增加响应速度,太大会震荡
-
再调D:抑制震荡,增加阻尼
-
最后调I:消除静差,修正偏航
|
参数名 |
说明 |
调试顺序 |
规则/注意事项 |
|---|---|---|---|
|
|
滚转角速度 P |
1 |
P值太大→高频震荡;太小→响应迟缓 |
|
|
滚转角速度 I |
3 |
修正持续的外部干扰(如重心偏移、持续风) |
|
|
滚转角速度 D |
2 |
D值太大→高频震动/电机发热;太小→抑制震荡不足 |
|
|
俯仰轴同上 |
同上 |
同上 |
|
|
偏航角速度 P |
同上 |
偏航响应通常比滚转/俯仰慢,可适当降低预期 |
|
|
偏航角速度 I |
同上 |
修正偏航方向静差(如电机扭矩不平衡) |
(2)多旋翼姿态环
是什么:角速度环的外层,控制机体的空间姿态角度。
用来干嘛:决定飞机恢复水平姿态的力度和稳定速度。
|
参数名 |
说明 |
规则/注意事项 |
|---|---|---|
|
|
滚转姿态 P |
姿态环的P值越大→恢复水平越快,但可能引发震荡 |
|
|
俯仰姿态 P |
建议比角速度环P值小一个数量级 |
|
|
偏航姿态 P |
偏航姿态环通常用默认值即可 |
(3)多旋翼位置/速度环
是什么:最外层的控制环,控制飞机在空间中的位置和移动速度。
用来干嘛:实现悬停精度、自主飞行和速度控制。
|
参数名 |
说明 |
规则/注意事项 |
|---|---|---|
|
|
水平位置 P(悬停纠偏力度) |
值越大→位置纠偏越快,但可能产生超调震荡 |
|
|
垂直高度 P |
值越大→高度保持越硬,但油门响应可能突兀 |
|
|
水平速度 PID |
影响飞行平滑度;D值较大时会使"刹车"更柔和 |
|
|
垂直速度 PID |
影响升降手感 |
|
|
最大水平速度(m/s) |
默认5m/s,竞技可调高 |
|
|
最大上升速度(m/s) |
默认3m/s |
|
|
最大倾斜角度(度) |
默认35°,角度越大→水平加速越快 |
6、滤波参数
是什么:对传感器原始数据进行降噪处理的算法参数。
用来干嘛:
-
权衡控制延迟与噪声抑制
-
降低延迟可提升飞行性能,但会增加电机发热和续航降低
怎么用:
-
先通过飞行日志分析噪声频率
-
逐步提高截止频率,观察电机温度和飞行表现
-
使用陷波滤波器抑制特定频率噪声
|
参数名 |
说明 |
典型设置 |
规则/注意事项 |
|---|---|---|---|
|
|
陀螺仪低通截止频率(Hz) |
30~120 |
有振动→降低截止频率(30Hz以下);响应迟钝→提高截止频率(最高120Hz,延迟约1.9ms) |
|
|
D项专用截止频率(Hz) |
30~80 |
陀螺仪数据用于D项时单独滤波,通常比普通截止频率低 |
|
|
陀螺仪陷波中心频率(Hz) |
0=禁用 |
通过FFT图分析噪声峰值频率后设置 |
|
|
陷波带宽(Hz) |
根据分析设置 |
带宽太宽会滤除有用信号,太窄可能无法覆盖噪声 |
|
|
陀螺仪最大发布速率(Hz) |
2000 / 4000 |
提高速率可降低延迟,但增加CPU负载 |
|
|
使用IO芯片 |
0=禁用(降低延迟) |
设为0可将陀螺仪直连FMU,降低延迟但牺牲AUX输出 |
7、无人车参数
是什么:用于控制轮式或履带式地面车辆的特定参数。
用来干嘛:
-
配置阿克曼转向或差速转向控制
-
设置速度限制和控制增益
怎么用:
-
构建固件时需要编译
_rover版本(如make px4_fmu-v6x_rover) -
在QGC选择无人车机型
-
配置控制分配(转向、油门通道)
|
参数名 |
说明 |
规则/注意事项 |
|---|---|---|
|
|
轮距(阿克曼转向) |
仅阿克曼转向需要设置,单位米 |
|
|
最大速度(m/s) |
根据车辆动力和场地限制设置 |
|
|
速度控制 PID |
影响车速闭环响应 |
|
编译需求 |
|
标准固件不包含无人车控制,需编译Rover专用版本 |
8、固定翼参数
是什么:针对固定翼飞行器气动特性的控制参数。
用来干嘛:控制舵面响应、空速保持和飞行姿态。
怎么用:
-
先手动模式确认舵面方向正确
-
调整巡航空速(平飞油门)
-
调整FBWA模式的感度
|
参数名 |
说明 |
规则/注意事项 |
|---|---|---|
|
|
滚转角速度 PID |
P值太大→滚转震荡;固定翼D值通常比多旋翼小 |
|
|
俯仰角速度 PID |
俯仰控制是固定翼最关键的轴 |
|
|
偏航角速度 PI |
偏航通常不需要D |
|
|
最小空速(m/s) |
低于此值会触发失速保护,需根据机翼失速速度设置 |
|
|
巡航空速(m/s) |
平飞巡航的最佳空速,效率最高 |
|
|
最大空速(m/s) |
限制俯冲时的最大空速 |
|
|
巡航油门 |
对应巡航空速的油门值 |
|
|
最大/最小俯仰角(度) |
保护飞机避免失速或过度俯冲 |
9、VTOL垂起参数
是什么:垂直起降固定翼(VTOL)的过渡飞行模式参数。
用来干嘛:
-
控制多旋翼模式与固定翼模式之间的平滑转换
-
配置过渡空速、油门和倾转机构
怎么用:
-
确保多旋翼模式已调好
-
确保固定翼模式已调好
-
在空速充足的情况下测试过渡
-
根据风速大小调整过渡空速(风速过大时增加)
|
参数名 |
说明 |
规则/注意事项 |
|---|---|---|
|
|
过渡开始空速(m/s) |
风速过大时增加此值,避免过渡期失速 |
|
|
过渡完成空速(m/s) |
必须大于 |
|
|
前向过渡目标油门 |
倾转/尾座式VTOL前飞时的油门值 |
|
|
前推电机油门爬升时间(s) |
倾转机构油压延迟,过大→过渡迟缓;过小→冲击 |
|
|
过渡模式切换通道 |
分配一个开关用于手动切换模式 |
10、MAVLink通信参数
是什么:MAVLink通信协议的配置参数,用于与地面站、机载计算机等设备通信。
用来干嘛:
-
配置各串口的MAVLink实例
-
设置通信模式和数据速率
怎么用:
-
将MAVLink实例分配到串口
-
选择模式(Normal/Onboard/OSD等)
-
设置波特率和数据速率
|
参数名 |
说明 |
规则/注意事项 |
|---|---|---|
|
|
第X实例绑定的串口(X=0,1,2) |
每个串口只能绑定一个MAVLink实例 |
|
|
模式 |
Normal=地面站,Onboard=机载计算机,OSD=屏幕显示,ExtVision=视觉系统 |
|
|
最大数据速率(B/s) |
不要超过数传模块的物理带宽 |
|
|
是否转发到其他接口 |
启用后会在各MAVLink实例间转发消息 |
|
|
端口波特率 |
数传电台:57600;4G模块/OSD:115200;机载计算机:921600 |
11、SD卡日志参数
是什么:SD卡日志记录相关的配置参数。
用来干嘛:
-
控制日志记录的开始/停止时机
-
选择记录的数据类型(用于调试分析)
怎么用:
-
调试振动问题 → 开启原始IMU日志 (
SDLOG_PROFILE开启高频和原始数据) -
日常飞行 → 默认配置文件
-
长时间任务 → 降低日志速率
|
参数名 |
说明 |
规则/注意事项 |
|---|---|---|
|
|
0=禁用,1=起飞后自动,2=手动 |
默认1(起飞后自动记录) |
|
|
位掩码 |
bit0=姿态/传感器,bit1=原始IMU高频,bit2=热校准数据,高带宽包含bit3+bit4 |
|
|
时区偏移(小时) |
中国为+8 |
SDLOG_MODE参数
| 模式值 | 含义 | 说明 |
|---|---|---|
| -1 | Logging disabled | 完全禁用日志记录 。 |
| 0 | when armed until disarm | 当解锁时开始,上锁时停止(默认) 。 |
| 1 | from boot until disarm | 从系统启动开始,直到上锁时停止。 |
| 2 | from boot until shutdown | 从系统启动开始,直到关机/断电时停止。 |
| 3 | depending on AUX1 RC channel | 通过遥控器上的 AUX1 通道手动控制日志启停 。 |
| 4 | from 1st armed until shutdown | 从第一次解锁开始,直到关机/断电时停止。 |
12、条件参数
是什么:只有在其依赖的另一个参数被启用时,才会在 QGroundControl 中显示出来的参数。
用来干嘛:
-
简化参数界面:避免用户看到大量不相关或当前不可用的参数,防止误配置
-
逻辑关联配置:确保只有启用了某项功能,其相关参数才可被修改
-
防止错误设置:避免用户配置在当下固件/硬件状态下无效的参数
怎么用:
-
首先在 QGC 参数列表中找到并启用“主开关”参数
-
重启飞控(部分参数需要重启后才能生效)
-
再次进入参数列表,之前隐藏的条件参数就会显示出来
-
按需配置这些条件参数
如何查找条件参数:
-
先通过 PX4 完整参数参考文档查找该参数是否依赖其他参数
-
检查对应的主开关参数是否已启用
-
确认固件版本中是否包含该模块(部分 FMUv2 固件为节省空间会裁剪模块)
|
主开关参数(需先启用) |
描述 |
启用后会显示的条件参数 |
说明 |
|---|---|---|---|
|
|
陀螺仪温度补偿开关 |
|
启用温度补偿后,相关的多项式系数参数才会显示 |
|
|
加速度计温度补偿开关 |
|
同样,启用后才显示加速度计的温补系数 |
|
|
降落伞功能开关 |
|
启用降落伞功能后,相关的动作高度、触发条件等参数才会出现 |
|
|
第1个GPS的串口配置 |
|
只有给某个串口分配了GPS服务,该GPS的波特率和协议参数才会显示 |
四、QGC地面站使用
1、载具设置
下载固件

等待固件下载

固件下载完毕,之后会自动连接

连接成功后,开始进行配置

设置机架


传感器的校准,首先对罗盘进行校准

根据提示旋转无人机

依次完成校准

接下来校准陀螺仪,只需水平静止放置

然后是加速度计校准,不需要旋转,根据提示放置

依次完成校准

最后是地平线校准,只需水平静止放置

遥控器校准

点击下一步之后,根据右边的图示,拨动遥控器的摇杆

完成校准

设置飞行模式

设置执行器参数

接着点击工具按钮,进行重启飞行器,之后会出现执行器的选项,开始配置

电池校准

连接电池,等待几秒后校准完成

测试电机

2、分析工具
点击刷新查看日志

选择需要下载的日志文件,点击下载按钮进行下载路径选择,开始文件下载

日志的擦除

Mavlink控制台,进行软件调试

参考PX4官方文档的命令:模块参考:命令(Command) | PX4 Guide (main)
查看所有可执行的命令:help
查看传感器状态的命令:

Mavlink数据流显示


3、软件设置
飞行视图的设置

计划视图和单位设置

其它设置

日志和连接设置

GPS和NTRIP设置

网络RTK的账号和密码输入到地面站中,地面站通过网络的差分数据传输到无人机上,这样使用RTK就不需要再架设基站了,直接使用的是地面站。

测试用的是中国移动的cors账号,推荐用这个,淘宝1.99一天的那个
【cors账号配置方法】
移动CORS设置方式:
1、IP:120.253.239.161
2、端口:8001对应CGCS2000坐标系,8002端口对应WGS84坐标系,记得中央子午线改成当地
3、源节点:
RTCM33_GRCEJ(五星十六频,推荐五星仪器以上使用)
RTCM33_GRCE(四星十一频,推荐四星仪器以上使用)
RTCM33_GRC(三星八频,推荐三星仪器使用)
RTCM30GR(双星仪器使用)
勾选 Connect to NTRIP server
Host Adress 填 IP
Server Port 填 8002
Username填卡号
Password填密码
Mount point 填 RTCM33_ GRCEJ
最后一个不填
如果使用千寻账号,Host Adress 填 IP
WMServer Port 填 8002
Mount point 填AUTO,其他类似
然后确保手机有网,重启地面站,连上船后等待一段时间看定位状态是否进固定解
设备无法自动连接,开始进行手动配置连接

新建一个连接信号

手动连接通信,设备与地面站建立连接

五、QGC编译环境安装(Ubuntu)
安装QT:Index of /official_releases/online_installers(新版本)
Index of /archive/online_installers(旧版本)
查看Linux版本的架构:uname -m或uname -p
下载好的QT文件可直接拖动到Ubuntu中,右击下载文件选择Properties,添加可读可写的权限

双击下载文件,开始下载QT




选择安装目录,默认就可以

选择部件

等待安装

启动QT

如果启动失败,在终端安装qtcreator:sudo apt install qtcreator
打开QT:qtcreator 查看QT的版本:qmake -v
百度网盘获取QGC的源码:
https://pan.baidu.com/s/1I4zQtv4WmkRcefNWggq3HQ?pwd=5ucb 选择4.2.8原版源码
或者直接克隆源码:
git clone --recursive https://github.com/mavlink/qgroundcontrol.git
解压源码文件

QT打开源码文件的项目后,有一个需要5.15的版本问题

使用 aqtinstall 工具安装
安装 aqtinstall:pip install aqtinstall
安装 Qt 5.15.2 (Linux, gcc_64 版本):
aqt install-qt linux desktop 5.15.2 gcc_64(安装在当前目录)
指定安装到自定义目录,例如 ~/Qt:
aqt install-qt -O ~/Qt linux desktop 5.15.2 gcc_64(安装在指定目录)
确认安装路径

在QT creator中添加QT版本


选择QT5.15.2的安装路径

应用设置

更改当前Kits的QT版本

QT版本选择5.15.2

使用 aqtinstall 安装 Charts 模块
aqt install-qt -O ~/Qt linux desktop 5.15.2 gcc_64 -m qtcharts
QT中编译运行,启动QGC

六、QGC的一键安装
如果想快速进行安装,避免各种依赖包的安装。
终端输入如下的命令:
wget https://github.com/mavlink/qgroundcontrol/releases/download/v4.4.3/QGroundControl.AppImage
sudo apt install libfuse2
chmod +x QGroundControl.AppImage
./QGroundControl.AppImage
也可以在github直接下载:Releases · mavlink/qgroundcontrol

如下问题是没有访问的权限,根据提示输入命令解决问题

sudo usermod -a -G dialout $USER
sudo apt-get remove modemmanager
无人机的仿真
运行QGC:./QGroundControl.AppImage
编译PX4仿真脚本:make px4_sitl_default gazebo


开始模拟飞行

七、无人机滤波参数调试
1、震动原因分析
桨叶问题:桨叶损坏或动平衡不良导致周期性震动。
电机与安装问题:电机桨座不垂直、电机动平衡差或安装松动。
结构问题:机架刚性不足或部件(如螺丝、减震球)松动。
2、降低震动方法
软件滤波
调整低通滤波器或陷波滤波器参数,优先过滤高频噪声。PX4中通过IMU_GYRO_CUTOFF设置低通截止频率,需平衡滤波效果与延迟。
陷波滤波器(如IMU_GYRO_NF0_BW)针对特定频率噪声(如桨叶谐波)。
硬件减震
优化减震球软硬度或增加配重,确保传感器与震动源隔离。
3、调参流程
初步调整
自稳模式下测试默认PID参数,确保基本飞行无超调或振荡。角度率环P/D值不宜过高。
滤波优先
先调整滤波参数(低通/陷波),再精调PID。未滤除的噪声会导致电机过热、续航缩短或随机抽搐。
PID与延时关系
控制延时(如滤波、机身刚性、电机响应)影响PID稳定性。高延时需降低P值,大轴距飞机因电机响应慢需较小PID。
4、关键参数与配置
延时优化
-
使用AUX引脚(禁用
SYS_USE_IO)减少IO延迟。 -
启用Dshot/OneShot降低PWM延迟。
-
高频率陀螺仪(如4kHz,需H7处理器)减少采样延迟。
日志记录
调参前启用高频率日志(SDLOG_PROFILE勾选High rate)便于分析。
5、注意事项
-
滤波过度增加延迟,可能导致控制发散。
-
大轴距飞机因电机响应慢需更低PID增益。
-
传感器噪声未滤除时,调PID效果有限。
6、IMU滤波参数调优与振动抑制方法
FFT:快速傅里叶变换
核心作用:把时域波形(时间–幅值,示波器看到的波浪曲线)→ 转换成频域频谱(频率–幅值,观察的频谱图)
常用的查看频谱图的工具
-
Flight Review:PX4 官方在线日志分析工具。上传
.ulog文件后,在陀螺仪或加速度计分析页面中可以直接看到 FFT 频谱图。这是最方便、也最常用于 PID 调参和滤波调试的方式。 -
MATLAB / Simulink:加载日志后使用
fft()函数绘制频谱图,功能更专业。 -
Python (Jupyter Notebook):使用
scipy.fft和matplotlib库自己绘制频谱图。 -
PX4 工具链中的
pyulog:命令行工具可以导出 CSV,再导入其他软件做 FFT。
陀螺仪噪声处理
观察陀螺仪数据的FFT频谱图,若40Hz后噪声显著,可将IMU_GYRO_CUTOFF设为35。对于角加速度数据,若FFT显示40Hz附近存在噪声高峰,IMU_DGYRO_CUTOFF建议设置为35。

陀螺仪数据频谱图

角加速度数据频谱图
加速度计滤波调整
根据加速度计FFT频谱,若35Hz后振动幅值较大,IMU_ACCEL_CUTOFF可设为30。调参后需检查actuator_control的FFT输出,确保控制噪声处于可接受范围。

加速度数据频谱图
硬件振动抑制
除软件滤波外,硬件措施包括:
-
飞控安装减震装置
-
确保所有部件牢固固定
-
使用高强度、小轴距机架
-
选择高KV值电机(高频振动更易滤除)
陷波滤波器应用
若FFT在特定低频处出现尖峰,可通过陷波滤波器精准滤除。例如:
-
第一陷波:中心频率
IMU_GYRO_NF0_FRQ=20,带宽IMU_GYRO_NF0_BW=10 -
第二陷波:中心频率
IMU_GYRO_NF0_FRQ=26.5,带宽IMU_GYRO_NF0_BW=2
调参后需验证效果,必要时优先检查机械结构是否松动。

陷波滤波前频谱图

陷波滤波后频谱图
| 编号 | 对应轴 | 中文名称 | 控制意义 |
|---|---|---|---|
| 00 | X轴 | 滚转轴(Roll) | 左右倾斜 |
| 01 | Y轴 | 俯仰轴(Pitch) | 前后倾斜 |
| 02 | Z轴 | 偏航轴(Yaw) | 左右转向 |
穿越机参数参考
典型穿越机配置:
-
IMU_GYRO_CUTOFF=120 -
IMU_DGYRO_CUTOFF=50~80(根据机架尺寸调整)
八、无人机PID参数调试
自动调参流程
使用QGC地面站进行自动调参需切换至Hold模式,通过Autotune功能完成角速率环PID调整。调整过程中飞机会自动执行动作,完成后地面站提示“Autotune successful”即表示成功。角度环调参与此类似。
手动调参顺序
角速率环→姿态环→速度环→位置环。角速率环优先调整,姿态环仅含比例项,默认参数通常适用。
角速率环PID调参方法

一个经典的 PID 负反馈控制系统,核心目标是让实际输出 y 跟随设定值 r 变化,消除误差 e。
1、信号流向拆解
-
误差计算:
e = r - y,把设定值和实际输出做差,得到当前的误差。 -
PID 控制器处理误差:
-
误差
e先经过比例系数K放大,再分成三路:-
比例(P)支路:直接按放大后的误差大小输出控制量,快速响应误差,但无法消除稳态误差。
-
积分(I)支路:对放大后的误差做积分运算,只要误差不为零,积分项就会一直累积,直到误差被消除,解决 “稳态误差” 问题。
-
微分(D)支路:直接对输出
y做微分(即取变化率),再乘以-K后取反。本质是提前预判误差的变化趋势,提前施加控制,抑制系统超调,加快动态响应。
-
-
-
控制量合成:把 P、I、D 三个支路的输出相加,得到最终控制量
u。 -
被控对象执行:控制量
u输入到被控对象G(s),改变系统状态,得到实际输出y。 -
负反馈闭环:输出
y反馈回输入端,和设定值r再次比较,形成闭环控制。
2、三个环节的核心作用
-
P(比例):快速拉回误差,误差越大,控制力度越强。但只有 P 控制时,系统会存在稳态误差,无法让输出完全等于设定值。
-
I(积分):消除稳态误差。只要误差存在,积分项就会不断累积,直到误差为零,输出才会稳定。但积分过强会导致系统超调、震荡。
-
D(微分):抑制超调,稳定系统。它对误差的变化率敏感,当误差快速变化时,微分项会提前 “刹车”,防止系统冲过头。但微分容易放大噪声,需要合理设置参数。
并行形式与标准形式
-
并行形式:以K作为全局常数参数,比例、积分、微分三类控制增益相互耦合关联,参数联动变化,结构原生绑定,适合固定机型场景。

-
标准形式:以P为基准定值,比例、积分、微分增益完全解耦独立调节,各参数互不干扰,调试逻辑清晰,可快速通过增益标定适配不同机型,通用性更强。

P项调节
初始设置:I、D置0,K=1。逐步增加P增益(每次20%-30%,后期5%-10%)。
-
P过高:高频振荡(10Hz)。
-
P过低:响应迟缓,相位滞后。

P过高频谱图

P过低频谱图

P适中频谱图
I项调节
P调稳后调整I。
-
I过高:低频振荡。
-
I过低:静差显著。

I过高频谱图

I过低频谱图

I适中频谱图
D项调节
抑制超调,避免过大(导致电机发热、抽搐)。
-
D过小:阶跃输入后超调振荡。
-
适度D值:快速稳定无振荡。

D过大频谱图
姿态环调参
仅调节比例项P,P过小则响应迟钝,过大易振荡,一般使用默认值。
调参模式建议
新手推荐自稳模式,熟练后可切换至特技模式观察效果。调参后需验证电机响应平稳性及飞行稳定性。对称机型roll/pitch参数可相同,yaw的D项通常为0。
openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构
更多推荐

所有评论(0)