Skip to Content
架构与接口

架构与接口

PlantUML:Robotac ROS 组件、话题与服务

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 本地位置状态按飞控参数融合外部视觉
MAVROSPX4 本地位置/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。

编号示例

编号节点脚本主要输入主要输出或动作
0101_fcu_state.pyFCU 与落地状态只读日志
0202_local_pose.py修正里程计、桥接状态、estimator、本地位姿四级定位状态、位置、姿态、频率、数据年龄
0303_apriltag_detection.py/tag_detectionsTag ID、相机坐标位置、检测时间
0404_apriltag_local_pose.pyTag、TF、本地位姿Tag 本地位置和水平偏差
0505_setpoint_preview.py参数~target,不发往 MAVROS
0606_hover.py飞控与定位状态起飞、悬停、降落
0707_move_relative.py飞控与定位状态相对位移、返回、降落
0808_waypoints.pyYAML 航点顺序航点和降落
0909_tag_centering_preview.pyTag 与本地位姿对准 ~target,不控制飞机
1010_tag_centering_flight.pyTag、飞控与定位状态对准、稳定 3 秒、降落
1111_payload_release.py舵机服务单次阻挡或释放动作

飞行服务与公共输出

会控制飞机的示例提供:

接口类型含义
~startstd_srvs/Trigger完成启动前检查后接受一次启动请求
~stopstd_srvs/Trigger中止当前执行并请求降落
~statestd_msgs/String当前状态名称,不使用 key=value 字符串
~activestd_msgs/Bool当前是否正在执行
~targetgeometry_msgs/PoseStamped当前或预览目标位姿

所有飞行示例只向 /mavros/setpoint_position/local 发布 PoseStamped。示例接口不使用原始 位置目标位掩码。

Tag 接口

接口类型方向
/robotac_examples/tag/posegeometry_msgs/PoseStampedTagTracker 输出
/robotac_examples/tag/errorgeometry_msgs/Vector3StampedTag 相对飞机的本地坐标偏差

TagTracker 只选择配置的 ID。连续检测结果跳变过大时,需要重新积累稳定样本。示例 10 在 飞行中长时间收不到 Tag 时会中止并请求降落。

舵机接口

接口类型含义
/robotac_servo/set_releasedstd_srvs/SetBooltrue 释放,false 阻挡
/robotac_servo/connectedstd_msgs/Bool串口当前可访问
/robotac_servo/statestd_msgs/Stringunknown、blocked、released 或 error
/robotac_servo/command_okstd_msgs/Bool最近一次命令是否成功

节点断线重连后不会重放上一条动作。

坐标系

  • FAST-LIO 输入与输出坐标以实际配置和安装标定为准。
  • MAVROS 本地位置按 ROS ENU 表示,PX4 内部转换由 MAVROS 处理。
  • 相对位移示例的 x 为起始航向前方,y 为左方,z 为上方。
  • Tag 本地位置依赖 map 到相机光学坐标系的有效 TF。

设置或改写 frame_id 只是标明数据属于哪个坐标系,并不会对数值执行旋转或平移。TF 名称、 方向、外参数值和手动移动时的位置变化必须分别验证。