MAVROS 简介
MAVROS 是连接机器人操作系统(ROS)与飞控系统的关键中间件,通过标准化的 MAVLink 通信协议实现 ROS 节点与无人机的交互。它为 ROS 生态提供了与 Pixhawk、ArduPilot、PX4 等飞控通信的统一接口,开发者无需深入底层协议即可调用 RViz 可视化、Gazebo 仿真及导航栈等工具。
其核心功能包括双向数据传输:订阅飞控传感器数据(IMU、GPS、电池状态)并发布至 ROS 话题;同时接收 ROS 指令转换为 MAVLink 消息下发执行。此外,MAVROS 支持串口、UDP、TCP 等多种通信接口,并允许动态读写飞控参数。

MAVROS 安装
在 Ubuntu 环境下,可通过以下命令安装 MAVROS 及其扩展包:
sudo apt-get install ros-noetic-mavros
sudo apt install ros-noetic-mavros-extras
GeographicLib 是一个开源地理计算库,用于处理地球表面高精度坐标转换(如 WGS84 到 ENU)。MAVROS 依赖此库进行地理空间数据处理,因此需要单独安装数据集脚本:
wget https://raw.githubusercontent.com/mavlink/mavros/master/mavros/scripts/install_geographiclib_datasets.sh
sudo chmod +x ./install_geographiclib_datasets.sh
sudo ./install_geographiclib_datasets.sh
MAVROS 基础知识
坐标系说明
MAVROS 涉及三种主要坐标系,理解它们之间的转换至关重要:
- Global 系:通常由 GPS 定义,如经纬高坐标系(WGS84)。
- Local 系:
- ROS 端采用 ENU 坐标系(东 - 北 - 天),原点为收到里程计信息时飞控位置,X 轴朝东,Y 轴朝北,Z 轴朝天。
- 飞控端(如 PX4/ArduPilot)内部使用 NED 坐标系(北 - 东 - 地)。
- Body 系:
- ROS 端采用 FLU 坐标系(前 - 左 - 上),对应
base_link。 - 飞控端采用 FRD 坐标系(前 - 右 - 下)。
- ROS 端采用 FLU 坐标系(前 - 左 - 上),对应
具体关系如图所示,以 Gazebo 环境为例,机身前方定义为东,此时 ROS 端的 map 系和 base_link 系方向一致。

常用话题
/mavros/state
订阅无人机状态,包含连接、解锁、模式等信息。
connected:物理连接状态。armed:电机是否解锁。- :飞行模式(OFFBOARD 为板外控制模式)。


