PX4机型目录
PX4 的机型配置是其飞控系统的核心之一,它通过一系列配置文件定义了各类飞行器(如多旋翼、固定翼、车辆、船只等)的参数、混控器设置和控制逻辑。下面我将为你详细解析 PX4 的机型目录结构、文件内容,并提供丰富的中文注释。
📁 一、机型目录位置与结构
PX4 的机型配置文件主要存放在固件源码的以下路径中: PX4-Autopilot/ROMFS/px4fmu_common/init.d/airframes
• 中文注释:
◦ ROMFS:这是一个只读文件系统,这些配置文件在编译时会被打包进最终的固件映像中,确保运行时不会被修改。
◦ px4fmu_common:这表示这些配置是针对常见的 Pixhawk 系列飞控硬件(如 FMU 版本)的通用设置。
◦ init.d:此目录包含了 PX4 系统的启动脚本。在飞控板上电后,这些脚本会按顺序执行,初始化系统。
◦ airframes:这就是 存放所有机型定义文件的核心目录。每一个文件通常对应一种特定构型或类型的飞行器。
🔢 二、机型文件命名与 ID
机型配置文件的命名遵循 [数字ID]_[描述性名称] 的格式(例如 4001_quad_x, 2100_standard_plane)。 • 中文注释:
◦ 数字 ID:这个数字至关重要,它唯一地对应飞控参数 SYS_AUTOSTART 的值。通过在地面站(如 QGroundControl)中设置 SYS_AUTOSTART 参数为特定的 ID 值,就可以选择并使用对应的机型配置。
◦ 描述性名称:这通常是一个人类可读的名称,简要描述了机型的类别和构型,例如 quad_x 代表 X 型四旋翼,standard_plane 代表标准固定翼。这主要用于开发者和管理,不影响飞控逻辑。
为了更清晰地了解不同ID范围对应的机型类别,可以参考下表:
ID 范围 机型类别 示例机型 示例 ID
[1000, 1999] 仿真设置 (HIL/STIL) HIL 标准固定翼 1004
[2000, 2999] 标准固定翼 标准飞机 2100
[3000, 3999] 飞翼 通用飞翼 3000
[4000, 4999] X型四旋翼 通用 X 四旋翼 4001
[5000, 5999] +型四旋翼 通用 + 四旋翼 5001
[6000, 6999] X型六旋翼 通用 X 六旋翼 6001
[7000, 7999] +型六旋翼 通用 + 六旋翼 7001
[8000, 8999] X型八旋翼 通用 X 八旋翼 8001
[9000, 9999] +型八旋翼 通用 + 八旋翼 9001
[10000, 10999] 宽型/H型四旋翼 TBS Discovery 10015
[12000, 12999] 共轴八旋翼 通用共轴八旋翼 12001
[13000, 13999] VTOL(垂直起降) 通用标准 VTOL 13000
[14000, 14999] 三旋翼 Y+ 三旋翼 14001
... ... (还有其他范围)
• 中文注释:此表基于 PX4 源码中的 CMakeLists.txt 文件进行归纳。自定义机型通常建议使用较大的 ID 号(如 8xxxx, 9xxxx),以避免与官方预留的 ID 冲突。
🏷️ 三、机型元数据标签
在机型文件中,使用特定格式的注释标签来定义机型的元数据,这些信息通常用于地面站(如 QGroundControl)的显示和选择:
- !/bin/sh
- @name Generic Quadcopter # 机型名称:通用四旋翼
- @type Quadrotor x # 机型类型:X 型四旋翼
- @class Copter # 机型大类:多旋翼
- @maintainer Lorenz Meier <lorenz@px4.io> # 维护者信息
- @url https://www.baidu.com # 相关网址(可选)
- @output MAIN0 Speed of left wheels # 输出通道功能描述:MAIN0 通道控制左轮速度
- @output MAIN1 Speed of right wheels # 输出通道功能描述:MAIN1 通道控制右轮速度
- @board px4_fmu-v2 exclude # 板卡排除:此配置不适用于 px4_fmu-v2 板卡
- @board bitcraze_crazyflie exclude # 板卡排除:此配置不适用于 bitcraze_crazyflie 板卡
• 中文注释:
◦ @name:机型的名称,会显示在地面站的机型选择列表中。
◦ @type:机型的子类型或详细描述,如 "Quadrotor x",也会影响地面站的显示。
◦ @class:机型的大类,如多旋翼(Copter)、固定翼(Plane)、无人车(Rover)等。这决定了飞控将使用哪一套核心控制算法(例如多旋翼的姿态控制器、固定翼的定点控制器等)。
◦ @maintainer:维护者信息,说明该机型文件的主要维护者及其联系方式。
◦ @output:指定输出通道的功能映射(例如,MAIN1 aileron 表示 MAIN1 通道控制副翼)。这主要用于在地面站中清晰地向用户展示每个输出通道的用途。
◦ @board ... exclude:板卡排除列表。指定此机型配置不适用于哪些特定的飞控板卡。
⚙️ 四、配置内容解析
机型文件本身是一个 Shell 脚本,其中主要进行参数设置和引用通用配置。 • 引用通用配置:使用 . ${R}etc/init.d/rc.[class]_defaults 来引用对应大类(如多旋翼 mc、固定翼 fw)的默认配置脚本,这是一种常见的代码复用方式,可以避免在每个机型文件中重复定义相同的参数。
. ${R}etc/init.d/rc.mc_defaults # 引用多旋翼(Multicopter)的默认配置脚本 . ${R}etc/init.d/rc.rover_defaults # 引用无人车(Rover)的默认配置脚本
• 设置参数默认值:使用 param set-default 命令为参数设置默认值。如果用户后来没有修改过该参数,则飞控将使用这里定义的默认值。
param set-default CA_ROTOR_COUNT 4 # 设置旋翼/电机数量的默认值为 4 param set-default CA_ROTOR0_PX 0.15 # 设置 0 号电机在机体坐标系中的 X 轴安装位置(米) param set-default CA_ROTOR0_PY 0.15 # 设置 0 号电机在机体坐标系中的 Y 轴安装位置(米) param set-default BAT1_N_CELLS 4 # 设置电池 1 的电池片数(单位:S) param set-default EKF2_GBIAS_INIT 0.01 # 设置扩展卡尔曼滤波器(EKF2)陀螺仪偏置初始值 param set-default GND_SPEED_P 0.25 # 设置地面车辆速度控制器的比例(P)增益
• 设置混控器 (Mixer):使用 set MIXER [混控器类型] 来指定混控器文件。混控器决定了飞控的核心输出指令(如滚转、俯仰、偏航、油门)如何映射到具体的电机、舵机或其他执行器的输出通道上。
set MIXER quad_x # 使用名为 'quad_x' 的混控器(适用于 X 型四旋翼) set MIXER generic_diff_rover # 使用名为 'generic_diff_rover' 的混控器(适用于差速转向的地面车辆) ◦ 中文注释:混控器文件(例如 .mix 文件)通常存放在 ROMFS/px4fmu_common/mixers 目录下,它们定义了具体的输出映射关系。
📋 五、添加新机型步骤
若要添加一个新的机型,通常需要以下步骤: 1. 创建机型文件:在 airframes 目录下,新建一个文件,文件名以未使用的数字 ID 开头(例如 80003_my_custom_robot)。 2. 编写配置内容:参考现有类似机型的文件,使用 Shell 语法编写配置。务必在文件开头的注释中定义 @name, @type, @class 等信息。 3. 注册机型:修改 airframes 目录下的 CMakeLists.txt 文件,将你的新机型文件名添加到合适的 ID 范围区域内,否则编译系统不会包含它。
# 在 CMakeLists.txt 中找到合适的位置添加,例如: # [80000, 81000] (Unmanned) TEST 80003_my_custom_robot
4. (可选)修改 srcparser.py:如果你的新机型使用了全新的 @type 或 @class,可能需要在 Tools/px4airframes/srcparser.py 文件中添加相应的映射逻辑,以确保元数据生成正确。修改时务必注意 Python 的缩进规则,否则会导致编译错误。 5. 生成元数据:在 PX4 源码根目录下执行 make airframe_metadata 命令。这会解析所有机型文件并生成一个 airframes.xml 文件,其中包含所有机型的元数据信息。 6. 编译固件:使用 make [你的飞控目标](例如 make px4_fmu-v6_default)编译固件。 7. 在地面站中显示(可选):如果你希望自定义机型能在地面站(如 QGroundControl)的机型选择列表中显示,需要将生成的 airframes.xml 文件提供给地面站项目并重新编译地面站。
🧪 六、示例:MediaWiki 格式的机型配置
这是一个简单的多旋翼机型配置示例,以 MediaWiki 代码块形式展示其基本结构: 模板:Aircraft
- !/bin/sh
- @name Generic Quadcopter
- @type Quadrotor X
- @class Copter
- @maintainer Lorenz Meier <lorenz@px4.io>
- 引用多旋翼默认参数配置
. ${R}etc/init.d/rc.mc_defaults
- 设置电机数量和位置参数
param set-default CA_ROTOR_COUNT 4 param set-default CA_ROTOR0_PX 0.15 param set-default CA_ROTOR0_PY 0.15 param set-default CA_ROTOR1_PX -0.15 param set-default CA_ROTOR1_PY 0.15 param set-default CA_ROTOR2_PX 0.15 param set-default CA_ROTOR2_PY -0.15 param set-default CA_ROTOR2_KM -0.05 param set-default CA_ROTOR3_PX -0.15 param set-default CA_ROTOR3_PY -0.15 param set-default CA_ROTOR3_KM -0.05
- 设置混控器
set MIXER quad_x set PWM_OUT 1234
希望以上对 PX4 机型目录的详细解析和中文注释能帮助你更好地理解和进行机型配置。如果你在实践中遇到更具体的问题,欢迎随时提出。