工具使用-ROS中创建和配置msg及srv
ROS中常用指令
roscp = ros + cp: copies files from/to a ROS package
roscd = ros + cd: changes directory to a ROS packages
rosls = ros+ ls: lists files in a ROS package
rosed = ros + vim: edit a file in a package
rospack = ros + pack:
rosmsg = ros +msg: provides information related to ROS message definitions
rossrv = ros + srv: provides information related to a ROS service definitions
catkin_make: makes (compiles) a ROS package
这里加上了ros的前缀,好处是不用跳到文件所处的路径下,直接就能索引到对应文件,最多加上一个包名。
msg和srv介绍
- msg: msg文件是一种描述ROS中topic中传输数据的信息格式的简单文本。他们可以用作沟通不同语言的中间桥梁。
- srv: srv文件描述了一种服务。和msg的不同点在于其包含两部分。一部分是请求格式一部分是响应的格式。
msg文件应该放在相应包下msg
文件 夹下,类似的srv文件应该放在srv
文件夹下。
msg文件就是一种简单的文本文件,文本的每一行定义了一个变量的变量类型和变量名,比如
Header header
stamp s1
int64 x
int64 y
string child_frame_id
geometry_msgs/PoseWithCovariance pose
float32 a
int64 b
等等, ros中的数据类型很多,包含基础类型比如int8, int16, int32, int64, float32,string
等,还包含自己顶以的一些类型,Header
是ros中的一种特殊类型, 它包含了一个时间戳和点的x,y坐标.
srv格式如下:
1 | int64 A |
其中与msg最大的不同在---
分割成两部分。
msg文件的创建和配置
msg文件的创建非常简单,和后面的srv文件一样,既然都是文本文件,那么可以直接创建文本文件
1 | # 在包 beginner_tutorials/msg文件夹下创建 |
然后在文件中填写该消息需要的数据格式和变量名称, 比如
string first_name
string last_name
uint8 age
uint32 score
至此msg文件创建好了。创建好之后还需要进行配置,才能供cpp, python文件调用。
那么如何配置呢?
首先打开package.xml文件,打开
message_generation
依赖和生成时选项1
2<build_depend> message_generation </build_generation> # 编译需要
<exec_depend> message_runtime </exec_depend> # 运行需要修改CMakeLists.txt文件
首先在find_package中加入新添加的依赖包message_generation
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
这些是让包在编译之前先找到这些依赖包,从而才能进行编译运行。
另外,需要将依赖包高速运行时环境
catkin_package(
…
CATKIN_DEPENDS message_runtime
…)
设置好编译和运行需要依赖的包后,需要高速CMakeList文件想要编译的是那些msg
1
2
3
4
5add_message_files(
FILES
# Message1.msg
# Message2.msg # 文件示例
Num.msg)至此CMakeList知道需要的msg文件的配置和依赖,那么还需要
generate_messages()
函数被调用generate_messages(
DEPENDENCIES
std_msgs
)
最后这个generate_messages()的逻辑我还有点不大懂
msg的相关指令
rosmsg show beginner_tutorials/Num # 显示对应package下的msg的内容
rosmsg show Num # 如果没有指定package name ,那么将显示所有包中的Num msg的内容,同时给出对应的package名
rosmsg -h # help
创建srv文件
roscd beginner_tutorials/srv
vim AddTwoInts.srv
配置的时候 srv同样需要message_generate
编译依赖和message_runtime
运行依赖。所以这部分和msg的配置一样。
不同的地方在于srv需要指定添加的srv文件
add_service_files(
FILES
AddTwoInts.srv
)
srv相关指令
rossrv show beginner_tutorials/AddTwoInts
rossrv show AddTwoInts # 这部分和rosmsg功能一样,只是不同的指令
rossrv -h # help
本文作者 : zhouzongwei
原文链接 : http://yoursite.com/2019/06/23/ros-msg-srv/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!
知识 & 情怀 | 赏或者不赏,我都在这,不声不响