ROS 2机器人开发入门:从ROS到ROS 2的技术演进
ROS 2机器人开发入门:从ROS到ROS 2的技术演进
机器人操作系统(ROS)早已成为开发者与物理世界对话的桥梁,而ROS2以其更强的实时性、安全保密性、跨平台特性和去中心化架构,正在重新定义机器人开发的边界。本系列笔记旨在记录学习ROS 2的过程,读者可借鉴参考,有误请指正。当你的第一个机器人突然开始“薛定谔式运动”时,那不是故障,而是再用独特的方式与你say hello。
一、ROS 简单介绍
【Robot Operating System】:本身并不是操作系统,而是可以安装在现有(Linux、Windows、Mac)上的软件库和工具集。
1.ROS设计目的
简化在各种机器人平台上创建复杂而强大的机器人行为任务。 例如轮式移动机器人,它的行为架构就可依据ROS来分为感知+决策+控制三大板块,从而使得机器人行为变得更加清晰明了。不同的板块采用不同技术原理,大大简化复杂的行为任务。依此假设而言,就可假定设计如下:
- 感知:激光雷达、深度相机、IMU、里程计、碰撞感知
- 决策:建图、路径规划算法、定位算法
- 控制:轮子驱动
2. ROS架构
ROS为简化机器人开发,设计了一整套通信机制(话题、服务、参数、动作),实现了将各个组件连接起来。 ROS Master:主节点,若主节点挂掉,会造成整个系统通信异常。
3.ROS存在的问题
- 不稳定
- 通信基于TCP实现,实时性差、系统开销大
- 对Python3支持不友好,需要重新编译
- 消息机制不兼容
- 没有加密机制、安全性不高
二、ROS 2(ROS Pro版)
1.ROS 2简要介绍
ROS2是在ROS基础上设计开发的第二代机器人操作系统, ROS2继承了ROS,又带来了很多新的功能。 更大程度上可以简化机器人开发任务,加速机器人落地。
ROS2新概念:
- 可用Python编写的Launch文件
- 多机器人协同通信支持
- 支持安全加密通信
- 同一个进程支持多个节点
- 支持Qos服务质量
- 支持节点生命周期管理
- 高效的进程间通信
2.ROS 2与ROS架构对比
- OS层
从原来的只支持linux平台变成了支持windows、mac甚至是嵌入式RTOS平台
- 中间层
ROS 1 中通信依赖于底层的TCP和UDP协议,而ROS 2不造通信的轮子,通信直接更换为更加复杂也更为完善的数据分发服务(Data Distribution Service,DDS)系统通信机制,使得ROS 2的实时性、可靠性和连续性上都有了增强。
- 应用层
在ROS 1中有且仅有一个Master节点,所有节点都需要听它指挥,如果Master节点突然罢工,那么整个ROS系统都会面临奔溃。为了增强系统的健壮性和可扩展性,ROS 2创新性的摒弃了这一设计,转而采用Discovery自发现机制,允许节点自主寻找并建立稳定的通信连接,从而避免单点故障的风险。
3.DDS通信协议
DDS是物联网中广泛应用的一种系统通信机制,类似于大家常听说的5G通信,DDS是一个国际标准,能够实现该标准的软件系统不是唯一的,所以可以选择多个厂家不同的DDS机制,每家的性能不同,使用的场景也不同。
4.ROS 2 版本
5.ROS 2保留概念
ROS 2保留了以下ROS 1中的概念,便于开发者从ROS 1迁移到ROS 2:
- 工作空间(Workspace):放置各种开发文件
- 功能包(Package):功能源码的聚集地
- 节点(Node):是代码编译生成的一个可执行文件
- 话题(Topic):节点间传递数据的桥梁
- 服务(Service):用于某些机器人功能和参数的配置
- 通信接口(Interface):数据传递的标准结构
- 参数(Parameter):可定义或查询机器人的配置参数
- 动作(Action):完整行为的流程管理
- 分布式通信(Distributed Communication):多计算平台的任务分配
- DDS(Data Distribution Service):机器人的神经网络