MAVROS 简介
MAVROS 是连接机器人操作系统(ROS)与飞控系统的关键中间件,通过标准化通信协议实现 ROS 节点与无人机的交互。它基于 MAVLink 轻量级通信协议,为 ROS 生态提供了与飞控(如 Pixhawk、ArduPilot、PX4 等)通信的统一接口,使开发者无需深入理解底层飞控协议,即可直接调用 ROS 的丰富工具链快速搭建无人机任务。
MAVROS 的核心功能包括双向数据传输:一方面,它订阅飞控的传感器数据(如 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 是一个开源的地理计算库,专门用于处理地球表面的高精度地理坐标计算。MAVROS 在处理无人机导航和地理空间数据时需要依赖 GeographicLib 提供的高精度地理计算功能,例如经纬度与局部坐标系的转换、大地水准面高度校正等。因此安装时还需运行脚本初始化数据集:
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 坐标系,通常由 MAVROS 发布的 map 坐标系表示。其坐标原点是 MAVROS 收到里程计信息时飞控所在的位置,规定 x 轴朝东、y 轴朝北、z 轴朝天。
- 飞控端:PX4/ArduPilot 等内部使用 NED 坐标系。
- body 系:
- ROS 端:采用 FLU 坐标系(前左上),通常由 MAVROS 发布的 base_link 坐标系表示。
- 飞控端:采用 FRD 坐标系(前右下)。
实际调试中,map 系和 Gazebo 里的坐标系方向通常保持一致。机身前方定义为东,即 map 系的 x 轴正方向,机身前进方向同时为 base_link 系的 x 轴正方向。从方向来看,ROS 端的 map 系和 base_link 系是一致的。

常用话题
/mavros/state
订阅 MAVROS 的状态数据,如连接状态、是否解锁、当前无人机模式等。


