ros 学习小结

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

ros 学习小结

一、ROS 概述与环境搭建

了解了 ROS 概念、设计目标以及发展历程
安装并运行了 ROS 内置的乌龟小程序
使用 Python 实现 ROS 版本的 HelloWorld
搭建了 ROS 的集成开发环境终端 terminator 和 VSCode,并且也可以编写一些简单的 ROS 小程序
ROS 架构设计,主要学习了文件系统与计算图。

1. 文件系统

在这里插入图片描述

WorkSpace --- 自定义的工作空间
    |--- build:编译空间,用于存放CMake和catkin的缓存信息、配置信息和其他中间文件。
    |--- devel:开发空间,用于存放编译后生成的目标文件,包括头文件、动态&静态链接库、可执行文件等。
    |--- src: 源码
        |-- package:功能包(ROS基本单元)包含多个节点、库与配置文件,包名所有字母小写,只能由字母、数字与下划线组成
            |-- CMakeLists.txt 配置编译规则,比如源文件、依赖项、目标文件
            |-- package.xml 包信息,比如:包名、版本、作者、依赖项...(以前版本是 manifest.xml)
            |-- scripts 存储python文件
            |-- src 存储C++源文件
            |-- include 头文件
            |-- msg 消息通信格式文件
            |-- srv 服务通信格式文件
            |-- action 动作格式文件
            |-- launch 可一次性运行多个节点 
            |-- config 配置信息
        |-- CMakeLists.txt: 编译的基本配置

2. 计算图

(1)	简介:rqt_graph 能够创建一个显示当前系统运行情况的动态图形。ROS 分布式系统中不同进程需要进行数据交互,计算图可以点对点的网络形式表现数据交互过。
(2)	安装:若前期把所有功能包都已安装完成,则直接在终端输入 rosrun rqt_graph rqt_graph,若未安装则输入$ sudo apt install ros-<distro>-rqt $ sudo apt install ros-<distro>-rqt-common-plugins (使用ROS版本如Noetic替换<distro>)
(3)	演示:内置小乌龟案例,终端输入 rqt_graph 或 rosrun rqt_graph rqt_graph,可以看到如下网络拓扑图:

在这里插入图片描述

二、ROS 的通信机制

  • 本章主要是通过 ROS 内置的 turtlesim 案例,介绍 ROS 命令获取节点、话题、话题消息、服务、服务消息与参数的信息,最终再以编码的方式实现乌龟运动的控制、乌龟位姿的订阅、乌龟生成与乌龟窗体背景颜色的修改。
  • ROS 中的基本通信机制主要有如下三种实现策略:话题通信(发布订阅模式) 、服务通信(请求响应模式)、参数服务器(参数共享模式)。
    • 话题通信是 ROS 中使用频率最高的一种通信模式,话题通信是基于发布订阅模式的,也即:一个节点发布消息,另一个节点订阅该消息。话题通信的应用场景也极其广泛,像雷达、摄像头、GPS… 等等一些传感器数据的采集,也都是使用了话题通信。话题通信适用于不断更新的数据传输相关的应用场景。
    • 服务通信也是 ROS 中一种极其常用的通信模式,服务通信是基于请求响应模式的,是一种应答机制。即 一个节点A向另一个节点B发送请求,B接收处理请求并产生响应结果返回给A。服务通信更适用于对时时性有要求、具有一定逻辑处理的应用场景。ROS Master 负责保管 Server 和 Client 注册的信息,并匹配话题相同的 Server 与 Client ,帮助 Server 与 Client 建立连接,连接建立后,Client 发送请求信息,Server 返回响应信息。
    • 参数服务器在 ROS 中主要用于实现不同节点之间的数据共享。参数服务器相当于独立于所有节点的一个公共容器,可以将数据存储在该容器,被不同节点调用,当然不同的节点也可往其存储数据。参数服务器的典型应用场景如下:全局路径规划和本地路径规划。参数服务器不是为高性能而设计的,因此最好用于存储静态的非二进制的简单数据。
  • Topic(话题)与Service(服务)的不同点:
Topic(话题)Service(服务)
通信模式发布/订阅请求/响应
同步性异步同步
底层协议ROSTCP/ROSUDPROSTCP/ROSUDP
缓冲区
实时性
节点关系多对多一对多(一个server)
通信数据MsgSrv
通信数据连续高频的数据发布与接收:雷达、里程计偶尔调用或执行某一项特定功能:拍照、语音识别

三 、 ROS 运行管理

  • 元功能包:在 ROS 中,提供了一种方式可以将不同的功能包打包成一个功能包,当安装某个功能模块时,直接调用打包后的功能包即可,该包又称之为元功能包(metapackage)。
  • launch 文件启动管理节点:一个程序中可能需要启动多个节点,比如:ROS 内置的小乌龟案例,如果要控制乌龟运动,要启动多个窗口,分别启动 roscore、乌龟界面节点、键盘控制节点。如果每次都调用 rosrun 逐一启动,显然效率低下,故采用的优化策略便是使用 ros launch 命令集合 launch 文件启动管理节点。
  • ROS 中重名问题:完成 ROS 中一个系统性的功能,可能涉及到多个功能包,比如实现了机器人导航模块,该模块下有地图、定位、路径规划等不同的子级功能包。本章的重点是“重名”相关的内容:包名重复,会导致覆盖;节点名称重复,会导致先启动的节点关闭;话题名称重复,无语法异常,但是可能导致通信实现出现逻辑问题;参数名称重复,会导致参数设置的覆盖;
  • 解决重名问题的实现方案有两种:重映射(重新起名字);为命名添加前缀。

四 、 ROS 常用组件

  • ROS 中的常用组件,包括:TF坐标变换实现不同类型的坐标系之间的转换;rosbag 用于录制 ROS 节点的执行过程并可以重放该过程;rqt 工具箱集成了多款图形化的调试工具。
  • 完成了 TF 案例:小乌龟跟随(键盘可以控制一只乌龟运动,另一只跟随运动。)需求描述: 产生两只乌龟,中间的乌龟(A)和左下乌龟(B),B 会自动运行至 A 的位置,并且键盘控制时,只是控制 A 的运动,但是 B 可以跟随 A 运行。
  • 实现分析:乌龟跟随实现的核心,是乌龟 A 和 B 都要发布相对世界坐标系的坐标信息,然后订阅到该信息需要转换获取 A 相对于 B 坐标系的信息,最后再生成速度信息,并控制 B 运动。

五、 机器人系统仿真

  • 使用 URDF 创建机器人模型,并在 Rviz 和 Gazebo 中分别显示;使用 Gazebo 搭建仿真环境;使用机器人模型中的传感器(雷达、摄像头、编码器)获取仿真环境数据。
  • ROS 中仿真实现涉及的三大知识点:URDF(Xacro)、Rviz、Gazebo。URDF 只是一个用于描述机器人模型的 xml 文件, 不能单独使用,需要结合 Rviz 或 Gazebo,需要在 Rviz 或 Gazebo 中渲染成图形化的机器人模型,URDF 编写机器人模型代码冗余,xacro 可以优化 URDF 实现,代码实现更为精简、高效、易读。
  • Rviz 与 Gazebo 二者的区别:
rvizgazebo
不同点三维可视化工具,强调把已有的数据可视化显示;提供了很多插件,这些插件可以显示图像、模型、路径等信息,但是前提都是这些数据已经以话题、参数的形式发布。rviz做的事情就是订阅这些数据,并完成可视化的渲染,让开发者更容易理解数据的意义。rviz需要已有数据。三维物理仿真平台,强调的是创建一个虚拟的仿真环境。gazebo不是显示工具,强调的是仿真,它不需要数据,而是创造数据。
  • gazebo 可免费创建一个机器人世界,不仅能仿真机器人的运动功能,还可仿真机器人的传感器数据。而这些数据就可以放到 rviz 中显示,所以使用 gazebo 的时候,经常也会和 rviz 配合使用。当我们手上没有机器人硬件或实验环境难以搭建时,仿真往往是非常有用的。
  • 综上,若有机器人硬件平台,并在上边可以完成需要的功能,用 rviz 应该就可满足开发需求。若没有机器人硬件,或想在仿真环境中做一些算法、应用的测试,可采用 gazebo+rviz。

总结

以上就是 ros 学习小结。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
ROS机器人学习小结全文共9页,当前为第1页。ROS机器人学习小结全文共9页,当前为第1页。ROS机器人学习小结 ROS机器人学习小结全文共9页,当前为第1页。 ROS机器人学习小结全文共9页,当前为第1页。 Ros简介 ROS是一个用于编写软件的灵活框架,它集成了大量的工具、库、协议,提供了类似操作 系统提供所提供的功能,包括硬件抽象描述、底层驱动程序管理、共用功能的执行、程序 间的消息传递、程序发行包的管理,可以极大的简化繁杂多样的机器人平台下的复杂任务创 建与稳定行为控制。 在短短几年里,ROS得到了广泛的应用,各大机器人平台几乎都支持ROS框架,如 Pioneer、Aldebaran Nao、TurtleBot ' Lego NXT、Asctec quadrotor 等。同时,开源社 区内的ROS功能包呈指数级增长,涉及的应用邻域包括轮式机器人、人形机器人、工业机器 人、农业机器人等。 1.1 ROS的设计目标。 ROS的设计目标是提高机器人研发中的软件复用率,所以它被设计成为一种分布式结构, 使得框架中的每个功能模块都能被单独设计、 编译,并且在运行时以松散耦合 的方式结合在一起。而且ROS中的功能模块都封装于独立的功能包(Package ),便于在社 区中共享与分发。 1-2ROS的特点 ROS核心一一分布式网络,使用Tcp/ip的通信方式,实现模块间点对点的松耦合连 接,可以执行若干类型的通信,包括基于话题的(Topic )的异步数据流通信,基于服务 (service )的同步数据流通信,还有参数服务器上的数据存储等(1)点对点的设计 ROS机器人学习小结全文共9页,当前为第2页。ROS机器人学习小结全文共9页,当前为第2页。在ROS中,每一个进程都以一个节点的形式运行,可以分布于多个不同的主机。 ROS机器人学习小结全文共9页,当前为第2页。 ROS机器人学习小结全文共9页,当前为第2页。 传送到接收节点。这种点对点的设计可以分散定位、导航等功能带来的实时计 算压力,适应多机器人的协同工作。 多语言支撑 Python、C++、Java、Octave、LISP 等 架构精简、集成度高 在已有的机器人应用中,软件的复用性是一个巨大的问题。很多的驱动程序、 应用算法、功能模块在设计时过于混乱,导致其很难在其他机器人或应用中进行移植和 二次开发。而 ROS框架具有模块化特点使得每个功能节点可以进行 单独编译,并且使用统一的消息接口让模块的移植、复用更加便捷。 组织化工具包丰富 移动机器人的开发往往需要一些友好的可视化工具和仿真软件, ROS采用组件 的方法将这些工具和软件集成到系统中可以作为一个组件直接使用。例如 3D 可视化工具rvk,开发者可以根据ROS定义的接口在其显示机器人3D模型、周围环境 地图、机器人导航路线等消息。此外, ROS中还有消息查看工具、物理 仿真环境等组件,提高了机器人开发的效率。 免费并且开源 ROS遵照的BSD许可给使用者较大的自由,允许其修改和重新发布其中的应 ROS机器人学习小结全文共9页,当前为第3页。ROS机器人学习小结全文共9页,当前为第3页。丿II代码,共至町以进行商业化的丿I:发和销售o ROS机器人学习小结全文共9页,当前为第3页。 ROS机器人学习小结全文共9页,当前为第3页。 master: (1)每个node启动时都要向master注册。(2)管理node之间的通信master: (1)每个node启动时都要向master注册。(2)管理node之间的通信 master: (1)每个node启动时都要向master注册。(2)管理node之间的通信 master: (1)每个node启动时都要向master注册。(2)管理node之间的通信 node: (1) ROS的进程。(2) pkg里的可执行文件运行的实例(运行C++、python、shell 脚本等可执行文件,加载到内存中,就成为一个 ROS进程,即一个node) 通信方式 topic 通信 ros中的异步通信方式 机制通信机制通信node 之间通过 publish-subscribe nodeA和nodeB发布和订阅并不同步 机制通信 机制通信 多个node可以发布信息给同一 Topic,多个node可以订阅同一 Topic的信息 service 通信 topic通信占用计算资源,node不停的发布信息和接受信息。 service ROS机器人学习小结全文共9页,当前为第4页。ROS机器人学习小结全文共9页,当前为第4页。ROS中的同步通信方式 ROS机器人学习小结全文共9页,当前为第4页。 ROS机器人学习小结全文共9页,当前为第4页。 ROS机器人学习小结全文共9页,当前为第5页。ROS机器人学习小结

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

701044

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值