# PX4 四电机编号与当前尾座式配置 ## 1. 电机编号不是简单的接口编号 PX4中的 `Motor 1`、`Motor 2` 等是控制分配器使用的逻辑电机编号,不天然等于飞控外壳上的 `MAIN OUT 1`、`MAIN OUT 2`。 完整关系是: ```text 机体几何参数 │ ▼ 逻辑电机 Motor 1、Motor 2…… │ ▼ 输出功能参数映射 │ ▼ 飞控物理 PWM/DShot 输出口 │ ▼ 电调和实际电机 ``` 因此需要分别确认: 1. 逻辑电机在机体上的位置和旋向是否正确。 2. 每个逻辑电机映射到了哪个物理输出口。 3. 对应输出口实际连接的是哪一个电调和电机。 --- ## 2. PX4机体坐标系 PX4使用机体坐标系描述电机位置: ```text X轴:机头前方为正 Y轴:机体右方为正 Z轴:机体下方为正 ``` 从飞机上方看: ```text +X 机头方向 ↑ │ 机体左侧 │ 机体右侧 -Y │ +Y │ ``` 参数含义: | 参数 | 含义 | |---|---| | `CA_ROTORn_PX` | 第n个旋翼相对重心在X轴的位置 | | `CA_ROTORn_PY` | 第n个旋翼相对重心在Y轴的位置 | | `CA_ROTORn_PZ` | 第n个旋翼相对重心在Z轴的位置 | | `CA_ROTORn_AX` | 推力轴在X轴的方向分量 | | `CA_ROTORn_AY` | 推力轴在Y轴的方向分量 | | `CA_ROTORn_AZ` | 推力轴在Z轴的方向分量 | | `CA_ROTORn_KM` | 旋翼反扭矩系数和旋向 | 对于尾座式飞机,这些位置仍然按照正常固定翼前飞时的机体坐标定义: - 机头方向始终是 `+X`。 - 右机翼方向始终是 `+Y`。 - 不能按照飞机竖直停放时看到的“上、下、左、右”直接填写电机坐标。 --- ## 3. 常见四旋翼X架构的电机编号 对于常见四旋翼 X 架构,从飞机上方观察,机头朝前: ```text 机头 +X ↑ Motor 3 Motor 1 前左 CW 前右 CCW \ / \ / \ / 机体 / \ / \ / \ Motor 2 Motor 4 后左 CCW 后右 CW ``` 对应关系: | PX4逻辑电机 | 位置 | 从上方观察的旋向 | |---|---|---| | Motor 1 | 前右 | CCW,逆时针 | | Motor 2 | 后左 | CCW,逆时针 | | Motor 3 | 前左 | CW,顺时针 | | Motor 4 | 后右 | CW,顺时针 | 这是PX4常见四旋翼X几何的逻辑定义。实际机体仍应以当前控制分配参数和QGroundControl的执行器页面为准。 --- ## 4. QGC编号与内部参数编号 QGroundControl和用户界面从 `Motor 1` 开始编号;PX4内部旋翼几何参数从 `ROTOR0` 开始编号: | QGC/用户看到的编号 | PX4内部参数前缀 | |---|---| | Motor 1 | `CA_ROTOR0_*` | | Motor 2 | `CA_ROTOR1_*` | | Motor 3 | `CA_ROTOR2_*` | | Motor 4 | `CA_ROTOR3_*` | 这是一个容易混淆的地方。例如 `CA_ROTOR0_PX` 描述的是 Motor 1,而不是“Motor 0”。 --- ## 5. 四旋翼X架构的位置参数示例 标准化位置可以写成: ```text CA_ROTOR0_PX = 1 Motor 1:前 CA_ROTOR0_PY = 1 右 CA_ROTOR1_PX = -1 Motor 2:后 CA_ROTOR1_PY = -1 左 CA_ROTOR2_PX = 1 Motor 3:前 CA_ROTOR2_PY = -1 左 CA_ROTOR3_PX = -1 Motor 4:后 CA_ROTOR3_PY = 1 右 ``` 也可以填写实际距离,例如电机相对重心的位置是 `0.2 m`: ```text Motor 1:PX= 0.2,PY= 0.2 Motor 2:PX=-0.2,PY=-0.2 Motor 3:PX= 0.2,PY=-0.2 Motor 4:PX=-0.2,PY= 0.2 ``` 填写实际尺寸有助于准确描述非对称机体。无论使用归一化位置还是实际尺寸,都必须保持各电机之间正确的位置比例和符号。 --- ## 6. 电机旋向参数 旋翼旋向由 `CA_ROTORn_KM` 表示: ```text KM > 0:CCW,逆时针 KM < 0:CW,顺时针 ``` PX4当前参数说明明确规定: - 正值用于 CCW 旋翼。 - 负值用于 CW 旋翼。 常见四旋翼X示例: ```text CA_ROTOR0_KM = 0.05 Motor 1:CCW CA_ROTOR1_KM = 0.05 Motor 2:CCW CA_ROTOR2_KM = -0.05 Motor 3:CW CA_ROTOR3_KM = -0.05 Motor 4:CW ``` 旋向的观察方向必须统一。本文四旋翼示意图中的 CW/CCW 按从飞机上方观察螺旋桨定义。 配置中的旋向必须和实际电机旋转方向一致,否则控制分配器对偏航反扭矩的计算会出错。 --- ## 7. 逻辑电机如何映射到物理输出口 逻辑 Motor 1 不一定连接 `MAIN OUT 1`。物理输出功能由对应输出参数决定。 例如一种直接映射是: ```text PWM_MAIN_FUNC1 = Motor 1 PWM_MAIN_FUNC2 = Motor 2 PWM_MAIN_FUNC3 = Motor 3 PWM_MAIN_FUNC4 = Motor 4 ``` 但也可以配置成: ```text MAIN OUT 1 → Motor 3 MAIN OUT 2 → Servo 1 MAIN OUT 3 → Motor 1 ``` 只要输出功能和实际接线一致,逻辑电机不要求必须按物理口顺序排列。 应在QGroundControl中检查: ```text Actuators → Actuator Outputs ``` 确认每个输出通道的 Function/功能是: - Motor 1 - Motor 2 - Motor 3 - Motor 4 - 或相应舵机功能 如果使用其他输出驱动,参数名可能不是 `PWM_MAIN_FUNCn`,但原则相同:物理通道必须分配到正确的逻辑执行器功能。 --- ## 8. 安全验证电机编号 测试前必须: 1. 拆下所有螺旋桨。 2. 固定机体。 3. 确认电池和电调连接安全。 4. 确保周围无人接触电机。 然后在QGroundControl执行器测试中逐个测试: ```text 测试 Motor 1 → 只有实际前右电机转动 测试 Motor 2 → 只有实际后左电机转动 测试 Motor 3 → 只有实际前左电机转动 测试 Motor 4 → 只有实际后右电机转动 ``` 接着分别确认旋向: ```text Motor 1 → CCW Motor 2 → CCW Motor 3 → CW Motor 4 → CW ``` 如果编号错误,优先修改输出功能映射或实际接线,使逻辑电机与几何定义一致。 如果编号正确但旋向错误,通常可以: - 通过支持的电调配置工具改变电机方向。 - 对普通无刷电机交换任意两根相线。 不能只在软件中把 `KM` 正负号改成实际旋向,却不检查螺旋桨类型和整机期望旋向。几何、实际旋向以及安装的 CW/CCW 螺旋桨必须三者一致。 --- ## 9. 当前13200尾座式配置的重要限制 当前使用的机型是: ```text 13200_generic_vtol_tailsitter ``` 它的默认控制分配配置为: ```sh param set-default CA_AIRFRAME 4 param set-default CA_ROTOR_COUNT 2 param set-default CA_ROTOR0_KM -0.05 param set-default CA_ROTOR0_PY -0.2 param set-default CA_ROTOR1_KM 0.05 param set-default CA_ROTOR1_PY 0.2 param set-default CA_SV_CS_COUNT 2 ``` 这表示当前模板预期: - 两个电机。 - 两个舵面。 - 电机分别位于机体左右两侧。 具体关系: | 逻辑执行器 | 位置/配置 | |---|---| | Motor 1 / Rotor 0 | `PY=-0.2`,机体左侧,`KM=-0.05`,CW | | Motor 2 / Rotor 1 | `PY=+0.2`,机体右侧,`KM=+0.05`,CCW | | Servo 1 | 一个尾座式控制面 | | Servo 2 | 另一个尾座式控制面 | 相关源码: ```text ROMFS/px4fmu_common/init.d/airframes/13200_generic_vtol_tailsitter ``` 因此当前 `13200` 并不是四电机尾座式模板。 --- ## 10. 如果实机是四电机尾座式 如果实际飞机有四个电机,只把四个电调插到四个输出口是不够的。当前控制分配器仍然只知道两个旋翼,因此必须建立与真实机体一致的四电机几何。 至少需要检查和修改: ```text CA_ROTOR_COUNT = 4 CA_ROTOR0_PX/PY/PZ CA_ROTOR1_PX/PY/PZ CA_ROTOR2_PX/PY/PZ CA_ROTOR3_PX/PY/PZ CA_ROTOR0_AX/AY/AZ CA_ROTOR1_AX/AY/AZ CA_ROTOR2_AX/AY/AZ CA_ROTOR3_AX/AY/AZ CA_ROTOR0_KM CA_ROTOR1_KM CA_ROTOR2_KM CA_ROTOR3_KM ``` 还需要确认: - 四个电机是否全部用于悬停和固定翼推进。 - 电机在固定翼姿态下相对重心的位置。 - 每个电机推力轴方向。 - 四个电机的实际旋向。 - 固定翼状态是否使用差动推力。 - 舵面数量和舵面力矩方向。 - PWM或DShot输出功能映射。 - 尾座式前后转换过程中的执行器使用方式。 不能直接照搬普通四旋翼X编号图,除非四电机尾座式的真实几何确实与该图相同。尾座式可能采用左右翼上下排列、非对称位置或不同推力轴,需要按真实结构建模。 --- ## 11. 在控制台查看当前参数 查看当前旋翼数量: ```sh param show CA_ROTOR_COUNT ``` 查看前四个旋翼位置和旋向: ```sh param show CA_ROTOR0_PX param show CA_ROTOR0_PY param show CA_ROTOR0_PZ param show CA_ROTOR0_KM param show CA_ROTOR1_PX param show CA_ROTOR1_PY param show CA_ROTOR1_PZ param show CA_ROTOR1_KM param show CA_ROTOR2_PX param show CA_ROTOR2_PY param show CA_ROTOR2_PZ param show CA_ROTOR2_KM param show CA_ROTOR3_PX param show CA_ROTOR3_PY param show CA_ROTOR3_PZ param show CA_ROTOR3_KM ``` 查看全部旋翼参数: ```sh param show CA_ROTOR* ``` 查看输出功能时,可以在QGroundControl执行器页面检查,也可根据实际输出驱动查询对应的 `FUNC` 参数。 --- ## 12. 当前结论 对于普通四旋翼X,PX4常见逻辑编号是: ```text Motor 1:前右,CCW Motor 2:后左,CCW Motor 3:前左,CW Motor 4:后右,CW ``` 但是当前项目的关键事实是: ```text 当前机型:13200 Generic VTOL Tailsitter 当前旋翼数量:CA_ROTOR_COUNT=2 当前模板:双电机、双舵面尾座式 ``` 如果实际飞机是四电机尾座式,在上桨、解锁或飞行前,必须根据真实电机位置、推力轴和旋向完成四电机控制分配,并通过拆桨执行器测试逐一验证逻辑编号和物理输出。