You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

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:解锁、飞行状态、健康检查、模式切换和 failsafe
  • dshot: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 航点、任务和返航导航
  • logger ULog 日志记录
  • uavcan DroneCAN 设备

最后执行:

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 卡
  • 无桨执行器测试全部通过
  • 首飞场地、隔离距离和接管方案已确定

只有这些项目通过后,才能进入低风险的首次悬停测试。