架构与接口
bringup 入口
| launch | 作用 | 输出 |
|---|---|---|
sensors.launch | 启动 MID360 与 RGB 相机 | 只产生传感器数据 |
perception.launch | 启动 FAST-LIO 与 AprilTag | 只产生定位和检测结果 |
flight_base.launch | 启动 MAVROS 与外部视觉 PX4 输出 | 不解锁、不发布飞行设定点 |
可单独启动的组件包括 lidar_mid360s.launch、camera_rgb.launch、fastlio_mid360s.launch、
apriltag_rgb.launch、camera_extrinsics.launch 和 mavros_px4.launch。排查某个组件时,
直接启动对应的 launch 即可。
三个入口互不包含,编号示例也不会启动它们。需要位置控制时,应按传感器、感知定位、飞控 基础链路的顺序分别启动,并在每一步检查输出。
位置数据如何进入飞行示例
位置控制使用以下数据链:
| 阶段 | 输入 | 输出 | 作用 |
|---|---|---|---|
| Livox 驱动 | MID360 数据 | /livox/lidar、/livox/imu | 提供点云和 IMU |
| FAST-LIO | 点云和 IMU | /Odometry | 计算连续的激光惯性里程计 |
| 里程计修正程序 | /Odometry、前 200 帧 IMU | /sunray/odometry | 修正初始倾角,并以第一帧里程计作为原点 |
vision_pose_bridge.py | /sunray/odometry | /mavros/vision_pose/pose | 检查时间戳、数值和跳变后转发位姿 |
| PX4 estimator | 外部视觉及飞控传感器 | PX4 本地位置状态 | 按飞控参数融合外部视觉 |
| MAVROS | PX4 本地位置 | /mavros/local_position/pose | 向 ROS 提供融合后的本地位姿 |
| 飞行示例 | 本地位姿 | /mavros/setpoint_position/local | 根据当前位置计算并发送目标 |
FAST-LIO 负责估计运动,不负责执行航点。vision_pose_bridge.py 也不根据 TF 重新计算坐标,
它只检查并复制输入位姿,再按配置修改输出消息的 frame 名称。实际坐标方向由传感器安装、
FAST-LIO 外参和里程计修正共同决定。
PX4 estimator 是位置链路中的必要环节。/sunray/odometry 或
/mavros/vision_pose/pose 有数据,不等于 PX4 已采用该数据。飞行示例最终读取的是
/mavros/local_position/pose,因此还必须确认 PX4 的外部视觉融合设置及 estimator 状态。
外部视觉入口
| launch | 输入 | 输出 |
|---|---|---|
vision_preview.launch | /sunray/odometry | /robotac_localization/vision_pose_preview |
vision_to_px4.launch | /sunray/odometry | 预览话题和 /mavros/vision_pose/pose |
两者使用同一实现。输入时间戳、四元数、速度跳变和空间范围检查通过后才发布。
vision_preview.launch 只产生预览;flight_base.launch 包含 vision_to_px4.launch,会将
位姿送往 MAVROS。它们都不会启动 MID360 或 FAST-LIO。
编号示例
| 编号 | 节点脚本 | 主要输入 | 主要输出或动作 |
|---|---|---|---|
| 01 | 01_fcu_state.py | FCU 与落地状态 | 只读日志 |
| 02 | 02_local_pose.py | 修正里程计、桥接状态、estimator、本地位姿 | 四级定位状态、位置、姿态、频率、数据年龄 |
| 03 | 03_apriltag_detection.py | /tag_detections | Tag ID、相机坐标位置、检测时间 |
| 04 | 04_apriltag_local_pose.py | Tag、TF、本地位姿 | Tag 本地位置和水平偏差 |
| 05 | 05_setpoint_preview.py | 参数 | ~target,不发往 MAVROS |
| 06 | 06_hover.py | 飞控与定位状态 | 起飞、悬停、降落 |
| 07 | 07_move_relative.py | 飞控与定位状态 | 相对位移、返回、降落 |
| 08 | 08_waypoints.py | YAML 航点 | 顺序航点和降落 |
| 09 | 09_tag_centering_preview.py | Tag 与本地位姿 | 对准 ~target,不控制飞机 |
| 10 | 10_tag_centering_flight.py | Tag、飞控与定位状态 | 对准、稳定 3 秒、降落 |
| 11 | 11_payload_release.py | 舵机服务 | 单次阻挡或释放动作 |
飞行服务与公共输出
会控制飞机的示例提供:
| 接口 | 类型 | 含义 |
|---|---|---|
~start | std_srvs/Trigger | 完成启动前检查后接受一次启动请求 |
~stop | std_srvs/Trigger | 中止当前执行并请求降落 |
~state | std_msgs/String | 当前状态名称,不使用 key=value 字符串 |
~active | std_msgs/Bool | 当前是否正在执行 |
~target | geometry_msgs/PoseStamped | 当前或预览目标位姿 |
所有飞行示例只向 /mavros/setpoint_position/local 发布 PoseStamped。示例接口不使用原始
位置目标位掩码。
Tag 接口
| 接口 | 类型 | 方向 |
|---|---|---|
/robotac_examples/tag/pose | geometry_msgs/PoseStamped | TagTracker 输出 |
/robotac_examples/tag/error | geometry_msgs/Vector3Stamped | Tag 相对飞机的本地坐标偏差 |
TagTracker 只选择配置的 ID。连续检测结果跳变过大时,需要重新积累稳定样本。示例 10 在 飞行中长时间收不到 Tag 时会中止并请求降落。
舵机接口
| 接口 | 类型 | 含义 |
|---|---|---|
/robotac_servo/set_released | std_srvs/SetBool | true 释放,false 阻挡 |
/robotac_servo/connected | std_msgs/Bool | 串口当前可访问 |
/robotac_servo/state | std_msgs/String | unknown、blocked、released 或 error |
/robotac_servo/command_ok | std_msgs/Bool | 最近一次命令是否成功 |
节点断线重连后不会重放上一条动作。
坐标系
- FAST-LIO 输入与输出坐标以实际配置和安装标定为准。
- MAVROS 本地位置按 ROS ENU 表示,PX4 内部转换由 MAVROS 处理。
- 相对位移示例的
x为起始航向前方,y为左方,z为上方。 - Tag 本地位置依赖
map到相机光学坐标系的有效 TF。
设置或改写 frame_id 只是标明数据属于哪个坐标系,并不会对数值执行旋转或平移。TF 名称、
方向、外参数值和手动移动时的位置变化必须分别验证。