ROS03-基础知识-架构及概念

ROS架构分为三部分,

  • 文件系统级
  • 计算图级
  • 社区级

一、文件系统级

  • 功能包 功能包构成ROS中的原子级。一个功能包具有用于创建ROS程序的最小结构和最少内容。包含ROS节点、配置文件等。
  • 功能包清单 功能包清单提供关于功能包、许可证、依赖关系、编译标志等的信息。包清单由一个名为package.xml的文件管理。
  • 元功能包 ROS中存在大量不同用途的元功能包,如导航功能包集。如果希望将几个具有某些功能的包组织在一起,那么将会使用一个元功能包。
  • 元功能包清单 类似普通功能包,但是有一个XML格式的导出标记。它在结构上有一定限制。
  • 消息类型 消息是一个进程发送到其他进程的信息。ROS中有很多标准类型的消息。消息的说明存储在my_package/msg/MyMessageType.msg 中。
  • 服务类型 服务描述说明存储在my_package/srv/MyServiceType.srv中,为ROS中由每个进程提供的服务定义请求和响应数据结构。
1、工作空间
2、功能包
  • include/package_name/ 此目录包含需要的库的头文件
  • msg/ 开发需要非标准的消息,放于此文件夹下
  • scripts/ 包括Bash、Python和其他任何脚本语言的可执行脚本
  • src/ 存储源文件
  • srv/ 服务类型
  • CMakeLists.txt CMake的生成文件
  • package.xml 功能包清单文件

为了创建、修改功能包,ROS的工具有如下这些

  • rospack 用来获取信息或在系统中查找包
  • catkin_create_pkg 创建一个新的功能包
  • catkin_make 编译工作空间
  • rosdep 安装功能包的系统依赖项
  • rqt_dep 查看包的依赖关系图

rosbash功能包提供了一些类似于Linux命令的命令

  • roscd
  • rosed
  • roscp
  • rosd %列出功能包的目录
  • rosls
3、元功能包

元功能包(简称元包)是一些只有一个文件的特殊包,这个文件就是package.xml。它不包含其他文件如代码等。
使用迁移的特定规则,可以将ROS Fuerte中的功能包和功能包集转换为Kinetic和catkin。具体参考%\url{http://wiki.ros.org/catkin/migrating_from_rosbuild}。
%%%%注:hyperref与listings包有冲突
定位元功能包,使用命令如下\

rosstack find ros_tutorials
4、消息
基本类型序列化C++Python
bool无符号8位intuint8_tbool
int8有符号8位intint8_tint
uint8无符号8位intuint8_tint
int16有符号16位intint16_tint
uint16无符号16位intuint16_tint
int32有符号32位intint32_tint
uint32无符号32位intuint32_tint
int64有符号64位intint64_tint
uint64无符号64位intuint64_tint
float3232位IEEEfloatfloatfloat
float6464位IEEEfloatdoublefloat
stringascii stringstd::stringstring
timesecs/nsecs有符号32位intsros::Timerospy::Time
durationsecs/nsecs有符号32位intsros::Durationrospy::Duration

ROS中的一种特殊数据类型是标头类型,它主要用于添加时间、坐标系和序列号等。标头还允许对消息进行编号。通过在标头类型内部附加信息,我们知道是哪个节点发出的消息,或者可以添加对用户透明的功能以及一些能够被ROS处理的功能。
标头类型包含以下字段
uint32 seq
time stamp
string frame_id

5、服务

如果想要在ROS中创建一个服务,可以使用服务生成器。这些工具能够从最基本的服务说明中生成代码。只要在CMakeLists.txt中加一行gensrv() 命令。

二、计算图级

  • 节点是主要的计算执行进程。
  • 节点管理器 用于节点的名称注册和查找等。也设置节点间的通信。由于ROS本身就是一个分布式网络系统,可以在某一台计算机上运行节点管理器,在该节点管理器或其他计算机上运行节点。
  • 参数服务器 参数服务器能够使数据通过密钥存储在一个系统的核心位置,通过参数,就能在运行时配置节点或改变节点的工作任务。
  • 消息 节点通过消息完成彼此的沟通。
  • 主题 每个消息都必须有一个名称以便被ROS网络分发。消息的发布者和订阅者之间相互解耦。主题的名称必须是唯一的。
  • 服务 在发布主题时,正在发送的数据能以多对多的方式交互。但当需要从某个节点获得一个请求或应答时,就需要服务允许我们直接与某个节点进行交互。
  • 消息记录包 是一种用于保存和回放ROS 消息数据的文件格式。是一种用于存储数据的重要机制。能够获取并记录各种难以收集的传感器数据。我们可以通过消息记录包反复获取实验数据,进行必要的开发和算法测试。在使用复杂机器人进行实验工作时,需要经常使用消息记录包。

计算图级的图形化表示(节点状态图)表示了真实机器人在真实条件下系统的工作状态。
用于创建改图的工具是rqt_graph,这些概念在ros-comm软件库中实现。

1、节点与nodelet

ROS有另一种类型的节点,称为nodelet(动态加载节点)——内部可通信的多个节点。
这类节点可以在单个进程中运行多个节点,每个nodelet为一个线程(轻量级进程)。
这样可以在不使用ROS网络的情况下与其他节点通信,节点通信效率更高,并避免网络拥塞。nodelet对于摄像头和3D传感器这类数据传输量非常大的设备非常有用。
ROS提供了处理节点和显示节点信息的工具

  • rosnode info NODE 输出当前节点信息
  • rosnode kill NODE 结束当前运行节点或发送给定信号
  • rosnode list 列出当前活动节点
  • rosnode machine hostname 列出某一特定计算机上运行的节点或列出主机名称
  • ronode ping NODE 测试节点间的连通性
  • rosnode cleanup 将无法访问节点的注册信息清除

ROS节点的一个强大功能是可以在启动该节点时更改参数。此功能使我们能够改变节点名称、主题名称和参数名称。
例如

rosrun book_tutorials tutorialX topic1 := /level1/topic1

此命令将主题名称topic1改为/level1/topic1.
更改参数和更改主题名称类似,只要在参数名称前添加一个下划线(_),例如\

rosrun book_tutorials tutorialX _parpam := 9.0

但是不能使用系统保留的关键字名称

  • __name 节点名称
  • __log 日志文件存储地址
  • __ip __hostname 表示ROS_IP和ROS_HOSTNAME
  • __master 表示ROS_MASTER_URI
  • __ns 表示ROS_NAMESPACE
2、主题

主题是节点之间用来传输数据的总线。
每个主题都是强类型的,发布到主题上的消息必须与主题的ROS消息类型相匹配。
ROS的主题使用TCP/IP和UDP传输,默认TCPROS,还有UDPROS。
ROS有一个rostopic工具用于主题操作。

  • rostopic bw /topic 显示主题所使用的带宽
  • rostopic echo /topic 将消息输出到屏幕
  • rostopic find message_type 按照类型查找主题
  • rostopic hz /topic 显示主题的发布频率
  • rostopic info /topic 显示主题的信息,例如消息类型、发布者、订阅者
  • rostopic list 显示活动主题的列表
  • rostopic pub /topic type args 将数据发布到主题。允许我们直接从命令行中对任意主题创建和发布数据
  • rostopic type /topic 输出主题的类型,即主题中发布的消息类型
3、服务

当需要与节点通信并以RPC方式获得应答时,将无法通过主题实现,需要使用服务。
服务需要由用户开发,节点并不提供标准服务。包含消息源代码的文件存储在srv文件夹中。
ROS关于服务的命令行工具有两个:rossrv与rosservice。
我们通过rossrv看到服务数据结构的信息,并且与rosmsg具有完全相同的用法。
通过rosservice可以列出服务列表和查询某个服务。支持的命令如下

  • rosservice call /service args 根据命令行参数调用服务
  • rosservice find msg-type 根据服务类型查询服务
  • rosservice info /service 输出服务信息
  • rosservice list 输出获得服务清单
  • rosservice type /service 输出服务类型
  • rosservice uro /service 输出服务的ROSRPC URI
4、消息

ROS使用命令行工具rosmsg来获取有关消息的信息

  • rosmsg show 显示一条消息的字段
  • rosmsg list 列出所有消息
  • rosmsg package 列出包中的所有消息
  • rosmsg packages 列出所有具有该消息的包
  • rosmsg users 搜索使用该消息类型的代码文件
  • rosmsg md5 显示一条消息的MD5求和结果
5、节点管理器

节点管理器的作用是使ROS节点之间能够相互查找。

6、参数服务器

参数服务器是可通过网络访问的共享的多变量字典。节点使用此服务器来存储和检索运行时的参数。
参数服务器使用XMLRPC实现并在ROS节点管理器下运行,这意味着它的API可以通过通用的XMLRPC库进行访问。XMLRPC是一个使用XML编码并以HTTP作为传输机制的远程调用协议。
参数服务器使用XMLRPC数据类型为参数赋值,包括以下类型

  • 32位整数
  • 布尔值
  • 字符串
  • 双精度浮点
  • ISO 8601 日期
  • 列表
  • 基于64位编码的二进制数据

ROS中关于参数服务器的工具是rosparam。其支持的参数如下

  • rosparam list 列出了服务器中的所有参数
  • rosparam get parameter 获取参数值
  • rosparam set parameter value 设置参数值
  • rosparam delete parameter 删除参数
  • rosparam dump file 将参数服务器保存到一个文件中
  • rosparam load file 加载参数文件到参数服务器中

三、ROS开源社区级

其概念主要是ROS资源。包括

  • 发行版
  • 软件库
  • ROS Wiki
  • Bug提交系统
  • 邮件列表
  • ROS问答
  • 博客
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值