【ROS2】ROS2的框架知识

news/2024/11/30 0:26:39/

一、说明

        对于初学ROS的同学,如果没有有效的学习规划,那么不妨看看该文,在这里,我们将对ROS2出现的知识板块进行介绍,期望对初识ROS2的同学起到导航作用。

二、ROS2的优势所在

2.1 ROS1的不足

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

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

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

2.2 ROS2的改进

        ROS2采⽤(或者计划采⽤)以下策略以提升其在产品环境的适⽤度:

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

三、ROS2的特殊性

3.1 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的内部架构:

3.2 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/Co

       

3.3. 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设定

四、ROS2的构建模块

4.1 从体系上对ROS2知识划分

        ROS 2的知识体系主要分为以下几个方面:

  1. ROS 2架构:包括ROS 2的基本概念、架构、节点、消息、服务、参数、launch文件等基础概念。

  2. ROS 2工具:包括rqt、rviz2、rosbag2、ros2 run、ros2 launch、ros2 topic、ros2 service等工具的使用方法。

  3. ROS 2中间件:ROS 2使用的中间件DDS,包括了对DDS的概念、特性、应用场景等的介绍。

  4. ROS 2开发:包括使用C++和Python语言编写ROS 2程序、如何进行调试、如何进行测试、如何进行发布和订阅等开发相关的内容。

  5. ROS 2扩展:包括如何自定义消息和服务、如何编写插件、如何与ROS 1进行通信等ROS 2的扩展内容。

        此外,ROS 2还有一些高级应用方面的知识,例如ROS 2在无人机、机器人、自动驾驶等领域的应用。

4.2 通信

        ROS2的理论模型包括以下几个方面:

  1. 基于节点的分布式计算:ROS2支持分布式计算,节点之间可以互相通信,以实现复杂的任务。

  2. 通信模型:ROS2采用发布订阅模型,节点之间通过话题(Topic)进行通信,支持同步和异步通信。

  3. 服务模型:ROS2支持服务(Service)模型,允许节点之间请求和响应。

  4. 参数服务器:ROS2支持参数服务器(Parameter Server),用于在运行时存储和共享参数数据。

  5. 消息定义:ROS2使用消息定义(Message Definition)来描述节点之间传递的数据类型和格式。

  6. 工具支持:ROS2提供了丰富的工具支持,如命令行工具、可视化工具、模拟器等,以方便开发和调试。

总体来说,ROS2的理论模型提供了一套灵活、可扩展的分布式计算框架,可以支持多种应用场景。

        ROS2通信内容包括以下几个方面:

  1. Topic:以消息的形式发布和订阅数据。

  2. Service:提供请求-响应模式的通信,可用于传递一次性的请求和返回值。

  3. Action:将服务的请求和响应拆分成多个步骤,可以随时取消和恢复。

  4. Parameter:可以在运行时动态地修改节点的参数。

  5. Events:可以订阅节点发送的事件(如节点启动或停止)。

        以上都是ROS2通信的内容,它们可以在ROS2中的不同节点之间进行传递和处理。

4.3 仿真

        ROS2的仿真可以分为以下几种类型:

  1. Gazebo仿真:Gazebo是一款开源的物理仿真工具,可以模拟机器人在不同环境下的运动和行为。ROS2提供了与Gazebo的集成,可以使用Gazebo进行机器人的仿真和测试。

  2. RViz2仿真:RViz2是ROS2的可视化工具,可以帮助用户对机器人的运动和行为进行可视化调试和测试。

  3. Stage仿真:Stage是一个轻量级的机器人仿真器,可以通过ROS2框架进行集成,实现机器人的仿真和测试。

  4. Webots仿真:Webots是一款流行的物理仿真工具,可以模拟机器人和其他物理系统的运动和行为。ROS2提供了与Webots的集成,可以使用Webots进行机器人的仿真和测试。

  5. PX4仿真:PX4是一款流行的飞行控制系统,可以使用ROS2进行集成和仿真,实现无人机的仿真和测试。

以上是ROS2的几种仿真类型,具体的选择取决于用户的需求和场景。

4.4 ros2的运动学仿真

        好的,你的问题是关于ROS 2的运动学仿真。你想了解哪方面的信息呢?例如如何在ROS 2中进行运动学仿真、如何使用ROS 2中的MoveIt!来执行路径规划和运动学控制等等。请更具体地描述一下你的问题。

        ROS 2中的运动学主要涉及机器人的运动学建模和控制。在ROS 2中,一般使用MoveIt!作为运动学解决方案,它为机器人提供了高级运动规划和控制。MoveIt!包含了机器人运动学和逆运动学求解器,可以帮助机器人生成轨迹和控制机器人的运动。

        运动学建模是指将机器人的几何形状和运动限制转化为数学模型,并通过这些模型描述机器人的运动。运动学建模通常需要使用机器人的DH参数、转移矩阵、李代数等表示方法,这些方法可以用相对简单的数学模型描述机器人的运动学特性。

通过运动学建模,我们可以计算机器人末端执行器的位置、速度、加速度等运动参数,这可以帮助我们控制机器人进行精准的执行任务。

总的来说,ROS 2的运动学知识包括机器人运动学建模、运动学解决方案的选择和运动规划。在ROS 2中,MoveIt!是一个强大的运动规划解决方案,可以帮助我们轻松的掌握机器人的运动学知识。

4.5 控制

        ROS2的控制知识主要包括以下几个方面:

  • 控制理论知识

        要了解ROS2的控制知识,首先需要了解控制理论的基础知识,包括PID控制、状态反馈控制、模型预测控制等。

  • ROS2的控制框架

        ROS2的控制框架主要包括控制器的设计和实现、消息传递、硬件驱动和数据采集等方面。要了解ROS2的控制框架,可以先了解ROS2的节点、话题、服务、参数等基本概念。

  • ROS2控制包的使用

        ROS2控制包是实现ROS2控制功能的核心组件,包括ros_control、ros2_control、ros2_controllers等。要了解ROS2控制包的使用,可以查看官方文档,也可以参考实际项目的代码实现。

  • 控制器的选择和参数调优

        控制器的选择和参数调优是实现ROS2控制的重要步骤。要选择合适的控制器,需要了解不同类型的控制器的优缺点和适用范围。在参数调优方面,需要了解各个参数的含义和作用,以及如何根据实际需求进行调整。

  • ROS2机器人控制应用实例

        要了解ROS2的控制知识,还可以参考一些应用实例,例如控制机器人移动、控制机械臂运动、控制飞行器等。这些应用实例可以帮助理解ROS2控制的具体实现过程和注意事项。

4.6 导航

        ROS 2的导航知识包括以下内容:

  1. 导航栈:ROS 2的导航栈是一个针对移动机器人的软件包集合,包括了实时定位、地图构建和路径规划等模块。导航栈可以帮助机器人在未知环境中进行导航和避障。

  2. AMCL:自适应蒙特卡罗定位(AMCL)是ROS 2的实时定位模块,它使用粒子滤波器算法估计机器人的位置,并与地图进行匹配。AMCL还可以对机器人的运动模型进行学习和校准,提高定位的准确性。

  3. 2D/3D建图:在机器人移动的同时,可以使用ROS 2的2D或者3D建图模块创建地图。2D建图使用激光雷达等传感器获取地图信息,3D建图则使用RGB-D相机等传感器获取地图信息。

  4. 路径规划:ROS 2的路径规划模块使用A*、Dijkstra等算法找到机器人在地图中的最优路径。路径规划模块可以考虑多种因素,如避障、速度、能耗等。

  5. 路径跟踪:路径跟踪模块将规划好的路径转换为机器人可以执行的速度指令。路径跟踪模块可以将路径分段近似为直线、圆弧等,以便于机器人控制。

        以上是ROS 2的导航知识的一些方面。如果您需要更具体的信息,可以参考ROS 2官方文档。


http://www.ppmy.cn/news/1011136.html

相关文章

Leetcode-每日一题【剑指 Offer 56 - II. 数组中数字出现的次数 II】

题目 在一个数组 nums 中除一个数字只出现一次之外,其他数字都出现了三次。请找出那个只出现一次的数字。 示例 1: 输入:nums [3,4,3,3]输出:4 示例 2: 输入:nums [9,1,7,9,7,9,7]输出:1 限制…

C语言错题之 8

前言: 今天依然是五道小题,都不难,主要是一些细节的知识。 这选择题做的真是让我大开眼界,长见识了(🤦‍) 1. 题干: 点击此处跳转 答案: ABCD 解析: …

无人驾驶实战-第八课(定位算法)

无人驾驶中定位的作用: 定位高精度地图:提供当前位置的静态环境感知 (车道线/交通指示牌/红绿灯/柱子/建筑物/等) 定位动态物体感知:将感知到的动态物体正确放入静态环境 定位获取位置姿态:用于路径规划/决…

Vue系列第八篇:echarts绘制柱状图和折线图

本篇将使用echarts框架进行柱状图和折线图绘制。 目录 1.绘制效果 2.安装echarts 3.前端代码 4.后端代码 1.绘制效果 2.安装echarts // 安装echarts版本4 npm i -D echarts4 3.前端代码 src/api/api.js //业务服务调用接口封装import service from ../service.js //npm …

postgresql 使用之 存储架构 触摸真实数据的存储结构以及组织形式,存入数据库的数据原来在这里

存储架构 ​专栏内容: postgresql内核源码分析 手写数据库toadb 并发编程 个人主页:我的主页 座右铭:天行健,君子以自强不息;地势坤,君子以厚德载物. 概述 postgresql 数据库服务运行时,数据在磁…

排序八卦炉之归并、计数

文章目录 1.归并排序1.1初识代码1.2代码分析1.3复杂度1.4非递归版本1.01.初识代码2.代码分析 1.5非递归版本2.01.初识代码2.代码分析 2.计数排序2.1初始代码2.2代码分析 1.归并排序 1.1初识代码 //归并排序 时间复杂度:O(N*logN) 空间复杂度:O(N) vo…

Element-UI简介

目录 安装 常用组件 Container 布局容器 Button 按钮 MessageBox 弹框 Form 表单验证 element-ui是一个前端的ui框架,封装了很多已经写好的ui组件,例如表单组件,布局组件,表格组件.......是一套桌面端组件。 Element - 网站…

每天一道leetcode:剑指 Offer 59 - II. 队列的最大值(中等)

今日份题目: 请定义一个队列并实现函数 max_value 得到队列里的最大值,要求函数max_value、push_back 和 pop_front 的均摊时间复杂度都是O(1)。 若队列为空,pop_front 和 max_value 需要返回 -1 示例1 输入: ["MaxQueue",&qu…