0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看威廉希尔官方网站 视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

ROS2概述和实践入门

3D视觉工坊 来源:深蓝AI 作者:深蓝AI 2022-10-26 11:11 次阅读

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

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

01为什么转向ROS

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

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

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

·⽆实时性(real-time)

·嵌⼊式设备不友好

·对于⽹络通信的重依赖(需要⼤带宽且稳定的⽹络连接)

·多⽤于学术应⽤

·超⾼的灵活性带来的不规范的编程模式

·原⽣的ROS仅⽀持单机器⼈

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

03ROS2相较于ROS1的提升和改进

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

·⽀持多机器⼈

·对⼩型嵌⼊式设备和微控制器的⽀持

·实时系统:⽀持实时控制,包括进程间和机器间通信的实时性

·⽀持⾮理想⽹络环境:在低质量⾼延迟等⽹络环境下系统仍然能够⼯作

·对产品环境的⽀持的能力

·规范的编程模型以⽀持基于ROS的⼤规模⽬的构建、开发和部署

04ROS2中的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的内部架构:

777b2638-54bb-11ed-a3b6-dac502259ad0.png

点击可查看大图

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

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

·发布-订阅机制的QoS设定

·服务 (Service) 的QoS设定

·传感器数据的QoS设定

·参数的QoS设定

·DDS中间层默认的QoS设定

06ROS2的安装和开发环境准备

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版本。

07ROS2在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就运⾏起来了:

77a5cb40-54bb-11ed-a3b6-dac502259ad0.png

点击可查看大图

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

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

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

77c29428-54bb-11ed-a3b6-dac502259ad0.png

点击可查看大图

运⾏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命令如下所⽰:

77dcd36a-54bb-11ed-a3b6-dac502259ad0.png

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

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 机器人
    +关注

    关注

    209

    文章

    27497

    浏览量

    202669
  • 嵌人式
    +关注

    关注

    0

    文章

    10

    浏览量

    7491
  • ROS
    ROS
    +关注

    关注

    1

    文章

    275

    浏览量

    16803

原文标题:拥抱ROS2系列:ROS2概述和实践入门

文章出处:【微信号:3D视觉工坊,微信公众号:3D视觉工坊】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    ZMC900E控制器之ROS2环境安装指南

    ZMC900E是致远电子研发的最新一代高性能EtherCAT控制器,支持ROS2系统,兼备强大功能和实时性,为工业应用带来新的可能。本文将详述ROS2特点和安装,助力用户在机器人上的二次开发
    的头像 发表于 04-29 08:24 265次阅读
    ZMC900E控制器之<b class='flag-5'>ROS2</b>环境安装指南

    系统镜像Ubuntu_ROS2ROS2是什么意思,带有ROS2开发环境吗?

    请问一下,百度文库资料里面,下图所示的系统镜像Ubuntu_ROS2ROS2是什么意思,带有ROS2开发环境吗?与前面4GB版本的镜像有什么区别?
    发表于 03-01 23:06

    移动机器人与ROS操作系统原理与应用

    ROS1不同的是,ROS2诞生的目的就是为了让更多机器人使用,所以在设计上更加符合威廉希尔官方网站 的发展方向,也运用了很多最近的威廉希尔官方网站 框架。
    发表于 01-02 12:28 356次阅读
    移动机器人与<b class='flag-5'>ROS</b>操作系统原理与应用

    【米尔-TIAM62开发板-接替335x-试用评测】(一)基于TIAM62开发板的ROS2交叉编译

    【米尔-TIAM62开发板-接替335x-试用评测】(一)ROS2交叉编译 1. 前言 该测试报告详细介绍了TIAM62开发板的交叉编译环境、ROS2编译的步骤以及遇到的问题和解决方案、简单的测试
    发表于 12-05 20:58

    在TogetherROS中如何安装ROS2功能包

    安装ROS2功能包 接下来,还有一个很重要的配置,那就是安装ROS2功能包,我们说TogetherROS是基于ROS2深度优化的,很多模块还是会复用ROS2中的功能,所有
    的头像 发表于 12-01 16:02 648次阅读
    在TogetherROS中如何安装<b class='flag-5'>ROS2</b>功能包

    ROS2中自带例程测试

    如果你是一个ROS2的开发者,可能对刚才我们使用的ROS2命令比较熟悉,这时你可能也会产生一个问题:我们之前也安装了ROS2系统,那ROS2的原生功能还可以正常运行么? 我们再来试一试
    的头像 发表于 11-28 16:29 565次阅读
    <b class='flag-5'>ROS2</b>中自带例程测试

    ros1和ros2的通信模型

    数据 ROS2: 参与者(DomainParticipant):一个参与者Participant就是一个容器,对应于一个使用DDS的用户,任何DDS的用户都必须通过Participant来访问全局
    的头像 发表于 11-27 11:26 504次阅读
    <b class='flag-5'>ros</b>1和<b class='flag-5'>ros2</b>的通信模型

    ros的基本概念是什么

    基本概念: ROS是一个用于在不同进程间匿名的发布、订阅、传递信息的中间件。 ROS2系统的核心部分是ROS网络(ROS Graph)。 ROS
    的头像 发表于 11-27 11:21 1348次阅读

    DDS在ROS2中的应用

    DDS在ROS2中的应用 DDS在ROS2系统中的位置至关重要,所有上层建设都建立在DDS之上。在这个ROS2的架构图中,蓝色和红色部分就是DDS。 刚才我们也提到,DDS是一种通信的标准,就像4G
    的头像 发表于 11-24 17:54 596次阅读
    DDS在<b class='flag-5'>ROS2</b>中的应用

    ROS中的TF该如何使用

    -py ros-humble-tf2-tools** sudo pip3 install transforms3d 具体运行的效果如何?我们来试一试。 ** ros2 launch turtle_tf2_py turtle_tf
    的头像 发表于 11-22 17:24 606次阅读
    <b class='flag-5'>ROS</b>中的TF该如何使用

    【KV260视觉入门套件试用体验】KV260的ROS2加速相关内容

    目前在使用ros2的humble版本,但使用中感受到的编译速度慢,node启动速度慢等体会是比较影响ROS2的普及速度的,KV260因为内部存在FPGA模块,可以实现硬件加速(accelerated
    发表于 10-08 23:42

    【KV260视觉入门套件试用体验】KRS编译与安装

    KRS编译与安装 1. KRS是什么 KRS(Kria Robotics Stack)是Xilinx Kira基于ROS2二次开发的机器人开发套件,github Xilinx/KRS 仓库地址
    发表于 09-17 00:13

    【昉·星光 2 高性能RISC-V单板计算机体验】五:在 VisionFive2 上体验 ROS2 humble

    在 VisionFive2 上体验 ROS2 humble 一、系统准备 参考 在 VisionFive2 上安装 ROS2 humble 安装并配置
    发表于 09-04 04:59

    【昉·星光 2 高性能RISC-V单板计算机体验】四:在 VisionFive2 上安装 ROS2 humble

    在 VisionFive2 上安装 ROS2 humble ROS(Robot Operating System)是一种用于编写机器人软件的灵活框架。它是一个工具(tools)、库
    发表于 09-04 03:33

    【KV260视觉入门套件试用体验】开箱和初次开机

    感谢电子发烧友给的机会,感谢安富利提供的开发板.这次申请KV260主要是最近在做ROS2相关的工作,ROS2设计比较完善,包组织方式十分便于开发,但默认的编译和运行工具都十分卡顿,而KV260有
    发表于 08-23 23:07