ROS2系统及使用介绍
ROS2介绍及特点介绍
ROS2简介
要说ROS2,那就不得不提起ROS,ROS就是机器人操作系统英文全称(Robot Operating System),但ROS本身并不是一个操作系统,而是可以安装在现在已有的操作系统上(Linux、Windows、Mac)上的软件和工具集。
ROS出生于2007年,ROS的出现解决了机器人各个组件之间的通信问题,同时基于ROS的完善的通信机制,越来越多的优秀的机器人算法集成到了ROS中来
现在的ROS功能已经变得非常的丰富和强大。但随着对ROS功能上要求越来越多,一些原始的架构和设计不能够满足目前的使用需求,这也是ROS2出现的原因
ROS2继承了ROS原有的优秀之处,同时又带来了很多新的功能ROS2相对于ROS更加的强大。
ROS发展历史
ROS特点与优势
- 免费且开源
BSD许可,可修改,可复用,良好生态环境 - 工具包丰富
3D可视化工具rviz、物理仿真环境 gazebo数据记录工具rosbag、QT工具箱rqt* - 精简与集成
每个功能节点单独编译、集成众多开源项目、同一接口,代码复用率高 - 多语言支持
ROS2支持许多种不同的语言,例如C++、python、Java和Go等待,也包含其他语言的多种接口实现。 - 点对点
点对点通信
ROS与ROS2的不同
- OS层
从原来的只支持linux平台变成了支持windows、mac甚至是嵌入式RTOS平台 - 中间层
去中心化master,ROS和ROS2中间件不同之处在于ROS2取消了master节点。去中心化后,各个节点之间可以通过DDS的节点相互发现,各个节点都是平等的,且可以1对1、1对n、n对n进行互相通信。不造通信的轮子通信直接更换为DDS进行实现。使得RO52的实时性、可靠性和连续性上都有了增强。 - ROS2新概念例举
- 可用Python编写的Launch文件
- 多机器人协同通信支持
- 支持安全加密通信
- 同一个进程支持多个节点
- 支持Qos服务质量
- 支持节点生命周期管理
- 高效的进程间通信
ROS2的安装
手动安装
添加源
echo "deb [arch=S(dpkg --print-architecture)] https://repo.huaweicloud.com/ros2/ubuntu/ S(lsb-release-cs) main"] sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null
添加源对应的秘钥
sudo apt install curl gnupg2 -ycurl -s https://gitee.com/ohhuo/rosdistro/raw/master/ros.asc | sudo apt-key add -
安装ROS2
sudo apt install ros-humble-desktop
安装额外依赖
sudo apt install python3-argcomplete -y
配置环境变量
source /opt/ros/humble/setup.bash
自动安装
打开终端,输入下面的指令
wget http://fishros.com/install -O fishros && . fishros
输入密码,在选项界面选择1-一键安装ROS,接着根据你的情况选择是否更换系统源,接着等待一会就会让你选择要安装的ROS2版本了。这里选择humble版本的ROS2即可。
接着会问你安装桌面版还是基础版,我们选择桌面版,包含可视化工具,如果是在树莓派上装可以使用基础版。
安装完成后输入ros2如果看到如手动安装的界面则安装成功。
ROS2概念通识
ROS2架构
架构图
- 操作系统层
操作系统层比较好理解,ROS2本身就是基于Linux、Windows或者macos系统建立的,驱动计算机硬件、底层网络通信等实现都是交由操作系统来实现的 - DDS实现层
要想理解这一层就需要你了解DDS是什么?以及为什么ROS2框架中会有多个DDS的实现DDS,全称 Data Distribution Service(数据分发服务)。是由对象管理组(OMG)于2003发布并于2007年修订的开分布式系统标准。通过类似于ROS中的话题发布和订阅形式来进行通信,同时提供了丰富的服务质量管理来保证可靠性、持久性、传输设置等。DDS实现层其实就是对不同常见的DDS接口进行再次的封装让其保持统一性,为DDS抽象层提供统一的API - 抽象DDS层-RMW
这一层将DDS实现层进一步的封装,使得DDS更容易使用。原因在于DDS需要大量的设置和配置(分区,主题名称,发现模式,消息创建…),这些设置都是在ROS2的抽象层中完成的。 - ROS2客户端库RCL
RCL (ROS Client Library) ROS客户端库,其实就是ROS的一种API提供了对ROS话题、服务、参数、Action等接口 - 应用层
应用层就是我们写代码以及ROS2开发的各种常用的机器人相关开发工具所在的层了。后面我们写的所有代码其实都是属于这层。
ROS2客户端库RCL
RCL(ROS Client Library) ROS客户端库,其实就是RS的一种API,提供了对ROS话题、服务、参数、Action等接口。
GUI和CLI
GUI(Graphical User nterface) 就是平常我们说的图形用户界面,大家用的Windows是就是可视化的,我们可以通过鼠标点击按钮等图形化交互完成任务。CLI(Command-Line nterface)就是命令行界面了,我们所用的终端,黑框框就是命令行界面,没有图形化。很久之前电脑还是没有图形化界面的,所有的交互都是通过命令行实现,就学习机器人而言,命令行操作相对于图形化优势更加明显。
API是什么
API (Application Programming nterface) 应用程序编程接口。比如你写了一个库,里面有很多函数,如果别人要使用你这个库,但是并不知道每个函数内部是怎么实现的。使用的人需要看你的文档或者注释才知道这个函数的入口参数和返回值或者这个函数是用来做什么的。对于使用者来说来说,你的这些函数就是API.
API在不同语言中的表现形式不同,在和C++表现为头文件,在Pthon中表现为Pvthon文件
ROS客户端库
这张图是ROS2,AP的实现层级,最新下面的是第三方的DDS,rmw (中间件接口)层是对各家DDS的抽象层,基于rmw实现了rclc,有了rcic,我们就可以实现各个语言的库,所以基于rclc,ROS2官方实现了rclpy和rclcpp等