超维小课堂 | 2、ROS、MAVROS和MAVLINK的关联和区别

ROS、MAVROS和MAVLINK的关联和区别

一、系统结构图

在这里插入图片描述

二、ROS机器人操作系统

国际最通用的机器人操作系统,将不同硬件的操作进行封装,通过简单的话题发布和订阅,可以让算法开发者不必考虑不同的硬件平台,以及各种硬件之间的配合,仅需要用自己的熟悉的Python或者C++语言编写算法,ROS负责联通算法实施和硬件驱动和模拟仿真。通俗解释,ROS是一个独立的面向机器人的操作系统,说是操作系统,ros 只是 linux 系统上的一大堆工具包而已,所以 ros 继承了 linux 的所有特性Linux 上可以做的事情 ros 都可以做。

三、MAVLink:Micro Air Vehicle Link

即微型飞行器连接通信协议,于2009年初由Lorenz Meier首次发布。Mavlink协议是在串口通讯基础上的一种更高层的开源通讯协议。MAVLink是一种非常轻量级的通信协议,主要用于与无人机(以及板载无人机组件之间)进行通信。MAVlink由17个字节组成,包括消息ID、目标ID和数据。其中消息ID显示是什么数据,可以在messageID命令集中看到消息ID。这使得MAVLink能够从同一个通道传输信息,从多个无人机获取信息。另外,消息也可以通过无线信号进行传输。

四、MAVROS是ROS的一个软件包

该功能包允许在运行ROS的计算机、支持MAVlink的飞控板以及支持MAVlink的地面站之间通讯。通俗的理解为,mavros 又是对 ros 的更高层次的封装,mavros 向 ros 添加了针对与 mavlink 协议的各种消息和服务,相当于我们可以更方便的解析mavlink 协议。如果我们不使用 mavros,那么我们就必须自己写代码对 mavlink 进行解析,并且设计自己的代码框架,而且不能使用 ros 的很多工具库。并且现在很多第三方工具(比如视觉识别),都完整的支持 ros,所以使用 mavros,会给我们的开发带来很多好处。
在这里插入图片描述

总结:mavros作为连接ROS和PX4的桥梁,也是我们需要重点学习的地方。

### 如何在Ubuntu 20.04上安装ROS2 Mavros #### 准备工作 确保系统已更新至最新状态并配置好ROS2环境。对于Python版本的选择,在某些特定情况下可能需要指定Python2.7作为默认解释器,但这主要针对旧版ROS而非ROS2[^1]。 #### 安装必要的依赖包 为了使Mavros能够正常运行,需先安装一些基础组件。考虑到不同发行版之间的差异,这里提供适用于Noetic的命令;对于ROS2而言,则应通过`apt`获取对应的ROS2软件包而不是Noetic版本: ```bash sudo apt update && sudo apt upgrade -y sudo apt install ros-foxy-mavros* -y ``` 上述指令会自动处理大部分依赖关系,但对于某些特殊情况仍可能存在额外的手动操作需求[^2]。 #### 配置MAVLink消息定义文件 MAVlink协议是无人机通信的重要组成部分之一,而Mavros正是基于此实现与飞行控制器间的交互。因此,下载最新的MAVLink库也是必不可少的一环: ```bash cd ~/dev_ws/src/ git clone https://github.com/mavlink/mavlink.git mavlink/message_definitions/v1.0 ``` 请注意路径选择应当依据个人实际开发目录结构作出调整。 #### 编译工作空间 完成以上步骤之后,进入到Catkin workspace根目录下执行编译过程: ```bash colcon build --symlink-install source ~/.bashrc ``` 这一步骤将构建所有源码并将生成的结果链接到适当位置以便于后续调用。 #### 测试安装成果 最后可以通过启动简单的节点来验证整个流程是否成功: ```python import rclpy from geometry_msgs.msg import Twist def main(args=None): rclpy.init(args=args) node = rclpy.create_node('test_mavros') twist_pub = node.create_publisher(Twist, '/mavros/setpoint_velocity/cmd_vel_unstamped', 10) msg = Twist() while True: twist_pub.publish(msg) rclpy.spin_once(node) if __name__ == '__main__': main() ``` 这段代码创建了一个发布速度控制指令给Mavros的主题订阅者实例。当然这只是最基础的功能测试示例而已。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

流浪者1015

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值