【ROS2】MOMO的鱼香ROS2(二)ROS2入门篇——ROS2初体验

ROS2初体验

  • 引言
  • 专业术语认识
  • 1 认识ROS2
    • 1.1 ROS2版本对照表
    • 1.2 ROS与ROS2对比
    • 1.3 ROS2架构
      • 1.3.1 DDS实现层
      • 1.3.2 ROS中间件接口(RMW)
      • 1.3.3 ROS2客户端库 RCL
  • 2 安装ROS2
    • 2.1 ROS安装(一键式)
    • 2.2 手动安装ROS2
      • 2.2.1 添加ROS软件源
      • 2.2.2 添加公钥
      • 2.2.3 更新
      • 2.2.4 安装ros2
      • 2.2.5 安装依赖
      • 2.2.6 配置环境变量
      • 2.2.7 卸载
      • 2.2.8 ROS2安装路径
  • 3 ROS2测试
    • 3.1 listener和talker
    • 3.2 小海龟
    • 3.3 可视化

引言

笔者跟着鱼香ROS的ROS2学习之旅
学习参考:
【ROS2机器人入门到实战】
笔者的学习目录

  1. MOMO的鱼香ROS2(一)ROS2入门篇——从Ubuntu操作系统开启

专业术语认识

  1. DDS:Data Distribution Service (数据分发服务)。是由对象管理组 (OMG) 于 2003 年发布并于 2007 年修订的开分布式系统标准。
  2. GUI(Graphical User Interface)图形用户界面
  3. CLI(Command-Line Interface)命令行界面
  4. API( Application Programming Interface)应用程序编程接口
  5. RMW (ROS Middleware Interface)中间件接口

1 认识ROS2

ROS2是在ROS的基础上设计开发的第二代机器人操作系统,可以帮助我们简化机器人开发任务,加速机器人落地的 软件库和工具集 。

1.1 ROS2版本对照表

在这里插入图片描述
笔者使用的主要是针对ubuntu18.04 的eloquent和20.04的foxy
ROS2官方更新计划:http://docs.ros.org/en/humble/Releases.html

1.2 ROS与ROS2对比

ROS的不足:
ROS的设计目标是简化机器人的开发,设计了一整套通信机制(话题、服务、参数、动作)。

  1. 强依赖Ros Master(主节点)
  2. 通信基于TCP实现,实时性差、系统开销大
  3. 对Python3支持不友好,需要重新编译
  4. 消息机制不兼容
  5. 没有加密机制、安全性不高

ROS2的改进:

在这里插入图片描述

  1. 去中心化master 节点
  2. 支持多操作系统:linux、windows、mac,甚至是嵌入式RTOS
  3. 采用DDS通信,增强了ROS2的实时性、可靠性和连续性
  4. 支持pyhton3
  5. 编译系统的改进(catkin到ament)
  6. C++标准更新到c++11
  7. 可以使用相同 API 的进程间和进程内通信

ROS2自身只做个进程间的通信,节点和节点之间的通信采用的是DDS服务进行

1.3 ROS2架构

在这里插入图片描述

1.3.1 DDS实现层

Data Distribution Service (数据分发服务)。是由对象管理组 (OMG) 于 2003 年发布并于 2007 年修订的开分布式系统标准。
通过类似于ROS中的话题发布和订阅形式来进行通信,同时提供了丰富的服务质量管理来保证可靠性、持久性、传输设置等。
参考链接:ROS2中间件DDS架构

1.3.2 ROS中间件接口(RMW)

这一层将DDS实现层进一步的封装,使得DDS更容易使用。原因在于DDS需要大量的设置和配置(分区,主题名称,发现模式,消息创建,…),这些设置都是在ROS2的抽象层中完成的。

1.3.3 ROS2客户端库 RCL

RCL(ROS Client Library)ROS客户端库,其实就是ROS的一种API,提供了对ROS话题、服务、参数、Action等接口。

GUI(Graphical UserInterface)就是平常我们说的图形用户界面,大家用的Windows是就是可视化的,我们可以通过鼠标点击按钮等图形化交互完成任务。
CLI(Command-Line Interface)就是命令行界面了,我们所用的终端,黑框框就是命令行界面,没有图形化。

API( Application Programming Interface)应用程序编程接口。API在不同语言中的表现形式不同,在C和C++表现为头文件,在Python中表现为Python文件。

rclc可以实现多个语言的ROS2的库在这里插入图片描述

2 安装ROS2

根据电脑的架构选择合适的ROS2版本
ubuntu18.04 的系统架构为[amd64:bionic]

2.1 ROS安装(一键式)

参考链接:动手安装ROS2

执行下面的命令,然后按照脚本指示文件操作即可

wget http://fishros.com/install -O fishros && . fishros

在这里插入图片描述
选择
[1]:一键安装(推荐):ROS(支持ROS/ROS2,树莓派Jetson)
[1]:更换系统源再继续安装
[2]:更换系统源并清理第三方源
[5]:eloquent(ROS2)
[1]:eloquent(ROS2)桌面版

在这里插入图片描述
安装成功在终端输入

ros2

在这里插入图片描述

2.2 手动安装ROS2

直接在base环境下安装,Ctrl+Alt+T打开终端

2.2.1 添加ROS软件源

echo "deb [arch=$(dpkg --print-architecture)] https://repo.huaweicloud.com/ros2/ubuntu/ $(lsb_release -cs) main" | sudo tee /etc/apt/sources.list.d/ros2.list > /dev/null

2.2.2 添加公钥

sudo apt install curl gnupg2 -y
curl -s https://gitee.com/ohhuo/rosdistro/raw/master/ros.asc | sudo apt-key add -

2.2.3 更新

# 确保包索引是最新的
sudo apt update

2.2.4 安装ros2

sudo apt install ros-humble-desktop

2.2.5 安装依赖

sudo apt install python3-argcomplete -y

2.2.6 配置环境变量

echo "source /opt/ros/humble/setup.bash" >> ~/.bashrc

2.2.7 卸载

# sudo apt remove ros-[版本]-* 
sudo apt remove ros-eloquent-*
sudo apt autoremove

2.2.8 ROS2安装路径

cd /opt/ros/eloquent/
ls

3 ROS2测试

3.1 listener和talker

启动倾听者

ros2 run demo_nodes_py listener

启动说话者

ros2 run demo_nodes_cpp talker

在这里插入图片描述

3.2 小海龟

# 终端1
ros2 run turtlesim turtlesim_node
# 终端2
ros2 run turtlesim turtle_teleop_key

在这里插入图片描述

3.3 可视化

rqt

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/588117.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电商大数据商品采集:阿里巴巴1688电商网站货源产品信息采集

商品详情大数据采集:阿里巴巴1688电商网站货源产品信息采集 ------------- 数据采集满足多种业务场景:适合产品、运营、销售、数据分析、政府机关、电商从业者、学术研究等多种身份 职业。 舆情监控:全方位监测公开信息,抢先获取舆论趋势。 市…

MP4容器结构英文缩写及英文全称(box结构、atom结构、MP4结构)

文章目录 MP4容器结构 参考文章:详解视频封装格式之MP4 MP4容器结构 MP4文件格式是一个复杂的层级结构,下面列出了一些常见的容器及其英文全称和中文标注,方便查阅: ftyp (File Type Box):文件类型盒子moov (Movie B…

java虚拟机内存管理

文章目录 概要一、jdk7与jdk8内存结构的差异二、程序计数器三、虚拟机栈3.1 什么是虚拟机栈3.2 什么是栈帧3.3 栈帧的组成 四、本地方法栈五、堆5.1 堆的特点5.2 堆的结构5.3 堆的参数配置 六、方法区6.1 方法区结构6.2 运行时常量池 七、元空间 概要 根据 JVM 规范&#xff0…

工具--Git详解

在当今的数字时代,版本控制系统已成为开发人员和团队之间协作的重要工具。其中,Git是最受欢迎的版本控制系统之一。它不仅在软件开发中广泛使用,还被应用于许多其他领域。在这篇博客中,我们将深入了解Git的工作原理、基本命令以及…

vue对日期的年、月、日进行增加,转换成指定格式的字符串(yyyy-MM-dd)

let date new Date(2023-12-28); //当前日期 let startYear date.getFullYear(); // 年 let startMonth date.getMonth() 1; // 月 年 let addYear 3; date.setFullYear(startYear Number(addYear )); endDate this.formatDate(date); 月 let addMonth 3; let endMonth…

在Spring Cloud中使用Ribbon完成一个简单的负载均衡demo

Spring Cloud系列断更了有一段时间了,这段时间最近都在忙着项目上的事,天天修复bug以及调整需求,反正各种操劳,了解业务需求,然后开发相关功能,很久都没碰Spring Cloud系列的相关文章了,最近回头…

《Linux Nano命令详解:小而强大的文本编辑器》

《Linux Nano命令详解:小而强大的文本编辑器》 引言: 在Linux系统中,文本编辑是开发和系统管理中不可或缺的一部分。虽然有许多强大的文本编辑器可供选择,但Nano以其简单易用、小巧灵活而备受喜爱。本文将深入探讨Nano命令&…

C动态内存分配与释放介绍

介绍 C语言中的动态内存分配与释放主要通过malloc和free这两个函数来实现。 malloc函数: malloc函数用于在程序运行时动态地从堆(heap)中分配一块指定大小的内存空间。其函数原型如下: void* malloc(size_t size);参数&#xff1…

Android 万能的RecyclerView适配器(BaseRecyclerViewAdapterHelper)

引用&#xff1a; implementation "io.github.cymchad:BaseRecyclerViewAdapterHelper4:4.1.2" BaseQuickAdapter 基本使用&#xff1a; 快速使用 class TestAdapter : BaseQuickAdapter<Status, TestAdapter.VH>() {// 自定义ViewHolder类class VH(parent: V…

亲爱的程序猿们,元旦快乐!

新年祝福 在这个充满欢笑和祝福的日子里&#xff0c;我想对你们说&#xff1a; 新的一年&#xff0c;愿你们像代码一样充满逻辑&#xff0c;像算法一样追求高效&#xff0c;像编程语言一样多样化&#xff01; 2024年即将到来&#xff0c;预测几个行业趋势&#xff1a; 人工…

【回溯】0-1背包Python实现

文章目录 [toc]问题描述形式化描述 回溯法时间复杂性Python实现 个人主页&#xff1a;丷从心 系列专栏&#xff1a;回溯法 问题描述 给定 n n n种物品和一背包&#xff0c;物品 i i i的重量是 w i w_{i} wi​&#xff0c;其价值为 v i v_{i} vi​&#xff0c;背包的容量为 c …

Qt基础之四十五:Qt国际化(I18N)

国际化的英文表述为Internationalization,通常简写为I18N(首尾字母加中间的字符数),这种奇葩的缩写方式,让我想起了NBA球星“字母哥”。 下面看下Qt实现的动态语言切换效果。 一.效果 二.源码 QHSettingDialog.h #ifndef QHSETTINGDIALOG_H #define QHSETTINGDIALOG_H#…

Redis(认识NoSQL,认识redis,安装redis,redis桌面客户端,redis常见命令,redis的Java客户端)

文章目录 Redis快速入门1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端…

【数据结构】详细剖析线性表

顺序表与链表的比较 导言一、线性表二、线性表的存储结构三、顺序表和链表的相同点四、顺序表与链表之间的差异五、存储结构的选择六、静态顺序表的基本操作七、无头结点单链表的基本操作结语 导言 大家好&#xff0c;很高兴又和大家见面啦&#xff01;&#xff01;&#xff0…

轻量应用服务器与云服务器CVM对比——腾讯云

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…

液晶时钟设计

#include<reg51.h> //包含单片机寄存器的头文件 #include<stdlib.h> //包含随机函数rand()的定义文件 #include<intrins.h> //包含_nop_()函数定义的头文件 sbit RSP2^0; //寄存器选择位&#xff0c;将RS位定义为P2.0引脚 sbit RWP2^1; //读写选…

UEFI模拟环境搭建——windows+EDKII

目录 0 说明 1 安装软件 1.1 VS2019的安装 1.2 Python的安装 1.3 IASL的安装 1.4 NASM的安装 1.5 git的下载 2 EDKII的下载 3 配置环境 0 说明 个人感觉UEFI的环境搭建非常复杂&#xff0c;在经过很长一段折磨后&#xff0c;终于还是搭建成功&#xff0c;写下来记录一…

ctfshow——文件上传

文章目录 文件上传思路web 151web 152web 153知识点解题 web 154web 155web 156web 157web 158web 159web160web 161 文件上传思路 web 151 打开页面显示&#xff1a;前台校验不可靠。说明这题是前端验证。 右键查看源代码&#xff0c;找到与上传点有关的前端代码&#xff1a…

软件测试/测试开发丨Linux进阶命令(curl、jq)

1、 curl 接口请求 curl是一个发起请求数据给服务器的工具curl支持的协议FTP、FTPS、HTTP、HTTPS、TFTP、SFTP、Gopher、SCP、Telnet、DICT、FILE、LDAP、LDAPS、IMAP、POP3、SMTP和RTSPcurl是一个非交互的工具 2、 curl 发起 get 请求 -G&#xff1a;使用get请求-d&#xf…

还不会STL???【C++】标准模板库(STL):万字长文,不看后悔,适合小白,快速上手,函数全盘点!

文章目录 STL 是什么01 vector 动态数组1.1介绍1.2方法函数1.3 访问1.3.1 下标访问1.3.2 迭代器访问1.3.3 智能指针 02 stack 栈2.1 介绍2.2 方法函数2.3 栈遍历2.3.1 栈遍历2.3.2 数组模拟栈进行遍历 03 queue 队列3.1 介绍3.2 方法函数3.3 队列模拟 04 deque 双端队列4.1 介绍…