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。

审核编辑 :李倩

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

    关注

    213

    文章

    30627

    浏览量

    219712
  • 嵌人式
    +关注

    关注

    0

    文章

    10

    浏览量

    7631
  • ROS
    ROS
    +关注

    关注

    1

    文章

    291

    浏览量

    18491

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

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

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—ROS2系统使用说明

    本文围绕创龙科技研发的评估板,详解 ROS2 系统使用方法。涵盖 ROS2 环境搭建、核心概念讲解、节点通信测试、功能包创建与编译,以及可视化工具 RViz 的使用,还包括基于评估板的 ROS2 应用案例演示,帮助开发者快速掌握
    的头像 发表于 10-30 13:46 239次阅读
    创龙 瑞芯微 RK3588 国产2.4GHz八核 工业开发板—<b class='flag-5'>ROS2</b>系统使用说明

    ROS 传感器模块的通用架构设计与跨中间件扩展实践

    3DGS与4DGS的核心应用实践与技术突破!在自动驾驶与机器人仿真领域,传感器数据的高效交互是连接虚拟仿真与实际系统的关键纽带。ROS(RobotOperatingSystem)作为行业通用的机器人
    的头像 发表于 10-11 17:32 970次阅读
    <b class='flag-5'>ROS</b> 传感器模块的通用架构设计与跨中间件扩展<b class='flag-5'>实践</b>

    请问mirco ros2的lib库怎么生成?

    想使用MDK开发mirco_ros2,但是网上怎么找都没有相应的lib库及生成教程,想问下有没有人能解决这个问题,因为项目开始就用MDK开发,也习惯了,改用其他功能可能会很费时。
    发表于 09-22 07:28

    如何基于翼辉信息SylixOS开发ROS 2应用

    ROS 2(Robot Operating System 2)是机器人操作系统(ROS)的升级版,是一套开源的专为机器人开发而设计的软件库与工具集。作为构建机器人应用的强大框架,提供从
    的头像 发表于 08-14 15:44 1672次阅读
    如何基于翼辉信息SylixOS开发<b class='flag-5'>ROS</b> <b class='flag-5'>2</b>应用

    硬核上车!RK3576基于Ubuntu部署ROS机器人系统详细攻略(上)

    本文适用于瑞芯微RK3562、RK3566、RK3568、RK3576、RK3588等Arm64位SoC,适配开发ROS2系统。各型号触觉智能均有配套核心板及开发板,实现了百分百全国产。ROS2
    的头像 发表于 07-03 18:45 2119次阅读
    硬核上车!RK3576基于Ubuntu部署<b class='flag-5'>ROS</b>机器人系统详细攻略(上)

    基于 ROS + ADI 芯片方案 的 人形机器人子系统级BOM清单(以腿部子系统为例)

    基于 ROS + ADI 芯片方案 的 人形机器人子系统级BOM清单 (以 腿部子系统 为例),包括核心感知、执行与通信模块,配合主控系统通过 ROS2 实现分布式控制与状态反馈。 一、腿部子系统
    的头像 发表于 06-17 17:06 1551次阅读

    ros2教程

    电子发烧友网站提供《ros2教程.pdf》资料免费下载
    发表于 05-23 09:12 1次下载

    【「# ROS 2智能机器人开发实践」阅读体验】视觉实现的基础算法的应用

    : 一、机器人视觉:从理论到实践 第7章详细介绍了ROS2在机器视觉领域的应用,涵盖了相机标定、OpenCV集成、视觉巡线、二维码识别以及深度学习目标检测等内容。通过学习,我认识到: 相机标定的重要性
    发表于 05-03 19:41

    【「# ROS 2智能机器人开发实践」阅读体验】机器人入门的引路书

    的非常好的,特别是一些流程图,很清晰的阐释了概念 很适合作为初学者入门的引路书 还能了解很多技术和框架,破除初学者的自负困境,让初学者知道功能是由很多开发者维护的,前人已经为各种产品搭建了完善的框架。避免陷入得一个人单打独斗的错觉 一直蠢蠢欲动ros2和机器人的同学,有了
    发表于 04-30 01:05

    【「# ROS 2智能机器人开发实践」阅读体验】+ROS2应用案例

    的知识,还需要对ROS 2的节点通信和数据处理有一定的了解。通过实践这一部分内容,我掌握了如何在ROS 2中实现二维码识别,这对于提高机器人
    发表于 04-27 11:42

    【「# ROS 2智能机器人开发实践」阅读体验】+内容初识

    ROS 2智能机器人开发实践》内容阅读初体验 《ROS 2 智能机器人开发实践》是一本针对
    发表于 04-27 11:24

    名单公布!【书籍评测活动NO.58】ROS 2智能机器人开发实践

    ”社区负责人李乔龙老师共同撰写了这本500页的机器人入门者案头手册——《ROS 2智能机器人开发实践》一书! 本书汇聚了作者过去十几年的机器人开发经验,基于稳定版
    发表于 03-03 14:18

    如何将python文件导入到ROS系统中

    本文通过使用myCobot机械臂进行QR码视觉追踪的实践案例分析,介绍如何将 python 文件导入到 ROS 系统中。
    的头像 发表于 02-11 11:08 1224次阅读
    如何将python文件导入到<b class='flag-5'>ROS</b>系统中

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

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

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

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