【CANN训练营】ROS2系统及使用介绍

2023-12-04 15:20

本文主要是介绍【CANN训练营】ROS2系统及使用介绍,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

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发展历史

image.png

ROS特点与优势

  1. 免费且开源
    BSD许可,可修改,可复用,良好生态环境
  2. 工具包丰富
    3D可视化工具rviz、物理仿真环境 gazebo数据记录工具rosbag、QT工具箱rqt*
  3. 精简与集成
    每个功能节点单独编译、集成众多开源项目、同一接口,代码复用率高
  4. 多语言支持
    ROS2支持许多种不同的语言,例如C++、python、Java和Go等待,也包含其他语言的多种接口实现。
  5. 点对点
    点对点通信

ROS与ROS2的不同

image.png

  1. OS层
    从原来的只支持linux平台变成了支持windows、mac甚至是嵌入式RTOS平台
  2. 中间层
    去中心化master,ROS和ROS2中间件不同之处在于ROS2取消了master节点。去中心化后,各个节点之间可以通过DDS的节点相互发现,各个节点都是平等的,且可以1对1、1对n、n对n进行互相通信。不造通信的轮子通信直接更换为DDS进行实现。使得RO52的实时性、可靠性和连续性上都有了增强。
  3. 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架构

架构图
image.png

  1. 操作系统层
    操作系统层比较好理解,ROS2本身就是基于Linux、Windows或者macos系统建立的,驱动计算机硬件、底层网络通信等实现都是交由操作系统来实现的
  2. DDS实现层
    要想理解这一层就需要你了解DDS是什么?以及为什么ROS2框架中会有多个DDS的实现DDS,全称 Data Distribution Service(数据分发服务)。是由对象管理组(OMG)于2003发布并于2007年修订的开分布式系统标准。通过类似于ROS中的话题发布和订阅形式来进行通信,同时提供了丰富的服务质量管理来保证可靠性、持久性、传输设置等。DDS实现层其实就是对不同常见的DDS接口进行再次的封装让其保持统一性,为DDS抽象层提供统一的API
  3. 抽象DDS层-RMW
    这一层将DDS实现层进一步的封装,使得DDS更容易使用。原因在于DDS需要大量的设置和配置(分区,主题名称,发现模式,消息创建…),这些设置都是在ROS2的抽象层中完成的。
  4. ROS2客户端库RCL
    RCL (ROS Client Library) ROS客户端库,其实就是ROS的一种API提供了对ROS话题、服务、参数、Action等接口
  5. 应用层
    应用层就是我们写代码以及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客户端库

image.png
这张图是ROS2,AP的实现层级,最新下面的是第三方的DDS,rmw (中间件接口)层是对各家DDS的抽象层,基于rmw实现了rclc,有了rcic,我们就可以实现各个语言的库,所以基于rclc,ROS2官方实现了rclpy和rclcpp等

image.png

这篇关于【CANN训练营】ROS2系统及使用介绍的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/453937

相关文章

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

zookeeper端口说明及介绍

《zookeeper端口说明及介绍》:本文主要介绍zookeeper端口说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、zookeeper有三个端口(可以修改)aVNMqvZ二、3个端口的作用三、部署时注意总China编程结一、zookeeper有三个端口(可以

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

java使用protobuf-maven-plugin的插件编译proto文件详解

《java使用protobuf-maven-plugin的插件编译proto文件详解》:本文主要介绍java使用protobuf-maven-plugin的插件编译proto文件,具有很好的参考价... 目录protobuf文件作为数据传输和存储的协议主要介绍在Java使用maven编译proto文件的插件

SpringBoot线程池配置使用示例详解

《SpringBoot线程池配置使用示例详解》SpringBoot集成@Async注解,支持线程池参数配置(核心数、队列容量、拒绝策略等)及生命周期管理,结合监控与任务装饰器,提升异步处理效率与系统... 目录一、核心特性二、添加依赖三、参数详解四、配置线程池五、应用实践代码说明拒绝策略(Rejected

C++ Log4cpp跨平台日志库的使用小结

《C++Log4cpp跨平台日志库的使用小结》Log4cpp是c++类库,本文详细介绍了C++日志库log4cpp的使用方法,及设置日志输出格式和优先级,具有一定的参考价值,感兴趣的可以了解一下... 目录一、介绍1. log4cpp的日志方式2.设置日志输出的格式3. 设置日志的输出优先级二、Window

Ubuntu如何分配​​未使用的空间

《Ubuntu如何分配​​未使用的空间》Ubuntu磁盘空间不足,实际未分配空间8.2G因LVM卷组名称格式差异(双破折号误写)导致无法扩展,确认正确卷组名后,使用lvextend和resize2fs... 目录1:原因2:操作3:报错5:解决问题:确认卷组名称​6:再次操作7:验证扩展是否成功8:问题已解

Qt使用QSqlDatabase连接MySQL实现增删改查功能

《Qt使用QSqlDatabase连接MySQL实现增删改查功能》这篇文章主要为大家详细介绍了Qt如何使用QSqlDatabase连接MySQL实现增删改查功能,文中的示例代码讲解详细,感兴趣的小伙伴... 目录一、创建数据表二、连接mysql数据库三、封装成一个完整的轻量级 ORM 风格类3.1 表结构

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核