6.5 MAVROS2
- 推荐优先使用uXRCE-DDS实现ROS2与PX4通信。
- 若代码迁移困难,仍可按照以下教程在RDK X5 Module安装MAVROS2。
MAVROS
用于 ROS2 的 MAVLink 可扩展通信节点。
ROS API 文档已移至 wiki.ros.org 。
特征
- 通过串行端口、UDP 或 TCP 与自动驾驶仪通信(例如 PX4 Pro 或 ArduPilot )
- 地面控制站的内部代理(串行、UDP、TCP)
- ROS-MAVLink 翻译插件系统
- 参数操作工具
- 航点操作工具
- PX4Flow 支持(由 mavros_extras 提供)
- OFFBOARD 模式支持
- 地理坐标转换。
限制
仅适用于 Linux。
此软件包依赖于 ros-*-mavlink 构建,该构建来自 mavlink-gbp-release 。它位于 ROS 软件包索引中,通常每月更新。
连接地址
连接由 URL 定义,您可以使用 FCU 和 GCS 支持的任何类型。
支持的架构:
- 序列号:
/path/to/serial/device[:baudrate] - 序列号:
serial:///path/to/serial/device[:baudrate][?ids=sysid,compid] - 具有硬件流控制的串行:
serial-hwfc:///path/to/serial/device[:baudrate][?ids=sysid,compid] - UDP:
udp://[bind_host][:port]@[remote_host[:port]][/?ids=sysid,compid] - UDP 广播直到 GCS 发现:
udp-b://[bind_host][:port]@[:port][/?ids=sysid,compid] - UDP广播(永久):
udp-pb://[bind_host][:port]@[:port][/?ids=sysid,compid] - TCP 客户端:
tcp://[server_host][:port][/?ids=sysid,compid] - TCP 服务器:
tcp-l://[bind_host][:port][/?ids=sysid,compid]
说明:
- URL 中的 ID 会覆盖 system_id 和 component_id 参数给出的值。
- bind_host - 默认
0.0.0.0- 即 IP4 ANY - UDP 默认端口:14555 @ 14550
- 每次绑定端口上的传入数据包都会更新 UDP 远程地址。
- TCP默认端口:5760
坐标系
MAVROS 可以将 FCU 中使用的航空航天 NED 坐标系转换为 ROS ENU 坐标系,反之亦然。对于与机身相关的数据,我们只需绕 ROLL (X) 轴旋转 180°。对于本地数据,我们绕 ROLL (X) 轴旋转 180°,绕 YAW (Z) 轴旋转 90°。有关更多信息,请参阅问题 #473 中的文档。
所有转换分别在 src/lib/ftf_frame_conversions.cpp 和中处理并在 和中 src/lib/ftf_quaternion_utils.cpp 测试 。 test/test_frame_conversions.cpp test/test_quaternion_utils.cpp
相关问题: #49(过时) 、 #216(过时) 、 #317(过时) 、 #319(过时) 、 #321(过时) 、 #473 。文档: 坐标系转换 、 Mavlink 坐标系 。
MAVROS 还允许通过GeographicLib 转换大地坐标和地心坐标, 因为:
geographic_msgs并NatSatFix.msg要求 LLA 字段必须使用 WGS-84 基准,这意味着高度应为 WGS-84 椭球面以上的高度。为此,已提供从大地水准面以上高度(AMSL,考虑 egm96 大地水准面模型)到 WGS-84 椭球面以上高度的转换,反之亦然,此转换已在多个插件中使用;- 根据 ROS REP 105,
earth坐标系应在 ECEF(地心、地固)局部坐标系中传播。为此,需要使用 GeographicLib 的功能,以便将大地坐标转换为地心坐标。 - 从 GPS 坐标到本地地心坐标的转换需要在坐标系上定义一个本地原点
map(ECEF),并计算与该原点的偏移量(ENU)。所有转换均由 GeographicLib 类和方法支持,并在global_position插件中实现。
组件节点
另请参阅: https://docs.ros.org/en/foxy/Tutorials/Composition.html
mavros::router::Router
这是支持与飞行控制单元 (FCU)、地面控制站 (GCS) 和无人机系统 (UAS) 节点连接所需的路由器节点。路由器允许您在不重启节点的情况下动态添加/删除端点。
mavros::uas::UAS
此节点是一个插件容器,用于管理所有协议插件。每个插件都是此节点的一个子节点。
程序
mavros_node -- all-in-one container
这是一个预配置的组件节点容器,提供与 ROS1 mavros_node 类似的参数。该容器加载路由器、UAS 并配置它们协同工作(设置 uas_link 等)。
主节点。允许通过设置空 URL 来禁用 GCS 代理。
ros2 run mavros mavros_node --ros-args --params-file params.yaml
启动文件
XXX 待办事项 !#1564
提供的启动文件可用于常见的 FCU,特别是 Pixhawk :
- px4.launch—— 用于 PX4 自动驾驶仪(用于垂直起降、多旋翼飞行器和飞机)
- apm.launch—— 用于 APM 飞行堆栈(例如,所有版本的 ArduPlane、ArduCopter 等)
例子:
roslaunch mavros px4.launch
roslaunch mavros apm.launch fcu_url:=tcp://localhost gcs_url:=udp://@
安装
必需的依赖项
大多数 ROS 依赖项都由 支持和安装 rosdep ,包括 Eigen 和 Boost 等外部库。
GeographicLib 可以通过以下方式安装 apt-get ,它已包含在 MAVROS 软件包的 rosdep 中。也可以从 src 编译并安装,但建议使用与安装目录相同的正确安装目录 apt-get ,以确保 FindGeographicLib.cmake 找到所需的共享库( libGeographic.so )。
由于 GeographicLib 需要某些数据集 (主要是大地水准面数据集)才能完成某些计算,因此用户需要使用 手动安装这些数据集 geographiclib-tools ,Debian 系统中可以通过 进行安装 apt-get 。为了加快安装速度,只需 运行“mavros/scripts”文件夹中的脚本即可。 install_geographiclib_datasets.sh 即可。
请注意,如果您使用的是旧版 MAVROS 发行版源安装,并且想要更新到新版本,请记住 rosdep update 在运行 之前 rosdep install --from-paths ${ROS_WORKSPACE} --ignore-src --rosdistro=${ROSDISTRO} ,使用 ROS_WORKSPACE catkin 工作区的 src 文件夹运行 。这将允许 rosdep 在发布 时更新列表并安装所需的依赖项 rosdep install 。
‼️ 为了遵循 ROS msg API,大地水准面数据集是必需的,以便进行高程转换。如果没有可用的数据集,系统将关闭 mavros_node ‼️
❗运行 install_geographiclib_datasets.sh 安装所有数据集或 geographiclib-datasets-download egm96_5 ( Debian 7 , Ubuntu 14.04,14.10 ) , ( Debian 8 , Fedora 22 , Ubuntu 15.04或更高 版本 )仅安装大地水准面数据集:heavy_exclamation_mark: geographiclib-get-geoids egm96-5
二进制安装(deb)
ROS 仓库包含适用于 Ubuntu x86、amd64 (x86_64) 和 armhf (ARMv7) 的二进制软件包。Kinetic 还支持 Debian Jessie amd64 和 arm64 (ARMv8)。
只需用于 apt 安装:
sudo apt install ros-foxy-mavros
然后通过运行 install_geographiclib_datasets.sh 脚本安装 GeographicLib 数据集:
ros2 run mavros install_geographiclib_datasets.sh
# Alternative:
wget https://raw.githubusercontent.com/mavlink/mavros/ros2/mavros/scripts/install_geographiclib_datasets.sh
./install_geographiclib_datasets.sh
源码安装
使用 vcs 实用程序检索源并 colcon 使用工具进行构建。
注意:源安装说明适用于 ROS Foxy 版本。
sudo apt install -y python3-vcstool python3-rosinstall-generator python3-osrf-pycommon
# 1. Create the workspace: unneeded if you already has workspace
mkdir -p ~/ros2_ws/src
cd ~/ros2_ws
# 2. Install MAVLink
# we use the Kinetic reference for all ROS distros as it's not distro-specific and up to date
rosinstall_generator --format repos mavlink | tee /tmp/mavlink.repos
# 3. Install MAVROS: get source (upstream - released)
rosinstall_generator --format repos --upstream mavros | tee -a /tmp/mavros.repos
# alternative: latest source
# rosinstall_generator --format repos --upstream-development mavros | tee -a /tmp/mavros.repos
# For fetching all the dependencies into your ros2_ws, just add '--deps' to the above scripts
# ex: rosinstall_generator --format repos --upstream mavros --deps | tee -a /tmp/mavros.repos
# 4. Create workspace & deps
vcs import src < /tmp/mavlink.repos
vcs import src < /tmp/mavros.repos
rosdep install --from-paths src --ignore-src -y
# 5. Install GeographicLib datasets:
./src/mavros/mavros/scripts/install_geographiclib_datasets.sh
# 6. Build source
colcon build
# 7. Make sure that you use setup.bash or setup.zsh from workspace.
# Else ros2 run can't find nodes from this workspace.
source install/setup.bash
构建错误 。如果出现缺失错误 mavlink* ,则需要更新 mavlink 包。您可以从 ros-shadow-fixed (二进制安装)更新,或重做脚本步骤 2 和 4。
注意 :自 MAVLink 2.0 (0.18) 合并以来,所有方言均由同一二进制文件支持。遗憾的是,v1.0 消息 ID 的重叠尚未完全处理,因此第一个加载的消息禁止进一步更改。加载顺序始终为:
- 常见的
- ardupilotmega
- 按字母顺序排列的列表
- ...
注意 : MAVLINK_DIALECT 不再使用。
故障排除
错误:serial0:接收:文件结束
该问题应该在 mavros v0.23.2 中得到解决,它被发现是 Boost.ASIO 错误,应该在版本 > v1.12.0(>Boost 1.66)中修复。
贡献
请参阅 CONTRIBUTING.md 。
词汇表
- GCS :地面控制站
- FCU — 飞行控制单元(又名 FC )
- OBC — 车载计算机(您的 odroid 或 raspberry)
链接
- MAVLink—— 无人机的通信协议,由飞行控制器、地面控制站和外围设备使用
- mavlink_ros—— 原始 ROS 节点(少量消息,无代理)
- Pixhawk—— 无人机硬件的开放标准
- PX4 AutoPilot ——支持大多数车辆类型和强化/测试 MAVROS 支持的飞行控制器
- ArduPilot—— 经过测试的自动驾驶仪 APM:Plane(默认命令集)
- QGroundControl ——MAVLink 自动驾驶仪的地面控制站,已测试支持 Android、iOS、Mac OS、Linux 和 Windows
- mavros_extras -- mavros 的额外插件和节点
更多信息
请参考mavros官方链接 https://github.com/mavlink/mavros/blob/ros2/mavros/README.md#installation