ROS可以说是⽬前机器⼈相关开源社区最流⾏的项⽬之⼀,它是⼀个易⽤且完备的机器⼈开发框架、⽣态乃⾄社区,海量的机器⼈开源项⽬(涵盖感知、规划、控制、定位、SLAM和建图、可视化等⼏乎所有机器⼈领域)均使⽤ROS作为基础。

以⾃动驾驶汽⻋为代表的新的机器⼈应⽤场景对于中间层和开发框架在实时性、可靠性、伸缩性、跨平台可移植等⽅⾯提出了⼤量新的需求,ROS 显然不能满⾜这些需求,ROS2因此产⽣,在经历了若⼲年的迭代后,ROS2项⽬⽬前已经相对完备和稳定,对于我们开发者⽽⾔,是时候拥抱ROS2了

1.为什么转向ROS

ROS⾃2007年发布以来,为机器⼈社区提供了⼀套相对完善的中间层、⼯具、软件乃⾄通⽤的接⼝和标准,可以说,凭借ROS,机器⼈⼯业领域的开发者能够快速开发系统原型并做测试和验证。⾃动驾驶本质上是机器⼈研究的⼀个应⽤领域,在产品原型快速开发的过程中也通常会采⽤ROS。

如果说ROS1为科研和原型开发提供了很好的⽣态的话,那么ROS2就是⽤于实际产品的部署环境的开发架构和相应⼯具链。

2. ROS1的天然缺陷

ROS1项⽬的初衷是为了给科研机器⼈Willow Garage PR2提供⼀个开发环境和相应的⼯具,为了让这套软件在更多的机器⼈上运⾏,ROS为机器⼈开发构建了应⽤层的抽象和通⽤的消息接⼝,最终在机器⼈社区中⼴为使⽤并发展为⽬前最流⾏的机器⼈软件⽣态体系之⼀。然⽽,ROS1研发的初衷就注定了该架构存在以下缺陷:

  • ⽆实时性(real-time)
  • 嵌⼊式设备不友好
  • 对于⽹络通信的重依赖(需要⼤带宽且稳定的⽹络连接)
  • 多⽤于学术应⽤
  • 超⾼的灵活性带来的不规范的编程模式
  • 原⽣的ROS仅⽀持单机器⼈

然⽽如今ROS已在⼤量⼯业领域的应⽤,包括科研机器⼈、⼯业机器⼈、轮式机器⼈、⾃动驾驶汽⻋乃⾄航天⽆⼈驾驶设备,其原来的功能设计已经不能满⾜海量应⽤对于某些性能(如实时性、安全性、嵌⼊式移植等)的需求,ROS2即在这样的背景下被设计和开发。

3. ROS2相较于ROS1的提升和改进

相较于ROS1,ROS2在设计之初就考虑了在产品环境下⾯临的⼀些挑战,具体来说,ROS2采⽤(或者计划采⽤)以下策略以提升其在产品环境的适⽤度:

  • ⽀持多机器⼈
  • 对⼩型嵌⼊式设备和微控制器的⽀持
  • 实时系统:⽀持实时控制,包括进程间和机器间通信的实时性
  • ⽀持⾮理想⽹络环境:在低质量⾼延迟等⽹络环境下系统仍然能够⼯作
  • 对产品环境的⽀持的能力
  • 规范的编程模型以⽀持基于ROS的⼤规模⽬的构建、开发和部署

4. ROS2中的DDS中间层

ROS1的核⼼是⼀个基于master中⼼节点的匿名发布-订阅通信中间层,相⽐之下,ROS2采⽤基于RTSP(Real-Time Publish-Subscribe)协议的DDS作为中间层,DDS(Data-Distribution Service)是⼀种⽤于实时和嵌⼊式系统发布-订阅式通信的⼯业标准,这种点到点的通信模式类似于ROS1的中间层,但是DDS不需要像ROS1那样借由master节点来完成两个节点间通信,这使得系统更加容错和灵活,DDS 被⼴泛应⽤于关键系统中,包括战舰、⼤型基础设施(如⽔电站)、⾦融系统、空间系统、航空系统等场景,这些⽤例也证实了DDS的可靠性。

多个⼚商提供多种DDS实现,⼀般来说DDS的底层通信机制基于UDP协议或者共享内存机制(当然也有 ⼚商提供基于TCP的DDS实现),⽽ROS2⽀持多种DDS实现,⽤⼾可以根据实际情况选择DDS中间层, ⽬前来说ROS2 Foxy完整⽀持以下DDS中间层:

  • eProsima的Fast RTPS(当前ROS2版本默认的DDS实现)
  • RTI的Connext DDS
  • Eclipse Cyclone DDS

了解更多DDS相关背景,可以参考这篇⽂章:

https://design.ros2.org/articles/ros_on_dds.html

ROS2的内部架构:

ROS2的内部接⼝主要包括两个层:

  • rmw (ros middleware interface): 相对底层的接⼝层,直接和DDS交互,C语⾔实现
  • rcl (ros cliend libraries): 对rmw相对⾼层的抽象,c/c++实现

此外上图中还有⼀个ros_to_dds组件,该组件主要为⽤⼾直接访问DDS层提供接⼝。

更多关于rmw和rcl等中间层的实现机制以及ROS msg,DSS idl⽂件和python、c++和C上的类(或者结 构体)的转换可以参考ROS2官⽅⽂档:

https://docs.ros.org/en/foxy/Concepts/About-Internal-Interfaces.html

5. ROS2中的QoS策略

ROS2中引⼊了Quality of Service, QoS(服务质量)的策略⽤于配置节点间通信,进⽽提升了ROS2适应于不同应⽤场景的灵活性。ROS1只⽀持基于TCP的通信,通过配置QoS,ROS2可以表现出TCP的可靠性,也可以表现出UDP那样的⾼实时性。⽤⼾可以通过选择不同的QoS配置⽂件以实现不同的通信表现,QoS配置⽂件为策略的集合,ROS2提供了预设的QoS配置⽂件,如下所⽰:

  • 发布-订阅机制的QoS设定
  • 服务 (Service) 的QoS设定
  • 传感器数据的QoS设定
  • 参数的QoS设定
  • DDS中间层默认的QoS设定

6. ROS2的安装和开发环境准备

ROS2⽬前⼏乎每半年会release⼀个版本,不同的版本会有对应的代号(类似与ROS1中的Kinetic, Melodic和Noetic等版本代号),以下是ROS2的⼀些历史版本:

  • Crystal: 2018年12⽉
  • Dashing: 2019年5⽉底
  • Eloquent: 2019年11⽉
  • Foxy: 2020年6⽉
  • Galactic: 2021年5⽉

我们以最新的Galactic为例,ROS2是跨平台的架构,同时⽀持Linux, MacOS和Windows,但是依据我们在ROS1上开发的经验,我依然推荐⼤家在Linux的Ubuntu发⾏版上从事相应的ROS2 Application开发⼯作。在Ubuntu上,安装ROS2可以通过binary安装或者源代码编译安装,在Ubuntu上,最简单的安装⽅式是通过Debian packages安装(也就是apt安装),我们以此为例,在Ubuntu 20.04上使⽤apt 安装ROS2的Galactic版本。

7. ROS2在Ubuntu下的安装

在你的Ubuntu 20.04系统中,配置ROS2的apt源:

sudo apt update && sudo apt install curl gnupg lsb-release
sudo curl -sSL https://raw.githubusercontent.com/ros/rosdistro/master/ros.key -o /usr/s
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/ros-archive-k

更新apt索引:

sudo apt update

使⽤apt安装完整的ROS2:

sudo apt install ros-galactic-desktop

安装完成后,在~/.bashrc⽂件中添加ros2的环境变量:

echo "source /opt/ros/galactic/setup.bash" >> ~/.bashrc

简单地验证⼀下安装情况,新建⼀个terminal,运⾏demo的talker:

ros2 run demo_nodes_cpp talker

在另⼀个terminal中,运⾏listener:

ros2 run demo_nodes_py listener

可以看到,⼀个类似于ROS1的Publisher-Subscriber通信demo就运⾏起来了:

不难发现,ROS2并不需要像ROS1那样启动roscore(即master节点),ROS2这种去中⼼化的策略能让其适应更多⼯业应⽤和产品级应⽤场景的需求。

NOTE:ROS1和ROS2可以并存于同⼀台电脑,你只需要source不同的setup.bash即可完成环境的选择。

8. ROS2的基本工具和命令

和ROS1⼀样,ROS2也提供了⼤量的开发调试⼯具,如Rviz, Rqt等⼯具均已经可以在ROS2中使⽤,运行rqt,可以看到我们刚刚运⾏的两个demo节点:

运⾏ rviz2 可以启动ROS2环境下的rviz软件。

同时,ROS2也提供类似于ROS1的命令⾏指令,指令和ROS1略有区别:

  • ros2 node : 输出node相关信息
  • ros2 topic : topic相关指令,包括list,hz,echo等
  • ros2 service :service相关指令,如list,call,type等
  • ros2 bag : rosbag相关指令, 录包,播包,打印数据包信息等
  • ros2 bag :package相关指令
  • ros2 param: 参数相关
  • ros2 launch:运⾏launch⽂件
  • ros2 run:运⾏单个节点

完整的ros2命令如下所⽰:

绝⼤多数指令基本是将ros1中的rosxxxx拆分成了ros2 xxxx。

参考文档:

https://docs.ros.org/en/galactic/index.html

作者简介

申泽邦,奔驰高级自动驾驶工程师,Google Developer Expert(机器学习方向),兰州大学自动驾驶团队创始人,CSDN博客专家,《无人驾驶原理与实践》书籍作者。

拥抱ROS2系列:ROS2概述和实践入门(一)相关推荐

  1. 拥抱ROS2系列:ROS2概述和实践入门

    来源丨深蓝AI ROS可以说是⽬前机器⼈相关开源社区最流⾏的项⽬之⼀,它是⼀个易⽤且完备的机器⼈开发框架.⽣态乃⾄社区,海量的机器⼈开源项⽬(涵盖感知.规划.控制.定位.SLAM和建图.可视化等⼏乎所 ...

  2. ROS2概述和实践入门

    ROS可以说是⽬前机器⼈相关开源社区最流⾏的项⽬之⼀,它是⼀个易⽤且完备的机器⼈开发框架.⽣态乃⾄社区,海量的机器⼈开源项⽬(涵盖感知.规划.控制.定位.SLAM和建图.可视化等⼏乎所有机器⼈领域)均 ...

  3. 无人驾驶汽车系统入门(三十二)——ROS2概述和实践入门(一)

    ROS可以说是目前机器人相关开源社区最流行的项目之一,它是一个易用且完备的机器人开发框架.生态乃至社区,海量的机器人开源项目(涵盖感知.规划.控制.定位.SLAM和建图.可视化等几乎所有机器人领域)均 ...

  4. envi 文件 生成mat_JVM 内存分析工具 MAT 的深度讲解与实践——入门篇

    1. MAT 工具简介 MAT(全名:Memory Analyzer Tool),是一款快速便捷且功能强大丰富的 JVM 堆内存离线分析工具.其通过展现 JVM 异常时所记录的运行时堆转储快照(Hea ...

  5. ABP(现代ASP.NET样板开发框架)系列之2、ABP入门教程

    点这里进入ABP系列文章总目录 基于DDD的现代ASP.NET开发框架--ABP系列之2.ABP入门教程 ABP是"ASP.NET Boilerplate Project (ASP.NET样 ...

  6. OceanBase数据库实践入门——性能测试建议

    概述 本文主要分享针对想压测OceanBase时需要了解的一些技术原理.这些建议可以帮助用户对OceanBase做一些调优,再结合测试程序快速找到适合业务的最佳性能.由于OceanBase自身参数很多 ...

  7. OpenAI API及ChatGPT系列教程1:快速入门

    系列文章目录: OpenAI API及ChatGPT系列教程1:快速入门 OpenAI API及ChatGPT系列教程2:使用手册 OpenAI API及ChatGPT系列教程3:API参考(Pyth ...

  8. Python:Excel自动化实践入门篇 甲【留言点赞领图书门票】

    *以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s?__biz=MzUxMTgxMzExNQ==&mid=22 ...

  9. 美国兰德公司《未来战争2030》(The Future of Warfare in 2030)系列研究报告概述(下)

    2020年5月11日,美国兰德公司官网发布<未来战争2030>(The Future of Warfare in 2030)系列研究报告. 该系列研究报告包括7份研究报告:分别为一份总报告 ...

最新文章

  1. 20、30、40岁年轻人,2020年的建议 转载
  2. 使用TensorRT加速yolo3
  3. Win7 配置Android开发环境
  4. boost asio
  5. colab中安装lightgbm的GPU版本
  6. 基于比率的路由到旧版和现代应用程序–通过Spring Cloud的Netflix Zuul
  7. CentOS升级Python到2.7版本
  8. 马斯克提出以430亿收购推特 推特考虑用毒丸来阻止其增持股份
  9. 实验室服务器安装虚拟机,如何使用VM虚拟机创建私有网络试验室
  10. MT6580 Android8.1调试移植费恩格尔指纹驱动
  11. HTC vive 虚实融合
  12. SoapUI接口测试——全流程转载
  13. linux刷新解析,如何在Linux(和FreeBSD)上刷新DNS解析器缓存
  14. 光敏传感器实验报告_光敏传感器光电特性研究实验报告.docx
  15. java项目 ppt,Java项目报告ppt
  16. SMOTE算法代码实现
  17. 【windows服务器使用cwRsync实时同步】
  18. 中国移动发布物联网操作系统 OneOS
  19. 【Python自学笔记】学习Python控制键盘鼠标的库 pyautogui
  20. ATLAS什么时候增加服务器,Atlas新手怎么选服务器_Atlas新手服务器选择技巧_快吧单机游戏...

热门文章

  1. html显示mysql图片路径_MySQL MySQL 直接存储图片并在 html 页面中展示,点击下载 _好机友...
  2. vue 图形化设计工具_Vue: Vue-CLI3.0 创建项目
  3. python返回菜单_返回上一菜单
  4. android实现欢迎启动界面
  5. php检查运算是否错误,用PHP中的@运算符抑制错误
  6. 计算机硬件外围设备介绍,天津2012年自考“计算机外围设备使用与维护”课程考试大纲...
  7. matlab和python的语言_四大机器学习编程语言对比:R、Python、MATLAB、Octave
  8. 二叉搜索树的中序遍历为 递增序列_Go 刷 Leetcode 系列:恢复二叉搜索树
  9. poj1753_flipgame_枚举
  10. 百度前端学院参考答案:第二十五天到第二十七天 倒数开始 滴答滴 滴答滴(2)...