一、引言部分 Introduction to ROS
- 本书前
二章介绍ROS的基本概念和包管理系统(package management system),搞清几个关键知识:
-
ROS Master -
ROS nodes -
ROS parameter server -
ROS messages -
ROS services
- 有以下几个目标:
-
为什么学
ROS -
为什么倾向于用
ROS来开发机器人 -
上手
ROS文件系统(ROS filesystem level)和计算图(computation graph level) -
理解
ROS框架的元素 -
上手
ROS Master
- 熟悉
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。


雷达卡



京公网安备 11010802022788号







