ROS从入门到放弃(学习笔记1)

Posted lightningwl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ROS从入门到放弃(学习笔记1)相关的知识,希望对你有一定的参考价值。

最近在想着做机器人,机缘巧合接触到了ROS,在这里分享一下我学习ROS的经历。

首先就是安装ROS,安装ROS网上有很多资料可以查到,但是我在安装的时候初始化一直出问题,基本网上什么方法都尝试了,总是在最后一步失败,最后实在没办法了,就淘宝上买了一个ROS安装工具,很快就装好了。真香!

安装并测试好ROS以后,就是学习一些ROS的核心概念,这里我主要是看古月居的视频,我大概把我的理解说一下。(本篇文章只是把自己对基本概念的理解进行阐述)

1.1 ROS是什么

首先就是要知道ROS包括什么?在学习以后,我的理解是ROS是由通信机制、开发工具、应用功能、生态系统组成的集合,主要目标就是用来提高机器人研发中的软件复用率。接下来就可以从这四大部分了解ROS。

  • 通信机制:ROS为我们提供了一个非常重要的松耦合分布式通信框架,这个框架可以抽象成一系列的节点图。
  • 开发工具:ROS提供了诸如命令行&编译器、TF坐标变换、Rviz、QT工具箱、Gazebo等工具来帮助开发。
  • 应用功能:ROS的应用功能是非常庞大的,我们无论开发机械臂还是无人机,任意的机器人都可以在ROS里面找到相关的原型。比如Navigation(导航)、SLAM(建图)、Movelt(机械臂运动规划)。
  • 生态系统:ROS的生态系统包括:发行版(Distribution)、软件源(Repository)、ROS wiki、邮件列表(Mailing list)、ROS Answers、博客(Blog)
  1. 发行版(Distribution):ROS发行版包括一系列带有版本号、可以直接安装的功能包。
  2. 软件源(Repository):ROS依赖于共享网络上的开源代码,不同的组织机构可以开发或者共享自己的机器人软件。
  3. ROS wiki:记录ROS信息文档的主要论坛。
  4. 邮件列表(Mailing list):交流ROS更新的主要渠道,同时也可以交流ROS开发的各种疑问。
  5.  ROS Answers:咨询ROS相关问题的网站。
  6. 博客(Blog):发布ROS社区中的新闻、图片、视频(http://www.ros.org/news)。

1.2 ROS核心概念

  • 节点和节点管理器:
  1. 节点(Node):是ROS中一个具体的执行单元,是用来执行某个具体功能的可独立运行的可执行文件。不同的节点可以使用不同的编程语言。
  2. 节点管理器(ROS Master):是ROS中的控制中心,是ROS 所有节点的管理者。所有的节点都需要去找节点管理器注册,节点管理器去记录节点的个各种信息,帮助节点之间建立联系。所以我们可以看到各个节点并不知道彼此的存在,他们都是通过节点管理器进行通信的。节点管理器另一个比较重要的功能就是,它可以提供参数服务器,节点可以使用此服务器存储和检索运行时的参数。

ROS为节点之间的通信设置了两种通信方式:话题和服务

  • 话题通信:
  1. 话题(Topics):采用异步通信机制。使用发布者和订阅者模型,同一个话题的订阅者和发布者可以不唯一。话题的通信方式是单向数据的传输,节点可以发布信息到一个话题,同样也可订阅话题来接收消息。
  2. 消息(Messages):通道中传输的数据。用来描述传输话题数据的数据类型,有一定类型和数据结构。使用编程语言无关的.msg文件定义,编译过程中生成对应的代码文件。

 

 

  • 服务通信:
  1. 服务(Service):采用同步通信机制。使用客户端/服务器(C/S)模型,由客户端发送请求数据,服务器完成处理后返回应答数据。使用编程语言无关的.srv文件定义请求和应答的数据结构,编程过程中生成对应的代码文件。

 

话题通信和服务通信的区别:

个人认为,话题通信类似于写信,我们很难及时得到对方的反馈,而服务通信就类似于打电话,很快我们就可以得到对方的反馈。以下则是更加全面的对比:

  • 参数(Parameter):我们知道,节点管理器另一个比较重要的功能就是,它可以提供参数服务器,它会保存一些参数作为一个全局的共享字典。所有节点都可以通过网络来访问这个共享字典,字典里面的数据类型是多变的,变量的名字和变量的值都是要存到字典里面的。参数适合存储静态、非二进制的配置参数,不适合存储动态配置的参数。
  • 文件系统
  1. 功能包(Package):ROS软件中的基本单元,包含节点源码、配置文件、数据定义等。
  2. 功能包清单(Package manifest):记录功能包的基本信息,包含作者信息、许可信息、依赖选项、编辑标志等。
  3. 元功能包(Meta Package):组织多个用于同一目的的功能包。 

 

以上是关于ROS从入门到放弃(学习笔记1)的主要内容,如果未能解决你的问题,请参考以下文章

gentoo从入门到放弃

Linux学习从入门到打死也不放弃,完全笔记整理(持续更新)

[补档][从入门到放弃]——网络流 学习索引

凸优化从入门到放弃(目录)

AI从入门到放弃:BP神经网络算法推导及代码实现笔记

深度学习:从入门到放弃