ROS2机器人开发
ROS1和ROS2
- ROS(Robot Operating System,机器人操作系统),但 ROS 本身并不是一个操作系统,而是可以安装在现在已有的操作系统上(Linux、Windows、Mac)的软件库和工具集。
- 现在的 ROS 功能已经变得非常的丰富和强大。但随着对 ROS 功能上要求越来越多,一些原始的架构和设计不能够满足目前的使用需求,这也是 ROS2 出现的原因。
ROS的作用
- 做一个机器人需要涉及到多个部分,而且这些部分之间还要进行通信,如果想要整个机器人可以跑起来,那么必须要有一个东西将下面的几个部分合理的连接到一起,这个东西就是 ROS
- 感知部分:激光雷达、深度相机、IMU、里程计、碰撞感知、建图
- 决策部分:路径规划(navigation)算法、定位算法
- 控制部分:轮子驱动
ROS 和 ROS2 对比
1.
ROS 的设计目标是简化机器人的开发,ROS 为此设计了一整套通信机制(话题、服务、参数、动作)
- 通过这些通信机制,ROS 实现了将机器人的各个组件给的连接起来,在设计这套通信机制的时候就设计了一个叫做 ROS Master 的主节点,所有节点(可以理解为某一个组件,比如:激光雷达)的通信建立必须经过这个主节点
- 一旦 ROS Master 主节点挂掉后,就会造成整个系统通信的异常,ROS 的不稳定这个问题,如果是想基于 ROS 做商业化机器人(比如无人驾驶汽车),就会造成非常严重的后果
- ROS 还存在以下问题:1、通信基于 TCP 实现,实时性差、系统开销大;2、对 Python3 支持不友好,需要重新编译;3、消息机制不兼容;4、没有加密机制、安全性不高
[!TIP]
网络传输可靠性对比
- ROS1 是基于 TCP/IP 构建的,TCP/IP 很难在无线通信中传输数据,因为中断可能会导致回退、重传和延迟
- ROS2 中的 DDS 使用 UDP 传送数据,不会尝试重新传输数据,相反,DDS 决定在不可靠的条件下何时以及如何重新传输,DDS 引入了服务质量 (QoS) 来公开这些设置,以优化可用带宽和延迟
ROS 与 ROS2 架构对比
OS 层
ROS:只支持 linux 平台
ROS2:支持 windows、mac 甚至是嵌入式 RTOS 平台
中间件层(中间件就是介于某两个或者多个节点中间的组件,提供多个节点间通信用的)
去中心化 master:ROS 和 ROS2 中间件不同之处在于,ROS2 取消了 master 节点,去中心化后,各个节点之间可以通过 DDS 的节点相互发现,各个节点都是平等的,且可以 1 对 1、1 对 n、n 对 n 进行互相通信
不造通信的轮子:通信直接更换为 DDS 进行实现,采用 DDS 通信,使得 ROS2 的实时性、可靠性和连续性上都有了增强
应用层
Python2 到 Python3 的支持
编译系统的改进(catkin 到 ament)
C++ 标准更新到 C++11
可以使用相同 API 的进程间和进程内通信
ROS2系统架构可以分为5层
操作系统层
DDS实现层
DDS接口层
ROS 2客户端层
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一键安装
软件 vscode / anconda
终端输入code. 打开vscode
版本管理工具 git
2.常用指令
Ctrl+Alt+T 打开终端 默认打开当前用户的主目录 用符号 ~
在liunx里面 /表示整个文件系统的根目录
ls #表示当前目录下的文件
mkdir #创建文件夹
touch #创建文件
nano / vim 文本编辑器
cat #对文件里面文本进行控制台打印输出
rm 删除文件
rm -r 递归删除
dpkg -i 包安装管理工具
编译
有g++ 和 cmake 俩种方法
环境变量
linux 里面环境变量是一种全局变量 用于存储用户和系统的配置信息