ROS1和ROS2

  1. ROS(Robot Operating System,机器人操作系统),但 ROS 本身并不是一个操作系统,而是可以安装在现在已有的操作系统上(Linux、Windows、Mac)的软件库和工具集。
  2. 现在的 ROS 功能已经变得非常的丰富和强大。但随着对 ROS 功能上要求越来越多,一些原始的架构和设计不能够满足目前的使用需求,这也是 ROS2 出现的原因

ROS的作用

  1. 做一个机器人需要涉及到多个部分,而且这些部分之间还要进行通信,如果想要整个机器人可以跑起来,那么必须要有一个东西将下面的几个部分合理的连接到一起,这个东西就是 ROS
  • 感知部分:激光雷达、深度相机、IMU、里程计、碰撞感知、建图
  • 决策部分:路径规划(navigation)算法、定位算法
  • 控制部分:轮子驱动

ROS 和 ROS2 对比

1.
ROS 的设计目标是简化机器人的开发,ROS 为此设计了一整套通信机制(话题、服务、参数、动作)

  • 通过这些通信机制,ROS 实现了将机器人的各个组件给的连接起来,在设计这套通信机制的时候就设计了一个叫做 ROS Master 的主节点,所有节点(可以理解为某一个组件,比如:激光雷达)的通信建立必须经过这个主节点
  • 一旦 ROS Master 主节点挂掉后,就会造成整个系统通信的异常,ROS 的不稳定这个问题,如果是想基于 ROS 做商业化机器人(比如无人驾驶汽车),就会造成非常严重的后果
  • ROS 还存在以下问题:1、通信基于 TCP 实现,实时性差、系统开销大;2、对 Python3 支持不友好,需要重新编译;3、消息机制不兼容;4、没有加密机制、安全性不高

image-20250209170153244

[!TIP]

网络传输可靠性对比

  • ROS1 是基于 TCP/IP 构建的,TCP/IP 很难在无线通信中传输数据,因为中断可能会导致回退、重传和延迟
  • ROS2 中的 DDS 使用 UDP 传送数据,不会尝试重新传输数据,相反,DDS 决定在不可靠的条件下何时以及如何重新传输,DDS 引入了服务质量 (QoS) 来公开这些设置,以优化可用带宽和延迟

ROS 与 ROS2 架构对比

  1. OS 层

    ROS:只支持 linux 平台

    ROS2:支持 windows、mac 甚至是嵌入式 RTOS 平台

  2. 中间件层(中间件就是介于某两个或者多个节点中间的组件,提供多个节点间通信用的)

    去中心化 master:ROS 和 ROS2 中间件不同之处在于,ROS2 取消了 master 节点,去中心化后,各个节点之间可以通过 DDS 的节点相互发现,各个节点都是平等的,且可以 1 对 1、1 对 n、n 对 n 进行互相通信

    不造通信的轮子:通信直接更换为 DDS 进行实现,采用 DDS 通信,使得 ROS2 的实时性、可靠性和连续性上都有了增强

  3. 应用层

    Python2 到 Python3 的支持

    编译系统的改进(catkin 到 ament)

    C++ 标准更新到 C++11

    可以使用相同 API 的进程间和进程内通信

image-20250209170944771

ROS2系统架构可以分为5层

  1. 操作系统层

  2. DDS实现层

  3. DDS接口层

  4. ROS 2客户端层

  5. ROS 2 应用层

什么是 DDS?

DDS(Data Distribution Service,数据分发服务),是 OMG(Object Management Group,对象管理组织)发布的分布式通信规范/协议,采用订阅发布模型,以中间件的形式提供通信服务,并提供 QoS(Quality of Service)策略,保障数据实时、高效、灵活的分发
DDS 协议大致流程是多对多的单向数据交互,通信模型为分布式结构,没有中心节点,同一个数据空间任何两个节点之间都能直接通信,DDS 采用以数据为中心的发布-订阅模型 DCPS(Data-Centric Publish-Subscribe)
分布式实时通信-DDS 概述

1.环境准备

虚拟机 版本ubuntu22.02

鱼香ros2一键安装

image-20250209201136544

软件 vscode / anconda

终端输入code. 打开vscode

版本管理工具 git

image-20250207192748580

image-20250207192717490

2.常用指令

Ctrl+Alt+T 打开终端 默认打开当前用户的主目录 用符号 ~

在liunx里面 /表示整个文件系统的根目录

ls #表示当前目录下的文件
mkdir #创建文件夹
touch #创建文件
nano / vim 文本编辑器
cat #对文件里面文本进行控制台打印输出
rm  删除文件
rm -r 递归删除

image-20250207191542128

dpkg -i 包安装管理工具

编译

有g++ 和 cmake 俩种方法

环境变量

linux 里面环境变量是一种全局变量 用于存储用户和系统的配置信息

编写节点