# 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 是什么 主启动脚本位于: ```text simulation_ws/deps/PX4-Autopilot/ROMFS/px4fmu_common/init.d/rcS ``` `rcS` 是 PX4 在 NuttX 启动后执行的总启动脚本。它本身不执行姿态控制或导航计算,而是按顺序完成系统初始化,并启动各个 PX4 模块。 整体流程: ```text 飞控上电 -> 打印版本与硬件信息 -> 挂载 SD 卡 -> 加载参数 -> 加载板级默认配置 -> 根据 SYS_AUTOSTART 加载机型 -> 启动板载和外部传感器 -> 启动 EKF2 -> 启动遥控、Commander 和执行器输出 -> 启动对应机型的控制器 -> 启动串口、USB、MAVLink 和导航 -> 启动日志和 DroneCAN -> 通知系统启动完成 ``` ## 3. 初始化启动变量 脚本首先设置路径和状态变量,例如: ```sh set R / set VEHICLE_TYPE none set STORAGE_AVAILABLE no set STARTUP_TUNE 1 ``` 其中: - `R` 是 ROMFS 根路径 - `VEHICLE_TYPE` 保存最终加载的飞行器类别 - `STORAGE_AVAILABLE` 表示存储设备是否可用 - `STARTUP_TUNE` 决定启动提示音 脚本使用: ```sh set +e ``` 这表示单个命令失败时不会立即终止整个启动流程。因此,某个备用传感器探测失败后,PX4 仍可能继续启动。 ## 4. 打印固件和硬件信息 启动时执行: ```sh ver all ``` 它会输出: - PX4 版本 - Git commit - 硬件架构 - NuttX 版本 - 编译时间和工具链 当前固件应报告: ```text PX4 version: v1.17.0 HW arch: CUAV_7_NANO ``` ## 5. 挂载和检查 SD 卡 `rcS` 尝试把 SD 卡挂载到: ```text /fs/microsd ``` SD 卡主要用于: - ULog 飞行日志 - 参数备份 - HardFault 崩溃日志 - 自定义启动脚本 - 外部 airframe 脚本 如果 SD 卡中存在 `.format` 文件,启动脚本会请求格式化 SD 卡。不要随意创建该文件。 ## 6. 加载和恢复参数 脚本选择参数文件并执行: ```sh param select $PARAM_FILE param import ``` 如果主参数文件损坏,它会尝试从以下文件恢复: ```text /fs/microsd/parameters_backup.bson ``` 这意味着刷写新固件后,旧参数有可能从内部存储或 SD 卡备份中恢复。更换固件版本或机型时,应检查参数是否仍然适用。 ## 7. 加载 CUAV 7-Nano 板级默认值 `rcS` 会执行: ```text boards/cuav/7-nano/init/rc.board_defaults ``` 当前板级默认配置主要完成: - 设置以太网 MAVLink 默认参数 - 设置电池电压和电流换算默认值 - 设置 USB MAVLink 模式 - 启动安全按钮 板级脚本多数使用: ```sh param set-default ``` 它只设置参数默认值,不会覆盖已经保存的用户值。`param set` 才会直接修改当前参数。 ## 8. 根据 SYS_AUTOSTART 加载机型 `rcS` 调用自动生成的: ```text /etc/init.d/rc.autostart ``` 该脚本根据 `SYS_AUTOSTART` 查找机型文件。 当前通用尾座式 VTOL 应使用: ```text SYS_AUTOSTART=13200 ``` 对应文件: ```text ROMFS/px4fmu_common/init.d/airframes/13200_generic_vtol_tailsitter ``` 它先调用 `rc.vtol_defaults`,将: ```sh VEHICLE_TYPE=vtol ``` 然后设置通用尾座式默认参数,例如: ```text 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`,并报告: ```text No airframe file found No autostart ID found ``` ## 9. 启动 7-Nano 板载传感器 `rcS` 执行: ```text 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` 不一定意味着飞控损坏,需要结合后续是否成功启动备用设备判断。 随后通用传感器脚本还会启动: ```text battery_status sensors ``` ## 10. 启动状态估计器 默认使用: ```sh ekf2 start ``` EKF2 融合: - 加速度计和陀螺仪 - GPS/GNSS - 磁罗盘 - 气压计 - 空速计 - 可选的测距、光流和外部视觉数据 并输出姿态、位置和速度估计,供控制器使用。 ## 11. 启动遥控、Commander 和输出驱动 遥控相关模块: ```sh rc_update start manual_control start rc_input start ``` 随后启动: ```sh commander start dshot start pwm_out start ``` 作用分别是: - `commander`:解锁、飞行状态、健康检查、模式切换和 failsafe - `dshot`:DShot 电调输出 - `pwm_out`:PWM 电机和舵机输出 驱动存在只代表飞控能够输出信号,不代表输出通道和真实执行器已经正确对应。 ## 12. 启动 VTOL 控制链 机型脚本将 `VEHICLE_TYPE` 设为 `vtol` 后,`rc.vehicle_setup` 会执行: ```text rc.vtol_apps ``` 它同时启动多旋翼、固定翼和 VTOL 模块: ```text 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 设备 最后执行: ```sh mavlink boot_complete ``` 通知 QGroundControl 系统已完成启动。 ## 14. 当前尾座式 VTOL 的完整启动链 ```text 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 定位、卫星数和高度 - 检查静止时空速接近零 ### 阶段五:无桨执行器检查 - 确认每个输出通道连接正确 - 确认每个电机编号正确 - 确认电机旋转方向正确 - 确认每个舵面方向正确 - 确认舵面中立位和最大行程合理 - 确认多旋翼和固定翼模式下的执行器行为 - 确认安全按钮、急停和失控保护 ### 阶段六:动力与结构检查 - 检查螺旋桨型号和安装方向 - 检查电机、电调和电池电流余量 - 检查机架紧固、结构强度和振动 - 检查重心位置 - 检查尾座式起降支撑和地面稳定性 ### 阶段七:分阶段飞行验证 ```text 低功率动力测试 -> 受控短时悬停 -> 多旋翼模式稳定性验证 -> 高度和位置模式验证 -> 固定翼参数地面复核 -> 足够高度下的前向过渡 -> 固定翼飞行验证 -> 反向过渡和垂直降落验证 ``` 第一次悬停成功不代表可以立即测试 VTOL 过渡。过渡涉及两套控制器、空速、舵面和姿态状态机,风险明显更高。 ## 16. 首飞前最低检查清单 - [ ] 固件目标与 CUAV 7-Nano 匹配 - [ ] PX4 版本和 Git hash 正确 - [ ] 实机 airframe 正确,未选择 HIL 机型 - [ ] 飞控安装方向正确 - [ ] 所有必要传感器已校准 - [ ] GPS 和磁罗盘方向正确 - [ ] 空速计数据正常且管路未接反 - [ ] 电池电压和电流读数合理 - [ ] 遥控器通道和模式开关正确 - [ ] RC 丢失和数传丢失 failsafe 已验证 - [ ] 电机编号、旋向和推力方向正确 - [ ] 舵面通道、方向、中立位和行程正确 - [ ] 控制分配与真实机构一致 - [ ] 急停、上锁和安全按钮有效 - [ ] ULog 能正常写入 SD 卡 - [ ] 无桨执行器测试全部通过 - [ ] 首飞场地、隔离距离和接管方案已确定 只有这些项目通过后,才能进入低风险的首次悬停测试。