ROS总结理解

news2025/3/1 11:19:41

机器人操作系统入门_中科院软件所-重德智能机器人联合研究中心_中国大学MOOC(慕课)

可以参考视频学习

目录

.1ROS版本

 .2 ROS架构

.3 ROS与IDE安装

.4 Catkin与工作空间

5.ROS的Package结构

6.ROS的常用指令

7.Metapackage

8.Master和Node

.9 Topic和msg

.10 Service和srv

.11 Parameter Serve

12.Action

13.Gazebo

14.RViz

15.Rqt

16.Rosbag

 17.Client Library

References:


.1ROS版本

 .2 ROS架构

ROS可以看作是一种中间件,沟通了自己写的代码和真正的操作系统(如Linux)。ROS由四部分组成:框架+工具+功能+社区。

 ROS中的节点(Node)=电脑中的进程或可执行文件。ROS是一个模块化、分布式的架构,自带了进程管理和通信的相关功能。因此在开发的时候无需自己考虑进程的并行运行、协同调度等问题,简化了开发。

.3 ROS与IDE安装

关于ROS的安装,基本上直接按照官网安装流程(中文)安装即可,不难。安装完成后终端输入roscore,如果无报错说明安装成功。

推荐IDE:RoboWare Studio,官网是这里,但现在貌似上不去了。Github项目主页是这里,基于VS Code开发。官网打不开的话可以去Github下载deb包自己安装,点击这里去Github下载。

.4 Catkin与工作空间

Catkin(中文意思为柳絮))是ROS定制的编译构建系统,是对CMake的扩展。Catkin Workspace则是组织和管理package的文件夹,组织结构如下所示。

src是实际写代码的地方,可以放多个package,如下,其它是系统自动生成的。 

 package是Catkin编译的基本单元。

catkin_make用于初始化创建空间以及编译项目(常用),基本操作命令如下。

  • 初始化工作空间时,工作空间根目录下必须要有src文件夹,否则会提示没有src文件夹,新建不了。

在编译时注意两点:

  1. 一是要在工作空间的根目录下catkin_make,不然会报错;
  2. 二是catkin_make之后记得source一下catkin_ws/devel/setup.bash,否则可能会提示找不到可执行文件。 

建立工作空间可能会遇到如下问题。

提示找不到包,这时候pip install catkin_pkg安装一下就好了。建好的工作空间终端输出如下。

5.ROS的Package结构

中文可叫做功能包,是ROS软件的基本组织形式,是Catkin的基本编译单元。一个package可以包含多个可执行文件(节点)。Package的完整结构如下:

  • CMakeLists.txt(必须):规定Catkin的编译规则
  • package.xml(必须):自我描述,定义package的属性信息,如包名、版本、作者等。一般只需要改<build_depend><run_depend>就可以了。
  • scripts:用于存放一些shell或python脚本
  • include:源代码的头文件
  • src:源代码,如cpp文件、py文件等
  • msg:自定义消息格式,*.msg
  • srv:自定义服务,*.srv
  • action:自定义动作,*.action
  • config:参数、设置文件等,如*.yaml
  • launch:启动规则文件,*.launch,配合roslaunch命令可以一次运行多个可执行文件

6.ROS的常用指令

常用依赖:roscpp、rospy、std_msg、nav_msg等。直接在catkin_create_pkg时在包名后面空格加上即可。

全新新建工作空间终端代码:

mkdir -p ~/catkin_ws/src
cd catkin_ws
catkin_make

接着在工作空间中新建package:

catkin_create_pkg test roscpp rospy std_msg

这样便建好了一个包。

而对于从Github上clone或下载下来的代码,在建好了工作空间后,可以按照如下方式安装。

cd ~/catkin_ws/src
git clone https://github.com/DroidAITech/ROS-Academy-for-Beginners.git
cd ~/catkin_ws
rosdep install --from-paths src --ignore-src --rosdistro=kinetic -y
catkin_make
source ~/catkin_ws/devel/setup.bash

需要注意的是下载的代码需要放到工作空间的src文件夹下,

第二是需要在工作空间根目录下安装包所需的依赖以及CatkinMake。最后别忘了source一下。

当然如果嫌麻烦也可以将最后一行添加到~/.bashrc中,在终端中输入echo "source ~/catkin_ws/devel/setup.bash" >> ~/.bashrc即可。这样每次CatkinMake后,重新打开终端即可。

注意:

最好不要CatkinMake后直接就运行。因为在打开终端时会载入~/.bashrc的内容,但这个时候你还没有CatkinMake,所以你载入的其实是上一次CatkinMake后的结果。当然如果说你的package项目不是第一次编译、名称也没有改变,那么setup.bash中的内容也就没有变,这样CatkinMake前载入也是可以的。

7.Metapackage

可以翻译为“元包”或“虚包”,其本身没有什么内容,只包含有package必备的CMakeLists.txtpackage.xml。但它依赖了其它包(在package.xml中指定),通过这种方式将多个包组合起来。这样做的好处就是在安装的时候就不需要一个个安装,而只安装一个metapackage就可以了。ROS中常见的Metapackage如下:

8.Master和Node

在ROS中,所有的Node都是通过Master管理的,因此如果想启动一个Node,必须先要启动Master(roscore)然后再启动节点(rosrun)。

话题通信中

发布者和订阅者都需要一个节点

(可以理解为连接master的一个端口,通信的话需要给一个端口进行通信) 

Master:节点管理器。每个node启动的时候都要向master注册,管理node之间的通信。启动Master的命令是roscore,启动master的同时也会顺带启动rosout(日志输出)和parameter server(参数服务器)。

Node:ROS的进程,package里的可执行文件运行的示例,一般以功能划分。启动Node的命令是rosun [pkg_name] [node_name](必须先启动好master);也可以以launch文件的方式启动:roslaunch [pkg_name] [*.launch](自动判断master是否运行,没有的话自动启动),这样可以一次启动多个node。rosnode命令则用于查看和管理node,常用功能如下。

实际项目中,一般将用于启动机器人的包命名成name_bringup,这样在终端输入roslaunch name_bringup name.launch就可以启动机器人了

.9 Topic和msg

 Topic:ROS中的异步通信方式,可以看作是一个“频道”,Node之间通过publish-subscribe机制通信,如下所示。

一个Topic可以被多个Node订阅,一个Node也可以发布多个Topic,同时一个Topic也可以由多个Node发送,是一种多对多的关系。Topic在代码层面是字符串。 

Message:Topic内容的数据类型(格式标准),定义在*.msg文件中。Message可以理解为类,而发布的一条条的信息则是类的对象。基本Message类型如下: 

例如ROS里定义的Image的Message格式如下: 

相关命令:

 

 上图是运动小乌龟的时候echo出来的消息

.10 Service和srv

Service:ROS中的同步通信方式,Node间可以通过request-reply方式通信,如下。相比于Topic的“发了就不再管”或“只管接收”的单向通信,Service更加“有来有回”,所以比较适用于一些修改等场景,返回结果是是否修改成功。 

节点(Node)就是Master分配给运行文件的端口

Topic和Service的对比: 

srv:Service通信的数据格式,定义在*.srv文件中。一个示例srv文件如下。 

 

Service常用命令如下: 

 此外在自定义了Topic或Service后,都需要在package.xml和CMakeLists.txt中修改对应内容,如下。

 

.11 Parameter Serve

参数服务器中存储各种参数的字典(键值对),可以用命令行、launch文件和node(API)读写。一般将系统中不常改变的参数、设置等放到参数服务器中。可以理解为参数服务器中的参数对于节点是共享的,节点可以读写内容。

命令行修改参数命令rosparam

launch文件中修改参数:

<param>一般用于单个参数设置,<rosparam>一般用于批量参数设置。

12.Action

 可以理解为升级版的Service。

 Action通信的数据格式定义在*.action中。一个简单的示例如下:

 

13.Gazebo

ROS下的机器人仿真工具,Gazebo基于ODE物理引擎,用于动力学、导航、感知等任务的模拟。官网是这里。直接点击Gazebo的图标即可启动。

14.RViz

全称The Robot Visualization tool,是一个方便监控和调试的可视化工具,其本质上就是将一些订阅得到的数据可视化地显示出来,从而方便调试。在终端中直接输入rviz即可启动(需要先启动Master)。

15.Rqt

可视化工具,显示一些抽象的信息,如rqt_graph用于显示系统的通信架构,rqt_plot用于绘制一些动态参数曲线(如线速度、角速度、IMU数据等),rqt_console用于查看日志等等。

16.Rosbag

ROS的命令行工具,用于记录和回放数据流。

 

基本使用:

 17.Client Library

Client Library是ROS提供的用于编程的API库,如建立node、发布消息、调用服务等。比较常用的两个是roscpprospy

roscpp常用函数如下:

 rospy常用函数如下:

 

References:

ROS学习笔记1

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

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

相关文章

css 改变下划线长度,伪元素模拟border-bottom

要实现文字下方下划线 1 border-bottom配合width <html><head><style>p {border-bottom: 1px solid red;}</style> </head><body><p>选中内容</p> </body></html>直接设置border-bottom&#xff0c;会由于p标签…

vue3使用element-plus

1、下载包 npm install element-plus --save 2、引入 全局引入挂载&#xff1a;引入记得有css文件&#xff08;下载不下来可能是项目正在运行&#xff0c;先关掉&#xff09; import { createApp } from vue import App from ./App.vue import ElementPlus from element-plus …

MySQL 主从复制

现在我们的应用基本都往高性能的方向发展&#xff0c;各种语言都开始推出一些多进程和分布式的框架&#xff0c;其目的就是为了能够做到一个高性能的应用。包括会使用各种MQ和缓存的中间件&#xff0c;其实使用这些中间件的最终目的都是为了能够缓解数据库的压力&#xff0c;数…

下载离线地图地形数据库(3D离线地图开发)

下载离线地图地形数据库&#xff08;3D离线地图开发&#xff09; 发布时间&#xff1a;2020-03-03 版权&#xff1a; 离线地形&#xff1a;是用来表示地表高低起伏的一种三维地形数据库&#xff0c;有了这个地形数据&#xff0c;才能真实的反应出地球表面的高低起伏状态&#…

Docker安装Nginx并修改Nginx配置文件

一、Docker安装Nginx 1、首先在虚拟机上要确保你已经启动了docker。 2、其次登录DockerHub官网&#xff0c;然后搜索nginx&#xff0c;,然后在虚拟机里面输入docker pull nginx,就可以下载nginx的镜像了。 3、注意下载完以后要使用docker images指令查看一下是否下载成功了&am…

市场调查与分析[市场调查员][抽样技术方案][抽样方法][F检验]

正大杯比赛最新参考题&#xff08;预测含必考&#xff09; - 知乎 目录 A市场调查员 B抽样技术方案 一、调查目的、范围、对象及内容 二、抽样方案设计的原则与特点 三、样本区、县的选取 3.1全国区、县的调查总体 3.2区、县分层 (1)地域 (2)区、县类别 四、各阶…

怎么复习信息系统项目管理师?

废话不多说~ 正文开始~ 一、备考前期准备 1、合理规划时间&#xff0c;把握备考节奏 大家在网上经常会看到&#xff0c;考软考高级很简单&#xff0c;说是1个月就可以。 确实现实中存在大神&#xff0c;况且运气还占据一定比例&#xff0c;人家能上&#xff0c;咱真的不一…

鼎医信息加入PolarDB开源数据库社区

近日&#xff0c;上海鼎医信息技术有限公司签署阿里巴巴开源CLA(Contribution License Agreement, 贡献许可协议), 正式与阿里云PolarDB 开源数据库社区牵手。 过去 5 年&#xff0c;阿里云针对 PolarDB 进行了诸多创新&#xff0c;通过采用存储计算分离、软硬一体化设计&#…

SREWorks v1.3 版本发布 | 插件机制发布

在v1.2版本发布之后&#xff0c;SREWorks团队着手开始了v1.3版本的迭代。此次v1.3版本融合了较多用户需求&#xff0c;以及对底座机制进行了较大调整和优化&#xff0c;故发版时间长了很多。下面让我们切入正题&#xff0c;来看看这些大变化究竟是哪些&#xff1f; 1. 插件机制…

Web3——开发第一个智能合约

学习写第一个智能合约&#xff0c;下面连接是集成开发环境 https://github.com/smartcontractkit/full-blockchain-solidity-course-js#lesson-2-welcome-to-remix-simple-storage 点击 “Remix” 来到Remix IDE&#xff0c;这就是我们要写代码的地方&#xff0c;集成开发环境…

一文入门mybatis-plus

mybatis-plus mybatis-plus官网 MyBatis-Plus (opens new window)&#xff08;简称 MP&#xff09;是一个 MyBatis (opens new window)的增强工具&#xff0c;在 MyBatis 的基础上只做增强不做改变&#xff0c;为简化开发、提高效率而生. 可以说呢&#xff0c;在MP基础上还可…

一次想不到的 Bootstrap 类加载器带来的 Native 内存泄露分析

最近我们线上有同学反馈&#xff0c;java 服务在接入了支持预发的 javaagent 以后会出现缓存的内存增长&#xff0c;去掉 agent 启动以后内存增长正常。于是分析了一下这个问题&#xff0c;写了这篇文章。 备注&#xff1a;JVM 堆内存最大 1000M 主要会涉及下面这些内容&#…

防火墙基础技术

目录 一、内容概述 二、防火墙概述 防火墙的应用 防火墙的本质 防火墙的发展历程 防火墙特征 防火墙分类 包过滤防火墙&#xff1a; 包过滤防火墙的缺点&#xff1a; 代理防火墙&#xff1a; 代理防火墙的缺点&#xff1a; 状态检测防火墙&#xff1a; 状态检测防火…

【Linux修炼手册:基本指令(下)】

目录 1 man指令&#xff08;重要&#xff09; 2 more指令 3 less指令&#xff08;重要&#xff09; 4 head指令和tail指令 5 时间相关的指令 6 Cal指令 7 find指令&#xff1a;&#xff08;灰常重要&#xff09; -name 8 grep指令 9 zip/unzip指令 10 其他常见命令 1…

SiPM使用总结

1、SiPM的电子模型 首先我们来看一下二极管的雪崩电子模型&#xff0c;电子模型和雪崩时的电流波形如下图所示&#xff0c; 电流上升的快慢是由电容的充放电速度决定的&#xff0c;充电的时常数TdRS*Cd&#xff0c;放电的时常数 TqRq*Cd&#xff0c;这里Rq>>Rs&#xf…

《Hidden Markov Map Matching Through Noise and Sparseness》读书笔记

摘要 Our test shows how the algorithm breaks down as the sampling rate of the GPS is reduced. We also test the effect of increasing amounts of additional measurement noise in order to assess how well our algorithm could deal with the inaccuracies of other…

甘露糖修饰阿奇霉素|mannose-Azithromycin|甘露糖-聚乙二醇-阿奇霉素

甘露糖修饰阿奇霉素|mannose-Azithromycin|甘露糖-聚乙二醇-阿奇霉素 甘露糖修饰阿奇霉素&#xff0c;溶于大部分有机溶剂&#xff0c;如&#xff1a;DCM、DMF、DMSO、THF等等。在水中有很好的溶解性&#xff0c;取用一定要干燥&#xff0c;避免频繁的溶解和冻&#xff0c;提供…

2022年11月华南师范大学自考本科计算机信息管理系统加考实践题目

《 管理信息系统 》课程试卷 答卷提交说明&#xff1a; 在access环境下填写SQL命令完成以下实践的题目&#xff0c;并返回执行结果的截图&#xff0c;答卷的答题格式如下&#xff0c;包括三部分&#xff1a;题目&#xff0c;SQL文本代码&#xff0c;代码运行截图&#xf…

负载均衡架构

整体架构 设计关键点 4级负载架构 3级负载架构 2级负载架构 技术剖析 DNS 应用 地理位置和机房级别的负载均衡 优点 标准协议 缺点 能力有限&#xff0c;不够灵活DNS劫持DNS缓存 HTTP-DNS 应用场景 App、客户端 优缺点 可以根据业务和团队技术灵活定制非标协议、不通…

企业微信汇报怎么定时提醒?如何导出?

汇报工作的重要性在哪里&#xff1f; 作为职场人&#xff0c;能够准确及时的和自己的领导汇报自己的工作&#xff0c;不仅仅是我们工作的一部分&#xff0c;也是我们和领导工作沟通的一种十分重要的形式。汇报工作的重要性主要体现在&#xff1a; ● 可以让你的领导知道你日常…