一、引言部分 Introduction to ROS
- 本书前
二 章介绍 ROS 的基本概念和包管理系统(package management system),搞清几个关键知识:
-
ROS Master
-
ROS nodes
-
ROS parameter server
-
ROS messages
-
ROS services
- 有以下几个目标:
- 熟悉
ROS 文件系统
-
Packages 包 是ROS最基本的单元,包含了一个或多个ROS程序,库,配置文件等,将这些集成在一起。包是ROS构建和发布的原子(atomic)项目。
-
Package mainfest 包说明 这个文件存在于一个包中,其中包含了包的信息、作者、证书、依赖项、编译标志等。package.xm l文件即时在Packages中的具体形式。
-
me tapackages 元包 元包指一个或多个相关的松耦合在一起的包。原则上来说,元包并不包含任何源码或普通包中常见的文件??
-
me tapackages manifest 元包说明 与包的mainfest文件类似,区别在于这里可能包含做为运行时依赖的别的Packages并声明export标志??
-
Messages(.msg) 消息 是从一个ROS过程到另一个ROS过程的一类信息,我们可以在Packages内的msg文件夹内自定义信息,.msg是信息文件的后缀。
-
Services(.srv) 服务 是一种ROS过程之间 “问/答” 形式的交互方式,问答数据可以在Packages内的srv文件夹内自定义信息,.srv是信息文件的后缀。
-
Repositories 仓库 大多ROS包都使用Version Control System(VCS) 版本控制系统,例如Git, svn等,共享同样的VCS进行包的收集可以称作仓库,仓库内的包可以利用catkin自动发布工具bloom来发布。
- 理解
ROS Package 结构,一个典型的包中含有以下文件夹:
-
config 配置 配置文件夹中包含所有的配置文件,这个文件夹是用户自己创建的,一个普遍共识是用config来命名,并保持所有配置文件都在其中。
-
include/package_name 包含 包含文件夹含有所有需要在包中使用的头文件和库。
-
sc ript 脚本 脚本文件夹包含可执行的Python脚本。
-
src 源 源文件夹存储C++源码。
-
lanuch 启动 启动文件夹存有用于启动一个或多个ROS node 节点的lanuch文件。
-
msg 消息 消息文件夹包含各项消息的定义。
-
srv 服务 服务文件夹包含各类服务的定义
-
action 动作 动作文件夹包含动作文件。
-
package.xm l 说明 这就是上节提到的Package mainfest 包说明。
-
CMakeList.txt 编译包的指导文件。
- 一些常用的
ROS 包 管理命令
-
catkin_create_pkg 产生新包
-
rospack 获取文件系统中包的信息
-
catkin_make 在工作空间中编译包
-
rosdep 安装该包所需要的系统依赖项
- 一些常用的
rosbash 命令
-
roscd 进入包路径或指定路径。
-
roscp 从包中拷贝文件
-
rosed 利用vim修改文件
-
rosrun 执行包中的可执行文件
- 理解
package.xm l 的常见格式
-
一般包含以下语句
-
package name
-
version of the package
-
the package desc ription
-
author details
-
package build dependencies
-
runtime dependencies
-
<build_depend></build_depend> 标签 包含了编译包中源码所必需的其他包。
-
<run_depend></run_depend> 标签 包含了运行包节点所必需的其他包。
- 理解
ROS me tapackages 结构
-
ROS 元包是一类特殊的ROS包,其只包含一个文件,即 package.xm l ,它并不像普通包一样有子文件夹和文件。
-
元包简单地利用 package.xm l 把多个包组合成一个逻辑包,在package.xm l文件中包含一个export标签 ,例如 <export> <me tapackage/> </export>。
-
在元包中,没有用于 catkin的 <buildtool_depend>依赖项,只有 <run_depend>依赖项,也就是元包中成组的这些包。
-
ROS navigation stack就是元包一个很好的例子,一旦ROS和Navigation包安装好后,我们可以利用 roscd navigation 来切换到该包的文件夹,打开 package.xm l 文件,就是一个元包的例子。
-
我在这里发现我的ROS没有这个包,安装该包,参考链接。
- 理解
Messages(.msg) 消息
-
ROS 节点可以读写不同类型的数据,数据的类型利用一种简化的消息描述语言来定义,也叫 ROS Messages ,这些数据类型的描述可以用于在不同语言中生成消息类型的源码。
-
ROS 消息的 data type 数据类型 描述储存于 msg/***.msg 文件中,用户可为其节点自定义消息类型。
-
消息的定义可以包含两种类型: fields 和 constants 。field 分为 field 分为 field type 和 field name。其中 field type 即为发送消息的数据类型,名称即为消息名; constant 在消息文件中用于定义常量。
-
一个简单的消息定义如: int32 number string name float32 speed。其中定义了三个消息,对于每个消息定义,第一部分是 field type 用于定义数据类型,后面跟着 field name 用于在消息中进行索引,比如 msg.number 可以提取到名为 number 的消息的值,定义类似变量定义,索引类似结构体。
-
ROS内建的常用数据类型如下
|基础类型|序列化|C++|Python|
|:—|:–|:—|:—|
|bool(1)|Unsigned 8-bit int|uint8_t(2)|bool|
|int8|Signed 8-bit int|int8_t|int|
|uint8 |Unsigned 8-bit int|uint8_t|int (3)|
|int16 |Signed 16-bit int|int16_t|int|
|uint16 |Unsigned 16-bit int|uint16_t|int|
|int32 |Signed 32-bit int|int32_t|int|
|uint32 |Unsigned 32-bit int|uint32_t|int|
|int64 |Signed 64-bit int|int64_t|long|
|uint64 |Unsigned 64-bit int|uint64_t|long|
|float32 |32-bit IEEE float|float|float|
|float64 |64-bit IEEE float|double|float|
|string |ascii string(4)|std::string|string|
|time |secs/nsecs unsigned 32-bit ints|ros::Time|rospy::Time|
|duration |secs/nsecs signed 32-bit ints|ros::Duration|rospy::Duration|
-
其他数据类型一般用于特定的消息,例如几何消息geometry_msgs和传感器消息sensor_msgs。一类特殊的ROS消息叫做消息头 message header ,消息头能携带信息,例如时间、参考系、帧id、顺序号等。利用消息头我们能获取带有编号的消息,在时间序列中很清晰。消息头一般用来发送例如机器人关节变换等数据。一个例子: uint32 seq time stamp string fr ame_id 这个消息头中包含3个fields,分别代表序列号、时间戳和帧ID。
-
rosmsg 命令可用于检查消息头和 field type ,例如使用这个命令来查看一个消息的消息头: rosmsg show std_msgs/Header。