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。

审核编辑 :李倩

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

    关注

    211

    文章

    28632

    浏览量

    208209
  • 嵌人式
    +关注

    关注

    0

    文章

    10

    浏览量

    7522
  • ROS
    ROS
    +关注

    关注

    1

    文章

    280

    浏览量

    17068

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

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

收藏 人收藏

    评论

    相关推荐

    使用myCobot 280机械臂结合ROS2系统搭建机械分拣站

    这篇文章是来自Automatic Addison的开源项目,已获作者授权转载自github。本项目的主要内容是使用myCobot 280机械臂结合ROS2系统搭建机械分拣站。
    的头像 发表于 01-15 09:22 129次阅读
    使用myCobot 280机械臂结合<b class='flag-5'>ROS2</b>系统搭建机械分拣站

    在Mac上使用Docker构建noVNC环境并运行MyCobot

    这篇文章主要内容是关于如何在 Ros2 环境中构建在 Mac 上模拟 Mycobot 280 M5 的环境。
    的头像 发表于 01-15 09:17 130次阅读
    在Mac上使用Docker构建noVNC环境并运行MyCobot

    #新年新气象,大家新年快乐!#AIGC入门及鸿蒙入门

    2. 实践操作: 使用Python进行实践,通过transformers库加载预训练的文本生成模型。 学习图像生成算法,如生成对抗网络(GAN)等。 3. 工具推荐: ChatGPT:由OpenAI
    发表于 01-13 10:46

    AIGC入门及鸿蒙入门

    2. 实践操作: 使用Python进行实践,通过transformers库加载预训练的文本生成模型。 学习图像生成算法,如生成对抗网络(GAN)等。 3. 工具推荐: ChatGPT:由OpenAI
    发表于 01-13 10:32

    ROSCon China 2024 | RDK第一本教材来了!地瓜机器人与古月居发布新书《ROS 2智能机器人开发实践

    12月7日-8日,为期两天的ROSCon China 2024在上海圆满落幕,来自全球的ROS专家学者、开发者、企业代表齐聚一堂,共享机器人前沿技术成果。地瓜机器人携手众多RDK生态产品亮相,并联手古月居共同推出首本基于RDK机器人开发者套件的教材——《ROS
    的头像 发表于 12-10 18:48 516次阅读
    ROSCon China 2024 | RDK第一本教材来了!地瓜机器人与古月居发布新书《<b class='flag-5'>ROS</b> <b class='flag-5'>2</b>智能机器人开发<b class='flag-5'>实践</b>》

    ROSCon China 2024 | RDK第一本教材来了!地瓜机器人与古月居发布新书《ROS 2智能机器人开发实践

    手古月居共同推出首本基于RDK机器人开发者套件的教材——《ROS 2智能机器人开发实践》。该书由地平线创始人&CEO余凯博士和华东师范大学教授张新宇博士作序,获得了奥比中光创始人黄源浩博士,中国科学院软件研究所副总工程师、ope
    发表于 12-10 10:56 263次阅读

    TVP5146M2 VBI快速入门

    电子发烧友网站提供《TVP5146M2 VBI快速入门.pdf》资料免费下载
    发表于 09-30 11:10 0次下载
    TVP5146M<b class='flag-5'>2</b> VBI快速<b class='flag-5'>入门</b>

    ROS让机器人开发更便捷,基于RK3568J+Debian系统发布!

    、路线控制偏离、系统通信异常等严重后果。而ROS系统凭借其优势,已成为AGV开发利器,广泛应用于各种机器人开发,并逐渐成为主流。 RK3568J + Debian的ROS2系统演示案例 创龙科技
    发表于 07-09 11:38

    如何在ROS中调用.so文件

    设备 笔者有一个需求,需要结合ROS做模拟量采集。有一种解决方法是ADC芯片+STM32主控,通过串口的方式与上位机通信,但串口通信速度很慢,达不到要求遂放弃。也考虑过使用NI的数据采集卡,貌似NI
    发表于 07-02 14:44

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

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

    请问STM32MP157上可以安装ROS吗?

    请问一下,STM32MP157上可以安装ROS吗?
    发表于 03-26 06:50

    SLAMWARE ROS SDK的基础架构、部署方法和应用示例介绍

    ROS作为机器人行业应用最广泛的基础架构之一,是很多用户开发机器人应用的首选框架,如果要在基于ROS开发的系统中集成思岚科技的机器人底盘或者SLAMKit建图定位解决方案,有什么最便捷的方法呢?ROS SDK就是为此而生。
    的头像 发表于 03-21 10:44 986次阅读
    SLAMWARE <b class='flag-5'>ROS</b> SDK的基础架构、部署方法和应用示例介绍

    EtherCAT运动控制器在ROS上的应用(下)

    正运动技术动态链接库环境配置以及EtherCAT运动控制器在ROS下的单轴运动。
    的头像 发表于 03-13 14:54 672次阅读
    EtherCAT运动控制器在<b class='flag-5'>ROS</b>上的应用(下)

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

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

    基于CubeMX的RT-thread Nano可以添加microros这样的软件包吗?

    最近使用rt-thread配置一个ROS2,但是是用CubeMX联合Clion做的,CubeMX使用的是RT-thread nano包, 请问这个环境可以添加像microros这样的软件包吗?谢谢。
    发表于 03-01 06:00