【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

相关文章

vue使用docxtemplater导出word

《vue使用docxtemplater导出word》docxtemplater是一种邮件合并工具,以编程方式使用并处理条件、循环,并且可以扩展以插入任何内容,下面我们来看看如何使用docxtempl... 目录docxtemplatervue使用docxtemplater导出word安装常用语法 封装导出方

Linux换行符的使用方法详解

《Linux换行符的使用方法详解》本文介绍了Linux中常用的换行符LF及其在文件中的表示,展示了如何使用sed命令替换换行符,并列举了与换行符处理相关的Linux命令,通过代码讲解的非常详细,需要的... 目录简介检测文件中的换行符使用 cat -A 查看换行符使用 od -c 检查字符换行符格式转换将

Python FastAPI+Celery+RabbitMQ实现分布式图片水印处理系统

《PythonFastAPI+Celery+RabbitMQ实现分布式图片水印处理系统》这篇文章主要为大家详细介绍了PythonFastAPI如何结合Celery以及RabbitMQ实现简单的分布式... 实现思路FastAPI 服务器Celery 任务队列RabbitMQ 作为消息代理定时任务处理完整

使用Jackson进行JSON生成与解析的新手指南

《使用Jackson进行JSON生成与解析的新手指南》这篇文章主要为大家详细介绍了如何使用Jackson进行JSON生成与解析处理,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 核心依赖2. 基础用法2.1 对象转 jsON(序列化)2.2 JSON 转对象(反序列化)3.

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

Elasticsearch 在 Java 中的使用教程

《Elasticsearch在Java中的使用教程》Elasticsearch是一个分布式搜索和分析引擎,基于ApacheLucene构建,能够实现实时数据的存储、搜索、和分析,它广泛应用于全文... 目录1. Elasticsearch 简介2. 环境准备2.1 安装 Elasticsearch2.2 J

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

Linux系统中卸载与安装JDK的详细教程

《Linux系统中卸载与安装JDK的详细教程》本文详细介绍了如何在Linux系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

Java中List的contains()方法的使用小结

《Java中List的contains()方法的使用小结》List的contains()方法用于检查列表中是否包含指定的元素,借助equals()方法进行判断,下面就来介绍Java中List的c... 目录详细展开1. 方法签名2. 工作原理3. 使用示例4. 注意事项总结结论:List 的 contain

C#使用SQLite进行大数据量高效处理的代码示例

《C#使用SQLite进行大数据量高效处理的代码示例》在软件开发中,高效处理大数据量是一个常见且具有挑战性的任务,SQLite因其零配置、嵌入式、跨平台的特性,成为许多开发者的首选数据库,本文将深入探... 目录前言准备工作数据实体核心技术批量插入:从乌龟到猎豹的蜕变分页查询:加载百万数据异步处理:拒绝界面