Magpie360-5S 开发者手册

本手册介绍 Magpie360-5S 的设备连接、飞行控制、传感器数据、激光定位及投放装置接口,面向具备 Linux、ROS 和基础编程知识的开发者。

术语约定:

  • 上位机:飞机搭载的板载计算机,型号为 Jetson Orin NANO / NX。
  • 飞控:PX6C,负责姿态稳定、飞行状态管理和底层执行。
  • 开发电脑:用于 SSH、编辑程序、查看日志或运行地面站的电脑。
  • 投放装置下位机:分电板上的控制单片机。
  • 设定值(setpoint):应用程序发送给飞控的期望位置、速度或其他控制量。

除明确标注“开发电脑”外,命令均在上位机的 Bash 终端执行。文中的文件位置使用上位机上的绝对路径,样例代码按文件名索引。

1. 平台概览

1.1 产品定位与开发能力

Magpie360-5S 的应用程序运行在上位机上,通过 ROS 与飞控、传感器和投放装置通信。主要开发方向包括:

开发方向 主要接口或组件 前提
状态监控 MAVROS 状态、局部位姿、速度和电池话题 飞控通信正常
飞行控制 MAVROS 位置/速度设定值、模式及解锁服务 定位有效、飞控处于对应控制模式
点云与惯性数据处理 Livox ROS Driver 2 雷达网络和驱动正常
激光定位与建图 FAST-LIO、外部位姿转发节点 时间、外参、安装方向和飞控融合配置正确
投放装置控制 tutorial_catapult、rosserial 下位机通信正常

本平台主要提供 ROS 接口和应用示例,开发者通过订阅 Topic、发布设定值、调用 Service 和配置 Launch/YAML 实现功能。

1.2 硬件组成与接口总览

部件 型号/配置 职责与接口
上位机 Jetson Orin NANO / NX 运行 ROS、感知、定位、规划和任务程序
飞控 PX6C 通过 4-pin USB 接口连接分电板内置 USB Hub,由 Hub 接入上位机,通信设备为 /dev/ttyACM0
GPS 模块 M9N 带有安全开关
激光雷达 MID-360 / MID-360s 通过以太网直连上位机,提供点云与 IMU 数据
投放装置 – 分电板内置 USB Hub、CH340 USB 转串口芯片与 ATmega328P 下位机,参考设备为 /dev/ttyUSB0

1.3 软件架构与数据流

Magpie360-5S 软件架构与数据流

应用给飞控发送期望值,飞控负责底层控制。

vision_pose 只是 MAVROS 的接口名称,输入可以来自激光定位。


2. 设备连接与网络配置

Magpie360-5S 设备连接

图中设备外形参考 Livox MID-360 官方产品图和 Pixhawk 6C 官方资料。分电板以结构框表示,框内展示 USB Hub、USB 转串口芯片和下位机的内部连接。

2.1 飞控 USB 连接与通信配置

PX6C 通过飞控上的 4-pin USB 接口连接分电板内置 USB Hub 的一个下游端口。Hub 的上游通过分电板引出的 USB-A 接头接入上位机的 USB Type-A 口,上位机枚举出的飞控设备为 /dev/ttyACM0。

lsusb
ls -l /dev/ttyACM0

如果遇到权限问题,可将当前用户加入dialout组:

sudo usermod -aG dialout "$USER"

随后重新登录。不要长期使用 chmod 777 或以 root 运行整套 ROS 来绕过权限问题。

/home/jetson/catkin_ws/src/tutorials/tutorial_basic/launch/mavros.launch包含的配置为:

<launch>
  <include file="$(find mavros)/launch/px4.launch">
    <arg name="fcu_url" value="/dev/ttyACM0:57600"/>
  </include>
</launch>

启动入口:

roslaunch tutorial_basic mavros.launch

也可使用 MAVROS 自身的入口指定连接 URL,选择其中一个入口启动:

roslaunch mavros px4.launch fcu_url:=/dev/ttyACM0:57600

注意:/home/jetson/catkin_ws/src/tutorials/tutorial_basic/launch/mavros.launch 没有暴露可覆盖的 fcu_url 参数。需要更换设备路径时,使用上面的 MAVROS 入口,或在自有 Launch 中明确配置。

读取连接状态:

rostopic echo -n 1 /mavros/state

预期有 connected: True,表示 MAVROS 已经连接上飞控。

2.2 MID-360 / MID-360s 直连与局域网配置

激光雷达通过网线直连上位机以太网口。雷达与上位机使用同一 IPv4 子网内的不同地址。

2.2.1 地址规划

项目 配置
雷达专用网卡 如 eth0、enP...,以实际网卡名称为准
上位机地址 192.168.1.5
子网前缀/掩码 按设备网络规划填写
雷达地址 192.168.1.1xx, 其中最后一部分的最后两位为雷达的SN码最后两位
远程管理地址 开发电脑用于 SSH 的上位机地址,可能属于另一网卡

随无人机附带的launch文件使用上位机地址 192.168.1.5、雷达地址 192.168.1.1xx。

2.2.2 配置 Livox 驱动

驱动包位置可通过以下命令查询:

rospack find livox_ros_driver2

配置文件为 /home/jetson/ros_libraries_ws/src/livox_ros_driver2/config/MID360_config.json,也可能为 /home/jetson/ros_libraries_ws/src/livox_ros_driver2/config/MID360s_config.json,取决于飞机所配备的雷达型号。当前随附配置采用以下字段:

字段 含义
MID360.host_net_info.cmd_data_ip 上位机接收控制通信的本机地址
MID360.host_net_info.push_msg_ip 上位机接收状态信息的本机地址
MID360.host_net_info.point_data_ip 上位机接收点云的本机地址
MID360.host_net_info.imu_data_ip 上位机接收 IMU 的本机地址
MID360.host_net_info.log_data_ip 日志通道地址,按该版本的日志配置处理
lidar_configs[].ip 要连接的雷达地址

对当前单网卡直连配置,前四个地址与上位机雷达网口一致。端口沿用配套驱动配置中的值。不同驱动版本的配置结构可能不同,字段名称以对应型号的配置文件为准。

/home/jetson/ros_libraries_ws/src/livox_ros_driver2/launch_ROS1/msg_MID360.launch 内部通过 user_config_path 参数选择配置文件,没有暴露同名 Launch 参数。修改配置后重启驱动。

2.3 投放装置连接

分电板内置 USB Hub 的另一个下游端口通过板内 USB 走线连接 CH340 USB 转串口芯片,CH340 再通过板内串口走线与 ATmega328P 下位机通信。下位机通过 PWM 控制投放装置舵机。

投放装置与飞控共用分电板引出的 USB-A 上游连接。官方配置中,CH340 对应 /dev/ttyUSB0,飞控对应 /dev/ttyACM0。投放装置的 ROS 接口见 6.3 节。

多个 USB 串口的编号可能随枚举顺序变化。设备身份可通过 /dev/serial/by-id/ 或已有的 udev 别名区分。

2.4 工作区与软件包位置

上位机路径 内容
/home/jetson/ros_libraries_ws/ 外部 ROS 依赖,如 Livox 驱动、FAST-LIO
/home/jetson/catkin_ws/src/tutorials/tutorial_basic/ MAVROS 连接、基础飞行示例
/home/jetson/catkin_ws/src/tutorials/tutorial_navigation/ 激光定位、位姿转发相关配置与节点
/home/jetson/catkin_ws/src/tutorials/tutorial_catapult/ 投放装置驱动与固件资料
/home/jetson/catkin_ws/src/tutorials/tutorial_all/ 综合任务示例

工作区环境加载顺序:

source /opt/ros/noetic/setup.bash
source /home/jetson/ros_libraries_ws/devel/setup.bash
source /home/jetson/catkin_ws/devel/setup.bash

3. 基础服务与状态读取

3.1 启动基础服务

各终端加载 2.4 节的工作区环境后,分别启动以下服务。已由系统启动的服务沿用现有实例。

终端 A:ROS Master。

roscore

终端 B:飞控通信。

roslaunch tutorial_basic mavros.launch

终端 C:雷达驱动。

roslaunch livox_ros_driver2 msg_MID360.launch

上述入口对应 MID-360;MID-360s 的入口及其加载的 JSON 按交付驱动配置选择。

终端 D:激光定位。

roslaunch tutorial_navigation mapping_mid360.launch rviz:=false

此入口会加载 /home/jetson/catkin_ws/src/tutorials/tutorial_navigation/config/mid360.yaml,启动 fast_lio 包中的 fastlio_mapping,节点名为 /laserMapping。

终端 E:外部位姿转发。

rosrun tutorial_navigation odom_forward_node

该节点默认订阅 Odometry,发布到 mavros/vision_pose/pose,接口与参数见 7.3 节。

3.2 读取飞机与传感器状态

rosnode list
rostopic echo -n 1 /mavros/state
rostopic hz /livox/lidar
rostopic hz /livox/imu

位姿数据:

rostopic echo -n 1 /Odometry/header
rostopic echo -n 1 /Odometry/pose/pose
rostopic echo -n 1 /mavros/vision_pose/pose/header
rostopic echo -n 1 /mavros/local_position/pose
接口 数据含义
/mavros/state 飞控连接、飞行模式及解锁状态
/livox/lidar、/livox/imu 雷达点云与惯性测量
/Odometry FAST-LIO 的局部运动估计
/mavros/vision_pose/pose 发送给飞控的外部位姿测量
/mavros/local_position/pose 飞控融合后的局部位姿

查看点云可运行 rviz,添加 PointCloud2 显示,选择 /cloud_registered。Fixed Frame 使用该消息的 header.frame_id,当前 FAST-LIO 输出为 camera_init。

3.3 基础飞行中的接口分工

起飞、悬停和降落流程涉及以下接口:

阶段 接口
读取连接和飞行状态 /mavros/state
获取当前局部位姿 /mavros/local_position/pose
请求 OFFBOARD 或 AUTO.LAND /mavros/set_mode
请求解锁/上锁 /mavros/cmd/arming
持续发送位置目标 /mavros/setpoint_position/local
持续发送速度目标 /mavros/setpoint_velocity/cmd_vel

对应示例文件为 /home/jetson/catkin_ws/src/tutorials/tutorial_basic/src/takeoff_node.cpp。该文件使用速度接口执行起飞、悬停和下降,并调用模式与解锁服务。完整接口定义见第 5 章。


4. 开发基础约定

4.1 坐标系、单位与姿态表示

约定 轴向/单位 接口说明
ROS 局部 ENU X 东、Y 北、Z 上;m 局部建图的初始化朝向及其与飞控参考的关系由定位配置确定
ROS 机体 FLU X 前、Y 左、Z 上 机体参考下的运动量
飞控 NED X 北、Y 东、Z 下 MAVROS 常规接口处理对应转换
飞控机体 FRD X 前、Y 右、Z 下 与 ROS 机体 FLU 的轴向约定不同
线速度/加速度 m/s、m/s² 飞行控制接口的单位
航向/角速度 rad、rad/s 舵机角度参数另以度表示
姿态 四元数 x,y,z,w 无旋转为 (0,0,0,1)

对 ROS 1 MAVROS 常规局部位置/速度接口,应用侧使用 ROS 坐标约定,由插件进行 ENU/NED 转换。原始设定值接口的转换行为见 5.4 节。

4.2 时间与频率

数据/循环 时间或频率含义
消息 header.stamp 对应消息的时间戳
Livox 逐点时间 相对于点云时间基准的偏移,供运动去畸变等处理使用
MID-360 Launch 的 publish_freq 当前点云发布参数为 10.0 Hz
基础 C++ 控制示例 控制循环为 20 Hz
外部位姿转发 由输入 /Odometry 消息触发发布,保留输入 Header

传感器采样、点云打包、里程计更新和控制发送分别具有自己的频率。多路数据的时间对应关系由设备时钟、驱动时间戳及同步配置共同决定。

4.3 命名空间与 TF 约定

本文以单机、根命名空间为例,例如 /mavros/state。ROS 名称区分大小写,/Odometry 与 /odometry 不相同。ROS 相对名称受节点命名空间影响。

当前相关帧名:

帧 来源/用途
livox_frame 随附 Livox Launch 的默认消息帧名
camera_init FAST-LIO 输出的局部参考帧
body FAST-LIO 状态所描述的运动主体帧
base_link ROS 机体参考帧
map、odom 应用使用的参考帧

FAST-LIO 发布动态变换 camera_init → body。/home/jetson/catkin_ws/src/tutorials/tutorial_navigation/launch/mid360.launch 中配置了 map → odom → camera_init 和 body → base_link 的单位静态变换,表示这些帧在该配置下重合。

header.frame_id 是帧标签;坐标转换需要同时计算位置和姿态。当前位姿转发节点的字段处理方式见 7.3 节。

4.4 参数与配置位置

配置类型 使用方式 生效范围
Launch 参数 roslaunch ... 参数:=值 Launch 声明并传递给节点的参数
ROS 参数 rosparam get/set 是否动态读取由节点实现决定
YAML/JSON 由 Launch 或驱动加载 参数文件中定义的配置
节点私有参数 ~参数名;rosrun 可用 _参数:=值 实际路径随节点名变化
飞控参数 地面站/飞控参数接口 飞控内部配置

/home/jetson/catkin_ws/src/tutorials/tutorial_basic/launch/run_vel_control.launch 中的节点名是 takeoff_node,其 hover_x 等私有参数位于该节点名下。

/home/jetson/catkin_ws/src/tutorials/tutorial_basic/launch/mavros.launch 包含 MAVROS 的 px4.launch,未显式加载 /home/jetson/catkin_ws/src/tutorials/tutorial_basic/config/px4_config.yaml。运行配置由实际 Launch 包含关系决定。


5. 飞行控制接口参考

5.1 接口总览与样例文件

下表方向以应用程序为参照。“样例文件”列给出使用该接口的代表性文件;完整文件位置列在表后。

接口 类型 应用侧方向 用途 样例文件
/mavros/state mavros_msgs/State 订阅 连接、模式、解锁状态 takeoff_node.cpp、vel_control_node.cpp、circle_node.cpp、fly_path.py
/mavros/local_position/pose geometry_msgs/PoseStamped 订阅 飞控局部位姿 takeoff_node.cpp、vel_control_node.cpp、circle_node.cpp、fly_path.py
/mavros/local_position/odom nav_msgs/Odometry 订阅 飞控局部里程计 ego_planner.launch 中配置了该输入
/mavros/local_position/velocity_local geometry_msgs/TwistStamped 订阅 局部参考下的速度 当前样例未直接读取
/mavros/battery sensor_msgs/BatteryState 订阅 电池信息 当前样例未直接读取
/mavros/extended_state mavros_msgs/ExtendedState 订阅 包括着陆状态的扩展状态 当前样例未直接读取
/mavros/setpoint_position/local geometry_msgs/PoseStamped 发布 位置与航向设定值 fly_path.py
/mavros/setpoint_velocity/cmd_vel geometry_msgs/TwistStamped 发布 速度与偏航角速度设定值 takeoff_node.cpp、vel_control_node.cpp、circle_node.cpp
/mavros/setpoint_raw/local mavros_msgs/PositionTarget 发布 按掩码组合的原始局部设定值 ego_planner_gate.py
/mavros/vision_pose/pose geometry_msgs/PoseStamped 发布 外部位姿输入 odom_forward_node.cpp;fly_path.py 中也订阅了该接口
/mavros/set_mode mavros_msgs/SetMode 调用服务 请求飞行模式 takeoff_node.cpp、vel_control_node.cpp、circle_node.cpp、fly_path.py
/mavros/cmd/arming mavros_msgs/CommandBool 调用服务 请求解锁或上锁 takeoff_node.cpp、vel_control_node.cpp、circle_node.cpp、fly_path.py

样例文件位置:

文件 上位机绝对路径
takeoff_node.cpp /home/jetson/catkin_ws/src/tutorials/tutorial_basic/src/takeoff_node.cpp
vel_control_node.cpp /home/jetson/catkin_ws/src/tutorials/tutorial_basic/src/vel_control_node.cpp
circle_node.cpp /home/jetson/catkin_ws/src/tutorials/tutorial_basic/src/circle_node.cpp
fly_path.py /home/jetson/catkin_ws/src/tutorials/tutorial_basic/scripts/fly_path.py
odom_forward_node.cpp /home/jetson/catkin_ws/src/tutorials/tutorial_navigation/src/odom_forward_node.cpp
ego_planner_gate.py /home/jetson/catkin_ws/src/tutorials/tutorial_navigation/scripts/ego_planner_gate.py
ego_planner.launch /home/jetson/catkin_ws/src/tutorials/tutorial_navigation/launch/ego_planner.launch

以上只索引接口的使用文件,不展开任务程序的内部流程。

5.2 状态与遥测

/mavros/state

消息类型:mavros_msgs/State。

字段 含义
connected MAVROS 与 FCU 的连接状态
armed 飞控解锁状态
mode 当前飞行模式字符串
system_status MAVLink 系统状态值

样例文件:takeoff_node.cpp、vel_control_node.cpp、circle_node.cpp、fly_path.py。

局部位姿与速度

  • header.stamp 是数据时间戳,header.frame_id 描述参考帧。
  • PoseStamped.pose.position 单位为 m,姿态为四元数。
  • Odometry 的位姿参考 header.frame_id,速度参考 child_frame_id。
  • TwistStamped.twist.linear 单位为 m/s,twist.angular 单位为 rad/s。

vel_control_node.cpp 使用 /mavros/local_position/pose 获取当前位置,并依据位置误差计算速度设定值。

电池与着陆状态

BatteryState.voltage 单位为 V;若有有效的 percentage,其范围通常为 0~1。

/mavros/extended_state 使用 mavros_msgs/ExtendedState,其中 landed_state 表示飞控报告的着陆状态。

5.3 模式切换与解锁/上锁

服务 主要请求字段 主要响应字段 对应状态字段
/mavros/set_mode base_mode、custom_mode mode_sent /mavros/state 的 mode
/mavros/cmd/arming value:true 解锁,false 上锁 success、result /mavros/state 的 armed

使用自定义模式字符串时,常见请求为 base_mode=0、custom_mode="OFFBOARD"。降落模式字符串为 AUTO.LAND。

mode_sent 描述模式请求的发送结果;模式生效状态通过 State.mode 读取。解锁服务返回请求结果,当前解锁状态通过 State.armed 读取。

样例文件:takeoff_node.cpp、vel_control_node.cpp、circle_node.cpp、fly_path.py。

5.4 位置、速度与航向控制

局部位置接口

/mavros/setpoint_position/local 使用 geometry_msgs/PoseStamped:

  • position.x/y/z:局部参考下的位置,单位 m。
  • orientation:包含期望航向的有效四元数。纯偏航角 ψ 可写为 (0, 0, sin(ψ/2), cos(ψ/2))。
  • header.stamp:当前时间,随设定值更新。

该接口用于位置与航向控制。应用提供已经处于对应参考帧下的数据,header.frame_id 仅为消息帧标签。

样例文件:fly_path.py。

局部速度接口

/mavros/setpoint_velocity/cmd_vel 使用 geometry_msgs/TwistStamped:

字段 含义
twist.linear.x/y/z 三轴线速度,m/s
twist.angular.z 偏航角速度,rad/s
twist.angular.x/y 当前速度插件不用于滚转/俯仰控制

ROS 1 MAVROS 的速度插件根据 setpoint_velocity/mav_frame 选择局部或机体解释方式。在默认局部配置下,输入为 ROS ENU,插件转为飞控所需格式。插件实现参考 MAVROS 速度插件。

运行参数位置:

rosparam get /mavros/setpoint_velocity/mav_frame

例如,设置 linear.z=0.4 表示沿当前局部参考的 Z 正方向发送 0.4 m/s 速度目标;设置 angular.z=0.2 表示发送 0.2 rad/s 的偏航角速度目标。

样例文件:takeoff_node.cpp、vel_control_node.cpp、circle_node.cpp。

原始局部设定值接口

/mavros/setpoint_raw/local 使用 mavros_msgs/PositionTarget:

字段 含义
coordinate_frame 控制量使用的 MAVLink 坐标帧枚举
type_mask 指定被忽略的字段,未被忽略的字段参与控制
position 位置,m
velocity 速度,m/s
acceleration_or_force 加速度或力,解释方式由掩码决定
yaw 航向角,rad
yaw_rate 航向角速度,rad/s

type_mask=0 表示相关字段均未被掩码忽略。组合设定值时按所需控制量设置掩码。

ROS 1 MAVROS 在局部回调中执行对应的 ENU/NED 转换,具体行为见 MAVROS 原始设定值插件。

样例文件:ego_planner_gate.py。

5.5 OFFBOARD 控制流程

PX4 OFFBOARD 文档给出的模式进入条件包括:进入模式前持续提供设定值至少约 1 秒,运行期间保持高于 2 Hz 的控制存活信号。当前基础 C++ 示例采用 20 Hz 控制循环。

OFFBOARD 控制流程

图中的 mode 和 armed 均为 /mavros/state 消息的字段。模式和解锁请求分别通过 /mavros/set_mode 与 /mavros/cmd/arming 发送,位置或速度目标通过对应设定值 Topic 持续发布。


6. 传感器与投放装置接口

6.1 MID-360 / MID-360s:点云与 IMU

随附 MID-360 驱动入口的主要配置如下;MID-360s 使用其配套入口和型号配置文件。

Launch 参数 配置值 说明
xfer_format 1 Livox 自定义点云消息格式
multi_topic 0 当前公共话题组织方式
publish_freq 10.0 点云发布频率参数,Hz
msg_frame_id livox_frame 点云等消息使用的默认帧名

主要数据接口:

Topic 类型 用途
/livox/lidar livox_ros_driver2/CustomMsg 带逐点附加信息的点云
/livox/imu sensor_msgs/Imu 角速度、加速度等惯性数据

CustomMsg 的主要字段:

字段 含义
header ROS 时间戳与帧信息
timebase 首点时间基准,时间域和单位按当前驱动实现定义
point_num 点数
lidar_id 设备标识
points[] 点数组

CustomPoint 中的 x/y/z 单位为 m,reflectivity 为 0~255 的反射强度,另包含 offset_time、tag、line。逐点时间信息用于运动去畸变等处理。

IMU 的角速度单位为 rad/s,加速度单位为 m/s²;姿态字段及协方差的含义由驱动输出定义。

标准点云转换入口:

rosrun tutorial_navigation custom_to_pc2.py

对应文件为 /home/jetson/catkin_ws/src/tutorials/tutorial_navigation/scripts/custom_to_pc2.py。它把 /livox/lidar 转为 /livox/pointcloud2,类型为 sensor_msgs/PointCloud2。

该脚本保留 Header,不进行坐标变换或去畸变;默认输出 XYZ 和 uint8 类型的强度,逐点时间、tag 和 line 默认不输出。当前 FAST-LIO 配置使用原始 CustomMsg。

6.2 标定与同步参数

信息 作用
雷达与 IMU 外参 点云去畸变和激光惯性估计
传感器/估计主体与机体外参 将定位或观测转换到机体参考
时间偏移和同步方式 使不同测量对应到相同的运动时刻

FAST-LIO 配置中的 mapping/extrinsic_T、mapping/extrinsic_R 描述算法使用的雷达—IMU 关系;body 与 base_link 的关系描述估计主体与机体的关系。对应配置见 4.3 和 7.2 节。

6.3 投放装置:控制原理与接口简介

投放装置通过分电板上的 ATmega328P 控制舵机,CH340 提供 USB 转串口,并通过板内走线连接分电板内置的 USB Hub。Hub 的上游由分电板引出的 USB-A 接头接入上位机。官方配置使用 /dev/ttyUSB0,通过 rosserial 将上下位机连接到 ROS。

catapult_driver 把舵机角度封装为仓门开关命令,启动时执行初始化及关门动作:

roslaunch tutorial_catapult catapult_driver.launch

常用接口均为 std_msgs/Empty:

Topic 动作
/servo/front_left/open、/servo/front_left/close 左前仓门开/关
/servo/front_right/open、/servo/front_right/close 右前仓门开/关
/servo/back_left/open、/servo/back_left/close 左后仓门开/关
/servo/back_right/open、/servo/back_right/close 右后仓门开/关
/servo/all/open、/servo/all/close 全部仓门开/关

发送一次左前仓门开启命令:

rostopic pub -1 /servo/front_left/open std_msgs/Empty '{}'

驱动文件为 /home/jetson/catkin_ws/src/tutorials/tutorial_catapult/src/catapult_driver.cpp,启动配置为 /home/jetson/catkin_ws/src/tutorials/tutorial_catapult/launch/catapult_driver.launch。当前开关命令采用 Topic 发布方式,无服务响应或机械到位反馈。

方向、行程、详细驱动配置及下位机烧录步骤见《投放装置控制原理与软件(Jetson Orin Nano/NX)》。


7. 激光定位与建图

7.1 定位链路与数据接口

激光定位与飞控数据链路

FAST-LIO 产生局部运动估计和点云地图;转发节点将位姿适配到 MAVROS 输入;飞控估计器融合外部测量,并通过 MAVROS 输出局部状态。

7.2 MID-360 与 FAST-LIO

当前应用配置位于 /home/jetson/catkin_ws/src/tutorials/tutorial_navigation/config/mid360.yaml。

参数 配置值 含义
common/lid_topic /livox/lidar 点云输入
common/imu_topic /livox/imu IMU 输入
common/time_sync_en false 当前未启用该内部同步选项
common/time_offset_lidar_to_imu 0.0 当前额外时间偏移
preprocess/lidar_type 1 当前 Livox 输入类型
preprocess/blind 0.25 近距离过滤参数,单位 m
mapping/extrinsic_est_en false 当前未开启在线外参估计
mapping/extrinsic_T、extrinsic_R 配置中的平移、旋转 雷达与 IMU 的外参
publish/path_en false 当前默认不发布路径消息
pcd_save/pcd_save_en false 当前默认不保存 PCD

主要输出:

Topic 类型 参考帧/说明
/Odometry nav_msgs/Odometry camera_init → body
/cloud_registered sensor_msgs/PointCloud2 注册到 camera_init 的点云
/cloud_registered_body sensor_msgs/PointCloud2 body 下的点云,取决于发布配置
/path nav_msgs/Path 通过路径发布参数启用

地图保存由 pcd_save/pcd_save_en 和 pcd_save/interval 控制,具体保存位置由所安装 FAST-LIO 版本定义。

样例使用文件:odom_forward_node.cpp 订阅 /Odometry;其上位机位置为 /home/jetson/catkin_ws/src/tutorials/tutorial_navigation/src/odom_forward_node.cpp。

7.3 外部定位接入飞控

/home/jetson/catkin_ws/src/tutorials/tutorial_navigation/src/odom_forward_node.cpp 的接口为:

项目 内容
输入 nav_msgs/Odometry;默认 ROS 相对名称 Odometry
输出 geometry_msgs/PoseStamped;ROS 相对名称 mavros/vision_pose/pose
私有参数 odometry_topic 指定输入 Topic,默认 Odometry
私有参数 frame_id 默认空;非空时替换输出 Header 的帧标签
时间 复制输入 Header
数据 复制 pose.pose

在根命名空间下,输入和输出分别为 /Odometry 与 /mavros/vision_pose/pose。

该节点只转发 Header 和位姿字段,不执行坐标变换,也不转发原始 Odometry 的速度与协方差。输出的原点、朝向和时间语义沿用输入数据,frame_id 参数用于替换帧标签。

飞控通过 MAVROS 接收外部位姿,并按其估计器配置进行融合。融合后的局部位姿从 /mavros/local_position/pose 读取,局部里程计从 /mavros/local_position/odom 读取。