【小白向】机器人入门之ROS系统的学习(Ubuntu24.04+ROS2)
目录
一.复杂的机器人系统
二.ROS机器人系统
1.简介
1.节点
2.话题
2.安装
3.测试
4.可视化
RQT:
RVIZ:
显示属性:
显示状态:
一.复杂的机器人系统
依照我们现在的技术来看,机器人系统仍是极其复杂的,往往一个系统就需要数以百计的工程师开发。一个机器人集成了多个领域的多个人的共同智慧,例如:机械工程、电子工程、计算机科学、控制理论等。
我们知道一个系统由通俗地简单地讲是由硬件和软件部分构成的,其中硬件部分包括控制核心,驱动器,执行器,传感器等组成;而软件部分则特定的操作系统,中间件,驱动层,应用层等组成。
二.ROS机器人系统
要认识并理解ROS,我们必须要对Linux或Ubuntu有一些基础的认识,且要会操作,因此:建议大家先补充前置知识:
【学习笔记】ARM64平台下的ubuntu学习总结
1.简介
而提到软件部分,我们就不得不提到一个在机器人领域不可避免的系统——ROS系统。ROS就是传说中的机器人操作系统(Robot Operating System),但其本身并不是一个操作系统,而是可以安装在现在已有的操作系统上(Linux、Windows、Mac)上的软件库和工具集。
实际上,ROS的作用就是提供一个将机器人硬件部件连接起来的简易的软件系统,同时避免了机器人开发中开发者重复造轮子,大大提升了机器人工程的开发效率。
ROS为此设计了一整套通信机制(话题、服务、参数、动作)。通过这些通信机制,ROS实现了将机器人的各个组件给的连接起来。
其中ROS1和ROS2架构分别如下:
首先我们要了解DDS(Data Distribution Service),这是ROS2中的最重要的协议标准。它通过类似于ROS1中的话题发布和订阅形式来进行通信,同时提供了丰富的服务质量管理来保证可靠性、持久性、传输设置等。
围绕DDS又抽象出两层:
- DDS实现层:对不同常见的DDS接口进行再次的封装,让其保持统一性,为DDS抽象层提供统一的API。
- DDS抽象层:这一层将DDS实现层进一步的封装,使得DDS更容易使用。原因在于DDS需要大量的设置和配置(分区,主题名称,发现模式,消息创建,…),这些设置都是在ROS2的抽象层中完成的。
再往上就是RCL(ROS Client Library)ROS客户端库,是ROS的一种API,提供了对ROS话题、服务、参数、Action等接口。不同语言(Python,C++等)有着不同的RCL库,对应相同的功能。
1.节点
如果要学习ROS,我们一定要先理解Node(节点)的含义,这是ROS最常用的概念。一般来说,一个节点往往是一个可执行程序(c++,python等),负责执行一个特定的单一任务,比如发送图像数据的节点,控制车辆运动的节点。节点之间可以通过话题topic,服务service,参数parameter和动作action相互通信,形成一个网络拓扑,即 ros graph,最终完成一个复杂的任务,比如自动驾驶车辆。
2.话题
两个节点node之间需要通信,最重要的方式就是话题 topic ,其相当于一个公共汽车 bus ,里面装载两个节点间约定好格式的消息 msg。
发布/订阅模型:话题是基于发布/订阅模型的通信方式。在这种模型中,数据的生产者(发布者)发布数据到特定的话题,而数据的消费者(订阅者)订阅该话题以接收数据。
数据流:话题可以看作是一个数据流,发布者不断地将数据发送到话题上,而订阅者则从话题上接收这些数据。
非持久性:话题上的数据是实时传输的,一旦发布者发布了数据,订阅者要么即时接收,要么数据就会丢失(除非使用特定的历史记录功能)。
2.安装
这里推荐鱼香大大开发的一键安装脚本
在终端键入:
wget http://fishros.com/install -O fishros && . fishros
按照提示依次选择即可安装ROS2。
3.测试
第一种测试方法:
这里我们启动两个节点(注意要打开两个终端Ctrl+Alt+T分别键入),一个为Listen节点,一个为Speaker节点 ,分别用于收消息和发消息。
ros2 run demo_nodes_py listener
ros2 run demo_nodes_cpp talker
现象如下:
第二种测试方法(小海龟):
打开一个终端键入:
ros2 run turtlesim turtlesim_node
启动小海龟:
再打开一个新的终端,键入:
ros2 run turtlesim turtle_teleop_key
这时我们就可以使用键盘的方向键控制小海龟了。注:当我们的聚焦在这个命令的终端时才能有效控制!
4.可视化
ROS系统中有两个极其重要的可视化工具:RQT(Robot Qt Graphics User Interface)和RVIZ(Robot Visualization Tool)。其中RVIZ是一个3D可视化工具,主要用于显示传感器信息,导航地图等信息;RQT则是一个用于创建和管理ROS图形界面的工具,以便开发者实时查看和调试ROS系统。
RQT:
这里我们先体验一下RQT,向终端中键入:
rqt
我们选择选项卡中的Plugins->Introspection->Node Graph 之后就可看到节点相关的信息。
RVIZ:
首先必须要先向终端中键入:
source /opt/ros/jazzy/setup.bash
setup.bash
:这是一个Bash脚本,它包含了设置ROS环境变量所需的命令。这个脚本通常做了以下几件事情:
- 设置
ROS_ROOT
、ROS_PACKAGE_PATH
、ROS_MASTER_URI
、ROS_IP
等环境变量。- 将ROS的bin目录添加到系统的PATH环境变量中,这样就可以直接在终端中运行ROS命令和节点。
- 设置其他可能需要的ROS相关的环境变量。
执行这条命令后,你就可以在当前终端会话中使用ROS的命令行工具、运行节点、使用ROS的包等。每次打开新的终端会话时,都需要重新执行这条命令(或者将其添加到你的
.bashrc
或.bash_profile
文件中,以便在每次打开终端时自动执行)。
然后运行以下命令启动RVIZ:
ros2 run rviz2 rviz2
这里只做简单说明:
中间的黑色窗口是 3D 视图。
显示器是指在 3D 世界中绘制某些内容的设备,并且可能在显示器列表中有一些可用选项。例如,点云、机器人状态等。
点击“ADD”即可添加新的显示器。
显示属性:
每个显示器都有自己的属性列表。
显示状态:
每个显示都有自己的状态,以帮助您了解一切是否正常。状态可以是:
OK
、Warning
、Error
或Disabled
。
RVIZ就简单介绍这些,更多的等日后再学。
如有错误,感谢指正!
未完待续。 。 。
相关文章:

【小白向】机器人入门之ROS系统的学习(Ubuntu24.04+ROS2)
目录 一.复杂的机器人系统 二.ROS机器人系统 1.简介 1.节点 2.话题 2.安装 3.测试 4.可视化 RQT: RVIZ: 显示属性: 显示状态: 一.复杂的机器人系统 依照我们现在的技术来看,机器人系统仍是极其复杂的,往…...

SNAP-MS策略:可溶性水凝胶微珠,高效表征蛋白质复合物
大家好!今天来了解一种高效的蛋白质复合物纯化和表征策略的文章——《Biofunctionalized dissolvable hydrogel microbeads enable efficient characterization of native protein complexes》发表于《Nature Communications》。蛋白质复合物在生命过程中起着关键作…...

java对象序列化Serializable的应用场景
目录 Java对象序列化的应用场景 网络通信: 对象持久化: 分布式计算: 缓存存储: 远程方法调用(RMI): 基于JMS的消息传递: Java集合类中的对象需要被存储: 对象深…...

springboot-网站开发-linux服务器部署jar格式图片存档路径问题
springboot-网站开发-linux服务器部署jar格式图片存档路径问题!近期在部署自己的网站源码,使用的是jar格式的编码格式。发布到远程服务器后,发现客户捐款的证书图片存在异常。 经过排查代码,找到了原因。下面分享给大家。 1&…...

面试--java基础
Java基础 Java 中的几种基本数据类型了解么?基本类型和包装类型的区别?包装类型的缓存机制了解么?成员变量与局部变量的区别?静态变量有什么作用?静态方法为什么不能调用非静态成员?重载和重写有什么区别?…...

NLP自然语言处理
计算机视觉和图像处理 Tensorflow入门深度神经网络图像分类目标检测图像分割OpenCVPytorchNLP自然语言处理 NLP自然语言处理 一、NLP简介二、文本预处理2.1 文本预处理简介2.2 文本处理的基本方法2.3 文本张量表示方法2.3.1 onehot编码2.3.2 word2vec编码 2.4 文本数据分析2.5…...

web自动化测试基础(从配置环境到自动化实现登录测试用例的执行,vscode如何导入自己的python包)
接下来的一段时间里我会和大家分享自动化测试相关的一些知识希望大家可以多多支持,一起进步。 一、环境的配置 前提安装好了python解释器并配好了环境,并安装好了VScode 下载的浏览器和浏览器驱动需要一样的版本号(只看大版本)。 1、安装浏览器 Chro…...

鸿蒙 Next 实战: 电子木鱼
前言 正所谓:Hello Word 是程序员学任何一门语言的第一个程序实践。这其实也是一个不错的正反馈,那如何让学习鸿蒙 Next 更有成就感呢?下面就演示一下从零开发一个鸿蒙 Next 版的电子木鱼,主打就是一个抽象! 实现要点…...

SQLite SQL调优指南及高级SQL技巧
记忆已更新 以下是《SQLite SQL调优指南及高级SQL技巧》文章的完整输出,字数目标为30000字,详细介绍并结合2024年最新技术趋势和优化策略。代码部分不计入字数统计。 SQLite SQL调优指南及高级SQL技巧 SQLite 是广泛使用的嵌入式数据库,因其…...

WordPress 6.7即将发布的新功能(和截图)
我们一直在密切关注 WordPress 6.7 的开发并测试该版本的测试版,它将带来一些令人兴奋的更新和几个新功能。 例如,我们很高兴地发现即将发布的版本将附带全新的默认主题,并对块编辑器和站点编辑体验进行大规模改进。 在本文中,我…...

SpringBoot整合QQ邮箱
SpringBoot可以通过导入依赖的方式集成多种技术,这当然少不了我们常用的邮箱,现在本章演示SpringBoot整合QQ邮箱发送邮件.... 下面按步骤进行: 1.获取QQ邮箱授权码 1.1 登录QQ邮箱 1.2 开启SMTP服务 找到下图中的SMTP服务区域,…...

低质量数据的多模态融合方法
目录 多模态融合 低质量多模态融合的核心挑战 噪声多模态数据学习 缺失模态插补 平衡多模态融合 动态多模态融合 启发式动态融合 基于注意力的动态融合 不确定性感知动态融合 论文 多模态融合 多模态融合侧重于整合多种模态的信息,以实现更准确的预测,在自动驾驶、…...

计算机毕业设计 基于Django的在线考试系统的设计与实现 Python+Django+Vue 前后端分离 附源码 讲解 文档
🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点…...

Shell脚本linux登录自动检查
.bashrc 用于设置用户的 Bash shell 环境,在每次打开一个新的终端窗口或启动一个新的 Bash 会话时被执行 代码 login_check.sh #!/bin/bash clear LogFileNamepolling.$(date %F-%T) EchoFormat$(for (( i0; i<30; i )); do echo -n ""; done)# 显示…...

Golang | Leetcode Golang题解之第450题删除二叉搜索树的节点
题目: 题解: func deleteNode(root *TreeNode, key int) *TreeNode {var cur, curParent *TreeNode root, nilfor cur ! nil && cur.Val ! key {curParent curif cur.Val > key {cur cur.Left} else {cur cur.Right}}if cur nil {retur…...

Linux 之 Linux应用编程概念、文件IO、标准IO
Linux应用编程概念、文件IO、标准IO 学习任务: 1、 学习Linux 应用开发概念,什么是系统调用,什么是库函数 2、 学习文件IO:包括 read、write、open、close、lseek 3、 深入文件IO:错误处理、exit 等 4、 学习标准IO&a…...

PDF处理技巧:Windows电脑如何选择合适的 PDF 编辑器
您可以阅读本文以了解用于在 PC 上编辑 PDF 的顶级免费软件,而无需花费任何费用即可轻松进行快速编辑、拆分、合并、注释、转换和共享您的 PDF。 PDF 或可移植文档文件是由 Adobe 创建的一种多功能文件格式。它可以帮助您轻松可靠地交换文档,无论相关方…...

【c++】初步了解类和对象2
1、类的作用域 类定义了一个新的作用域,类的所有成员都在类的作用域中。在类体外定义成员时,需要使用 :: 作用域操作符指明成员属于哪个类域。 如图,此时在类内声明了函数firstUniqChar(),在类外进行了函数体的具体定义。 但是却…...

Python库pandas之四
Python库pandas之四 输入/输出read_json函数应用实列 输入/输出 read_json 函数 词法:pandas.read_json(path_or_buf, *, orientNone, typ‘frame’, dtypeNone, convert_axesNone, convert_datesTrue, keep_default_datesTrue, precise_floatFalse, date_unitNo…...

网络攻防技术--第三次作业
文章目录 第三次作业一、通过搜索引擎搜索自己在因特网上的足迹,并确认是否存在隐私和敏感信息泄露问题。如果有信息泄露,提出解决方法。二、结合实例总结web搜索和挖掘的方法。三、网络扫描有哪几种类型?分别有什么作用?利用一种…...

带隙基准Bandgap电路学习(一)
一、原理图 Bandgap中的运放(折叠式Cascode)采用P输入对,是因为运放输入端接的PNP三极管发射极端的电位,电压小,为了确保输入对管能够饱和工作,故采用P输入对管。此外,P管作为输入管,…...

[前端][easyui]easyui select 默认值
function initRegion(key, val) {$(#Region).combobox({url: path /getTypeVaule.do?itemregion&key key "&value" val,editable: false, //不可编辑状态cache: false,valueField: TEMID,textField: TEMID,loadFilter: function (data) {data.unshift({…...

项目开发--大模型--个人问答知识库--chain控制
背景 1、langchain当中的chain prompt | llm | output_parser这个链能更长吗? 在 LangChain 中,链(chain)可以根据需要变得非常长,并且可以包含多种不同类型的组件。链的目的是将多个步骤串联起来,以便以…...

STM32—SPI通讯协议
前言 由于I2C开漏外加上拉电阻的电路结构,使得通信线高电平的驱动能力比较弱,这就会号致,通信线由候电平变到高电平的时候,这个上升沿耗时比较长,这会限制I2C的最大通信速度, 所以,I2C的标准模…...

Android 安装过程五 MSG_INSTALL消息的处理 安装
现在马上进入正式的安装流程。 从前面文章 Android 安装过程四 MSG_INSTALL消息的处理 安装之前的验证知道,在验证之后没有什么问题的情况下,会回调onVerificationComplete()方法,它位于PackageInstallerSession类中。 private void onVe…...

大数据开发--1.3 Linux的常用命令大全
目录 一. 终端命令格式 命令格式 说明: 二. 显示文件列表命令 -ls 作用 格式 ls常用选项 案例 三. 目录操作命令 -pwd 作用 格式 案例 四. 目录操作命令 -cd 作用 格式 案例 五. 目录操作命令 -mkdir 作用 格式 案…...

使用PuTTY连接到Amazon Linux实例
PuTTY 是一款免费的 SSH 客户端,广泛用于从 Windows 系统连接到 Linux 实例。如果你使用的是 Windows Server 2019 或更高版本,可以考虑使用内置的 OpenSSH 工具,但 PuTTY 依然是一个非常受欢迎的选择。 一、先决条件 在使用 PuTTY 连接到 …...

Nexus搭建maven私有仓库
内网访问,内网团队使用一个服务缓存节省外网宽带。 微服务开发中加速 Maven 项目构建,加快团队合作,提高工作效率 允许上传和下载私有库,并且不被外部访问,安全 稳定。 方便内部项目服务的依赖引用,而不需要…...

留存率的定义与SQL实现
1.什么是留存率 留存率是指在特定时间段内,仍然继续使用某项产品或服务的用户占用户总数的百分比。 通常,留存率会以日,周,或月为单位进行统计和分析。 2.SQL留存率常见问题 1.计算新用户登录的日期的次日留存率以及3日留存率 …...

Java的锁机制详解
在并发编程中,锁 是用于控制多个线程对共享资源进行访问的工具。Java提供了多种锁机制,从最基础的 synchronized 到高级的 ReentrantLock,这些锁帮助我们确保线程安全,并能有效避免数据竞争和死锁问题。 1. synchronized 关键字…...