您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Model Center   Code  
会员   
   
 
     
   
 
 订阅
ROS2概述和实践入门
 
作者:Adam Shan
  1221  次浏览      18 次
2022-1-20
 
编辑推荐:
本文主要介绍为什么转向ROS,ROS1的天然缺陷,ROS2相较于ROS1的提升和改进,ROS2中的DDS中间层,ROS2中的QoS策略, ROS2的安装和开发环境准备,ROS2在Ubuntu下的安装,ROS2的基本工具和命令,希望对您的学习有所帮助。
本文来自深蓝学院,由火龙果软件Alice编辑、推荐。

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

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

0 1 为什么转向ROS

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

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

02 ROS1的天然缺陷

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

· 无实时性(real-time)

· 嵌⼊式设备不友好

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

· 多用于学术应用

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

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

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

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

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

· ⽀持多机器⼈

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

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

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

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

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

04 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

05 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设定

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

07 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即可完成环境的选择。

    08 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。

       
    1221 次浏览       18
    相关文章

    基于图卷积网络的图深度学习
    自动驾驶中的3D目标检测
    工业机器人控制系统架构介绍
    项目实战:如何构建知识图谱
     
    相关文档

    5G人工智能物联网的典型应用
    深度学习在自动驾驶中的应用
    图神经网络在交叉学科领域的应用研究
    无人机系统原理
    相关课程

    人工智能、机器学习&TensorFlow
    机器人软件开发技术
    人工智能,机器学习和深度学习
    图像处理算法方法与实践

    最新活动计划
    MBSE(基于模型的系统工程)4-18[北京]
    自然语言处理(NLP) 4-25[北京]
    基于 UML 和EA进行分析设计 4-29[北京]
    以用户为中心的软件界面设计 5-16[北京]
    DoDAF规范、模型与实例 5-23[北京]
    信息架构建模(基于UML+EA)5-29[北京]
     
     
    最新文章
    AIGC技术与应用全解析
    详解知识图谱的构建全流程
    大模型升级与设计之道
    自动驾驶和辅助驾驶系统
    ROS机器人操作系统底层原理
    最新课程
    人工智能,机器学习和深度学习
    人工智能与机器学习应用实战
    人工智能-图像处理和识别
    人工智能、机器学习& TensorFlow+Keras框架实践
    人工智能+Python+大数据
    成功案例
    某综合性科研机构 人工智能与机器学习应用
    某银行 人工智能+Python+大数据
    北京 人工智能、机器学习& TensorFlow框架实践
    某领先数字地图提供商 Python数据分析与机器学习
    中国移动 人工智能、机器学习和深度学习