坐标系、话题与服务¶
仿真算法能否正确工作,取决于位置、速度、姿态和控制量是否采用同一套约定。本页按当前源码的数据流说明接口;移植到其他 PX4、MAVROS 或机型版本时,应重新核对坐标变换。
单机与多机命名空间¶
| 场景 | 话题前缀 | 示例 |
|---|---|---|
| 单机 | 无 | /mavros/state |
| 多机第 N 架 | /uavN |
/uav3/mavros/state |
uav_id 从 0 开始。uav_amount=1 时,垂起固定翼与状态封装使用根命名空间;数量大于 1 时使用 /uavN。
上层控制接口¶
期望速度向量¶
| 项目 | 定义 |
|---|---|
| 话题 | /control_signal/vector 或 /uavN/control_signal/vector |
| 消息 | geometry_msgs/Vector3 |
| 数据 | [vx, vy, vz] |
| 单位 | m/s |
| 发布方式 | 需要以稳定频率持续发布 |
固定翼和垂起固定翼会把向量转换为偏航、滚转、俯仰和纵向控制量;多旋翼控制器把速度设定值转为 MAVROS PositionTarget。
期望姿态¶
| 项目 | 定义 |
|---|---|
| 话题 | /control_signal/att 或 /uavN/control_signal/att |
| 消息 | std_msgs/Float64MultiArray |
| 顺序 | [roll, pitch, yaw, force] |
| 角度单位 | rad |
force 是当前仿真控制链使用的归一化纵向输入,不能直接当作实机电机推力或油门百分比。
状态接口¶
| 属性 | ROS 来源 | 当前用途 |
|---|---|---|
local_pose |
mavros/local_position/pose |
单机局部位置与姿态 |
global_pose |
mavros/global_position/global |
纬度、经度、高度 |
gazebo_pose |
vision_pose/pose |
Gazebo 真值位置,多机算法主要使用 |
local_vel |
mavros/local_position/velocity_local |
局部速度 |
global_vel |
mavros/global_position/local |
里程计速度 |
body_vel |
mavros/local_position/velocity_body |
机体系速度 |
body_acc |
mavros/imu/data |
IMU 线加速度 |
state |
mavros/state |
连接、解锁和模式 |
四元数属性顺序为 [x, y, z, w]。上层算法首次读取前,数组使用非零占位值初始化;因此算法节点启动后应先确认 MAVROS 已连接并收到有效状态。
Gazebo 真值转发¶
get_local_pose.py 订阅 /gazebo/model_states,按模型名查找:
- 单机:
<uav_type>; - 多机:
<uav_type>0、<uav_type>1……
随后以 30 Hz 发布:
- 单机:
/vision_pose/pose、/vision_speed/speed; - 多机:
/uavN/vision_pose/pose、/uavN/vision_speed/speed。
模型名称与 launch 中生成的名称必须一致,否则回调中的模型查找会失败。
MAVROS 服务¶
| 服务 | 用途 | 调用位置 |
|---|---|---|
/mavros/cmd/arming |
解锁/上锁 | 三类机型控制器 |
/mavros/set_mode |
切换 OFFBOARD、AUTO.RTL 等模式 | 三类机型控制器 |
/mavros/cmd/takeoff |
固定翼/多旋翼起飞 | FW_class.py、Rotor_class.py |
/mavros/cmd/vtol_transition |
垂起固定翼形态转换 | VTOL_class.py |
多机模式在服务名前同样增加 /uavN。
坐标约定的使用建议¶
ROS、MAVROS 和 PX4 在局部 ENU/NED、机体系 FLU/FRD 之间存在转换。当前源码的变量注释中同时出现 EDU、END、NED 等写法,且不同控制器对 PositionTarget.coordinate_frame 的设置不同。开发时建议:
- 上层算法统一使用其状态来源对应的 ROS 局部坐标,不混用经纬度与局部米制坐标。
- 用单轴小指令分别确认 x、y、z 的正方向,再开始三维轨迹测试。
- 姿态角始终以弧度传入,记录俯仰角在控制节点中的符号翻转。
- 改变
coordinate_frame或 MAVROS 版本后,重新验证速度方向和偏航方向。 - 将仿真算法迁移到实机前,单独编写并测试显式坐标转换层。
安全边界
控制节点会调用解锁、起飞和飞行模式服务。请只在确认连接到 PX4 SITL 后运行本手册示例。