11 KiB
PX4 rcS 启动流程与实机准备
本文结合当前使用的 CUAV 7-Nano、PX4 v1.17.0 和尾座式 VTOL,说明 rcS 启动脚本的作用,并区分“飞控硬件已经适配”和“整机已经具备试飞条件”。
1. 先明确一个结论
CUAV 7-Nano 的板级设计和 PX4 板级代码已经绑定了飞控自身的基础硬件,包括:
- MCU 引脚和时钟
- SPI、I2C、CAN 和串口总线
- 板载 IMU、磁罗盘和气压计
- GPS、遥测、CAN、USB 等接口
- PWM、DShot 和安全按钮驱动
- 电池电压、电流采样接口
- 蜂鸣器和状态灯
因此,不需要从零编写飞控板卡驱动。但是,这只表示“飞控板能够运行 PX4 并访问这些接口”,不表示任意飞机装上电机、电池和 GPS 后就可以直接飞行。
实机是否具备飞行条件,还取决于:
- 机型是否正确
- 飞控安装方向是否正确
- 电机数量、位置和推力方向是否正确
- 电机编号和旋转方向是否正确
- 舵面类型、方向和行程是否正确
- 控制分配是否与真实机构一致
- 重心和结构强度是否符合设计
- 电源模块、电池和电调参数是否正确
- 传感器、遥控器和空速计是否正确校准
- failsafe 和返航行为是否经过验证
- 多旋翼、固定翼和 VTOL 过渡参数是否适合实际飞机
对于尾座式 VTOL,尤其不能跳过电机、舵面和过渡验证。
2. rcS 是什么
主启动脚本位于:
simulation_ws/deps/PX4-Autopilot/ROMFS/px4fmu_common/init.d/rcS
rcS 是 PX4 在 NuttX 启动后执行的总启动脚本。它本身不执行姿态控制或导航计算,而是按顺序完成系统初始化,并启动各个 PX4 模块。
整体流程:
飞控上电
-> 打印版本与硬件信息
-> 挂载 SD 卡
-> 加载参数
-> 加载板级默认配置
-> 根据 SYS_AUTOSTART 加载机型
-> 启动板载和外部传感器
-> 启动 EKF2
-> 启动遥控、Commander 和执行器输出
-> 启动对应机型的控制器
-> 启动串口、USB、MAVLink 和导航
-> 启动日志和 DroneCAN
-> 通知系统启动完成
3. 初始化启动变量
脚本首先设置路径和状态变量,例如:
set R /
set VEHICLE_TYPE none
set STORAGE_AVAILABLE no
set STARTUP_TUNE 1
其中:
R是 ROMFS 根路径VEHICLE_TYPE保存最终加载的飞行器类别STORAGE_AVAILABLE表示存储设备是否可用STARTUP_TUNE决定启动提示音
脚本使用:
set +e
这表示单个命令失败时不会立即终止整个启动流程。因此,某个备用传感器探测失败后,PX4 仍可能继续启动。
4. 打印固件和硬件信息
启动时执行:
ver all
它会输出:
- PX4 版本
- Git commit
- 硬件架构
- NuttX 版本
- 编译时间和工具链
当前固件应报告:
PX4 version: v1.17.0
HW arch: CUAV_7_NANO
5. 挂载和检查 SD 卡
rcS 尝试把 SD 卡挂载到:
/fs/microsd
SD 卡主要用于:
- ULog 飞行日志
- 参数备份
- HardFault 崩溃日志
- 自定义启动脚本
- 外部 airframe 脚本
如果 SD 卡中存在 .format 文件,启动脚本会请求格式化 SD 卡。不要随意创建该文件。
6. 加载和恢复参数
脚本选择参数文件并执行:
param select $PARAM_FILE
param import
如果主参数文件损坏,它会尝试从以下文件恢复:
/fs/microsd/parameters_backup.bson
这意味着刷写新固件后,旧参数有可能从内部存储或 SD 卡备份中恢复。更换固件版本或机型时,应检查参数是否仍然适用。
7. 加载 CUAV 7-Nano 板级默认值
rcS 会执行:
boards/cuav/7-nano/init/rc.board_defaults
当前板级默认配置主要完成:
- 设置以太网 MAVLink 默认参数
- 设置电池电压和电流换算默认值
- 设置 USB MAVLink 模式
- 启动安全按钮
板级脚本多数使用:
param set-default
它只设置参数默认值,不会覆盖已经保存的用户值。param set 才会直接修改当前参数。
8. 根据 SYS_AUTOSTART 加载机型
rcS 调用自动生成的:
/etc/init.d/rc.autostart
该脚本根据 SYS_AUTOSTART 查找机型文件。
当前通用尾座式 VTOL 应使用:
SYS_AUTOSTART=13200
对应文件:
ROMFS/px4fmu_common/init.d/airframes/13200_generic_vtol_tailsitter
它先调用 rc.vtol_defaults,将:
VEHICLE_TYPE=vtol
然后设置通用尾座式默认参数,例如:
CA_AIRFRAME=4
CA_ROTOR_COUNT=2
CA_SV_CS_COUNT=2
VT_TYPE=0
VT_B_TRANS_DUR=5
这套通用机型默认是两电机、两舵面。如果真实飞机不是这种结构,必须重新配置控制分配。
SYS_AUTOSTART=1002 是 HIL Standard VTOL QuadPlane,只用于硬件在环仿真,不适用于实机。
如果找不到机型,rcS 会把 SYS_AUTOSTART 重置为 0,并报告:
No airframe file found
No autostart ID found
9. 启动 7-Nano 板载传感器
rcS 执行:
boards/cuav/7-nano/init/rc.board_sensors
该脚本尝试启动:
- IIM42652 IMU
- BMI088 IMU
- IIM42653 备用 IMU
- IST8310 或 IIS2MDC 磁罗盘
- BMP581 气压计
- ICP201xx 气压计
- GPS1/I2C1 接口上的外部磁罗盘
- 板载 ADC 或 ADS1115
部分设备采用“先尝试型号 A,失败后尝试型号 B”的兼容逻辑。因此,启动日志中单个 no device on bus 不一定意味着飞控损坏,需要结合后续是否成功启动备用设备判断。
随后通用传感器脚本还会启动:
battery_status
sensors
10. 启动状态估计器
默认使用:
ekf2 start
EKF2 融合:
- 加速度计和陀螺仪
- GPS/GNSS
- 磁罗盘
- 气压计
- 空速计
- 可选的测距、光流和外部视觉数据
并输出姿态、位置和速度估计,供控制器使用。
11. 启动遥控、Commander 和输出驱动
遥控相关模块:
rc_update start
manual_control start
rc_input start
随后启动:
commander start
dshot start
pwm_out start
作用分别是:
commander:解锁、飞行状态、健康检查、模式切换和 failsafedshot:DShot 电调输出pwm_out:PWM 电机和舵机输出
驱动存在只代表飞控能够输出信号,不代表输出通道和真实执行器已经正确对应。
12. 启动 VTOL 控制链
机型脚本将 VEHICLE_TYPE 设为 vtol 后,rc.vehicle_setup 会执行:
rc.vtol_apps
它同时启动多旋翼、固定翼和 VTOL 模块:
control_allocator
airspeed_selector
vtol_att_control
mc_rate_control
mc_att_control
mc_pos_control
flight_mode_manager
mc_hover_thrust_estimator
fw_rate_control
fw_att_control
fw_mode_manager
fw_lat_lon_control
land_detector
其中:
mc_*负责垂直起降和悬停fw_*负责固定翼前飞vtol_att_control管理飞行形态和过渡control_allocator将期望力和力矩分配给电机与舵面airspeed_selector管理空速来源和有效性
13. 启动通信、导航、日志和 CAN
后续启动内容包括:
- 串口设备和 GPS
- USB CDC/ACM
- MAVLink
navigator航点、任务和返航导航loggerULog 日志记录uavcanDroneCAN 设备
最后执行:
mavlink boot_complete
通知 QGroundControl 系统已完成启动。
14. 当前尾座式 VTOL 的完整启动链
rcS
-> rc.filepaths
-> 参数导入和备份恢复
-> rc.board_arch_defaults
-> rc.board_defaults
-> rc.autostart
-> 13200_generic_vtol_tailsitter
-> rc.vtol_defaults
-> rc.board_sensors
-> rc.sensors
-> EKF2
-> rc_update / manual_control
-> Commander
-> DShot / PWM
-> rc.vehicle_setup
-> rc.vtol_apps
-> rc.serial / MAVLink
-> Navigator
-> Logger
-> DroneCAN
-> mavlink boot_complete
15. 从组装到首飞的正确流程
即使使用成熟飞控和现成整机设计,也建议按以下阶段验证。
阶段一:资料确认
- 确认飞控、载板和飞机结构的准确型号及版本
- 获取厂家接线图、参数文件和固件要求
- 确认机型 ID 和控制分配配置
- 确认电机、舵机、GPS、空速计和电源模块型号
阶段二:无桨上电
- 拆下所有螺旋桨
- 检查电源电压、电流量程和供电能力
- 确认 QGC 正确识别 PX4 v1.17.0 和 CUAV 7-Nano
- 确认
SYS_AUTOSTART=13200或厂家指定机型 - 检查启动日志是否存在关键错误
阶段三:校准
- 加速度计校准
- 陀螺仪检查
- 磁罗盘校准
- 水平校准
- 遥控器校准
- 电源模块校准
- 空速计校准
阶段四:传感器方向检查
- 手动滚转飞机,确认 QGC 姿态同向变化
- 手动俯仰飞机,确认 QGC 姿态同向变化
- 转动机头,确认航向变化正确
- 检查 GPS 定位、卫星数和高度
- 检查静止时空速接近零
阶段五:无桨执行器检查
- 确认每个输出通道连接正确
- 确认每个电机编号正确
- 确认电机旋转方向正确
- 确认每个舵面方向正确
- 确认舵面中立位和最大行程合理
- 确认多旋翼和固定翼模式下的执行器行为
- 确认安全按钮、急停和失控保护
阶段六:动力与结构检查
- 检查螺旋桨型号和安装方向
- 检查电机、电调和电池电流余量
- 检查机架紧固、结构强度和振动
- 检查重心位置
- 检查尾座式起降支撑和地面稳定性
阶段七:分阶段飞行验证
低功率动力测试
-> 受控短时悬停
-> 多旋翼模式稳定性验证
-> 高度和位置模式验证
-> 固定翼参数地面复核
-> 足够高度下的前向过渡
-> 固定翼飞行验证
-> 反向过渡和垂直降落验证
第一次悬停成功不代表可以立即测试 VTOL 过渡。过渡涉及两套控制器、空速、舵面和姿态状态机,风险明显更高。
16. 首飞前最低检查清单
- 固件目标与 CUAV 7-Nano 匹配
- PX4 版本和 Git hash 正确
- 实机 airframe 正确,未选择 HIL 机型
- 飞控安装方向正确
- 所有必要传感器已校准
- GPS 和磁罗盘方向正确
- 空速计数据正常且管路未接反
- 电池电压和电流读数合理
- 遥控器通道和模式开关正确
- RC 丢失和数传丢失 failsafe 已验证
- 电机编号、旋向和推力方向正确
- 舵面通道、方向、中立位和行程正确
- 控制分配与真实机构一致
- 急停、上锁和安全按钮有效
- ULog 能正常写入 SD 卡
- 无桨执行器测试全部通过
- 首飞场地、隔离距离和接管方案已确定
只有这些项目通过后,才能进入低风险的首次悬停测试。