目前为止用到的指令
- rospack = ros+pack(age) : provides information related to ROS packages
- roscd = ros+cd : changes directory to a ROS package or stack
- rosls = ros+ls : lists files in a ROS package
- roscp = ros+cp : copies files from/to a ROS package
- rosmsg = ros+msg : provides information related to ROS message definitions
- rossrv = ros+srv : provides information related to ROS service definitions
- catkin_make : makes (compiles) a ROS package
- rosmake = ros+make : makes (compiles) a ROS package (if you're not using a catkin workspace)
辅助知识:
一个程序包要想称为catkin程序包必须符合以下要求:
- 该程序包必须包含catkin compliant package.xml文件
- 这个package.xml文件提供有关程序包的元信息。
- 程序包必须包含一个catkin 版本的CMakeLists.txt文件,而Catkin metapackages中必须包含一个对CMakeList.txt文件的引用。
每个目录下只能有一个程序包。
-
- 这意味着在同一个目录下不能有嵌套的或者多个程序包存在。
最简单的程序包也许看起来就像这样:
· my_package/
· CMakeLists.txt
· package.xml
工作空间示例:
workspace_folder/ -- WORKSPACE
src/ -- SOURCE SPACE
CMakeLists.txt -- 'Toplevel' CMake file, provided bycatkin
package_1/
CMakeLists.txt -- CMakeLists.txt file for package_1
package.xml -- Package manifest for package_1
...
package_n/
CMakeLists.txt -- CMakeLists.txt file for package_n
package.xml -- Package manifest for package_n
改变节点名称:
rosrun turtlesimturtlesim_node __name:=my_turtle
清除rosnode节点:
rosnodecleanup
ping节点
$ rosnode pingmy_turtle
话题和节点
urtlesim_node节点和turtle_teleop_key节点之间是通过一个ROS话题来互相通信的。turtle_teleop_key在一个话题上发布按键输入消息,而turtlesim则订阅该话题以接收该消息。
上图中,红色箭头就表示一个话题,蓝色和绿色表示ros节点,他们通过/turtle1/cmd_vel的话题来通信,这样在键盘上按方向键,消息就发布到话题上了,然后turtle则订阅了这个话题,消息传递给乌龟,乌龟就会移动。
ROSMessages
话题之间的通信是通过在节点之间发送ROS消息实现的。对于发布器(turtle_teleop_key)和订阅器(turtulesim_node)之间的通信,发布器和订阅器之间必须发送和接收相同类型的消息。这意味着话题的类型是由发布在它上面的消息类型决定的。使用rostopic type命令可以查看发布在某个话题上的消息类型。
消息(msg)和服务(srv)介绍
· 消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码。
· 服务(srv): 一个srv文件描述一项服务。它包含两个部分:请求和响应。
msg文件存放在package的msg目录下,srv文件则存放在srv目录下。
msg文件实际上就是每行声明一个数据类型和变量名。可以使用的数据类型如下:
- int8, int16, int32, int64 (plus uint*)
- float32, float64
- string
- time, duration
- other msg files
- variable-length array[] and fixed-length array[C]
在ROS中有一个特殊的数据类型:Header,它含有时间戳和坐标系信息。在msg文件的第一行经常可以看到Header header的声明.
下面是一个msg文件的样例,它使用了Header,string,和其他另外两个消息类型。
Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist
srv文件分为请求和响应两部分,由'---'分隔。下面是srv的一个样例:
int64 A
int64 B
---
int64 Sum
其中 A 和 B 是请求, 而Sum 是响应。
获取帮助
我们认识了很多ros工具,但是很难一下子记住他们,幸运的是,大多数工具都自带帮助。
试试:
$ rosmsg -h
你将看到:
Commands:
rosmsg show Show message description
rosmsg list List all messages
rosmsg md5 Display message md5sum
rosmsg package List messages in a package
rosmsg packages List packages that containmessages
你还可以在子指令中获得帮助:
$ rosmsg show -h
显示:
Usage: rosmsg show[options] <message type>
Options:
-h, --help show this help message and exit
-r, --raw show raw message text, including comments
发布器和订阅器节点
发布器节点和订阅器节点一般在/ROSPACKAGE/scripts中添加,官方例程中在scripts中添加了talk.py和listen.py并将他们都加上可执行文件权限,然后再来编译节点,在工作空间中使用catkin_make。
rosrunbeginner_tutorials talker.py (Python)
使用类似命令执行文件。
服务端和客户端
服务端和客户端的Python程序也是在scripts文件夹中存放的,并拥有可执行权限,最后需要编译节点。官方教程还可以提供更多程序参考。
录制与回放数据
新建一个文件夹/bagfiles来记录数据文件。
使用如下命令记录数据:
rosbag record -a
使用该命令查看数据信息:
rosbag info<your bagfile>
或者回放该数据信息:
rosbag play<your bagfile>
改变回放数据的速率:
rosbag play -r 2<your bagfile>
只记录一个单个话题:
rosbag record -Osubset /turtle1/cmd_vel /turtle1/pose
-O选项是让记录的文件名字为subset。
日志等级说明
日志等级按以下优先顺序排列:
Fatal
Error
Warn
Info
Debug
Fatal是最高优先级,Debug是最低优先级。通过设置日志等级你可以获取该等级及其以上优先等级的所有日志消息。比如,将日志等级设为Warn时,你会得到Warn、Error和Fatal这三个等级的所有日志消息。
概念介绍
Packages
Packages: 软件包,是ROS应用程序代码的组织单元,每个软件包都可以包含程序库、可执行文件、脚本或者其它手动创建的东西。
Manifest
Manifest (package.xml): 清单,是对于'软件包'相关信息的描述,用于定义软件包相关元信息之间的依赖关系,这些信息包括版本、维护者和许可协议等。
package.xml
描述标签
<description>Thebeginner_tutorials package</description>
将描述信息修改为任何你喜欢的内容,但是按照约定第一句话应该简短一些,因为它覆盖了程序包的范围。如果用一句话难以描述完全那就需要换行了
维护者标签
<!-- One maintainer tag required, multipleallowed, one person per tag -->
<!-- Example: -->
<!-- <maintaineremail="jane.doe@example.com"&g