【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

相关文章

Python使用Pandas对比两列数据取最大值的五种方法

《Python使用Pandas对比两列数据取最大值的五种方法》本文主要介绍使用Pandas对比两列数据取最大值的五种方法,包括使用max方法、apply方法结合lambda函数、函数、clip方法、w... 目录引言一、使用max方法二、使用apply方法结合lambda函数三、使用np.maximum函数

Qt 中集成mqtt协议的使用方法

《Qt中集成mqtt协议的使用方法》文章介绍了如何在工程中引入qmqtt库,并通过声明一个单例类来暴露订阅到的主题数据,本文通过实例代码给大家介绍的非常详细,感兴趣的朋友一起看看吧... 目录一,引入qmqtt 库二,使用一,引入qmqtt 库我是将整个头文件/源文件都添加到了工程中进行编译,这样 跨平台

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java中String字符串使用避坑指南

《Java中String字符串使用避坑指南》Java中的String字符串是我们日常编程中用得最多的类之一,看似简单的String使用,却隐藏着不少“坑”,如果不注意,可能会导致性能问题、意外的错误容... 目录8个避坑点如下:1. 字符串的不可变性:每次修改都创建新对象2. 使用 == 比较字符串,陷阱满

Python使用国内镜像加速pip安装的方法讲解

《Python使用国内镜像加速pip安装的方法讲解》在Python开发中,pip是一个非常重要的工具,用于安装和管理Python的第三方库,然而,在国内使用pip安装依赖时,往往会因为网络问题而导致速... 目录一、pip 工具简介1. 什么是 pip?2. 什么是 -i 参数?二、国内镜像源的选择三、如何

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Linux使用nload监控网络流量的方法

《Linux使用nload监控网络流量的方法》Linux中的nload命令是一个用于实时监控网络流量的工具,它提供了传入和传出流量的可视化表示,帮助用户一目了然地了解网络活动,本文给大家介绍了Linu... 目录简介安装示例用法基础用法指定网络接口限制显示特定流量类型指定刷新率设置流量速率的显示单位监控多个

JavaScript中的reduce方法执行过程、使用场景及进阶用法

《JavaScript中的reduce方法执行过程、使用场景及进阶用法》:本文主要介绍JavaScript中的reduce方法执行过程、使用场景及进阶用法的相关资料,reduce是JavaScri... 目录1. 什么是reduce2. reduce语法2.1 语法2.2 参数说明3. reduce执行过程

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本