您的位置:首页 > 其它

ROS基础教程学习笔记8-创建ROS msg 和srv

2019-06-25 12:58 176 查看

1.消息(msg)和服务(srv)介绍

  • 消息(msg): msg文件就是一个描述ROS中所使用消息类型的简单文本。它们会被用来生成不同语言的源代码。

  • 服务(srv): 一个srv文件描述一项服务。它包含两个部分:请求和响应。

msg文件存放在package的msg目录下,srv文件则存放在srv目录下。

msg文件样例:

[code]  Header header
string child_frame_id
geometry_msgs/PoseWithCovariance pose
geometry_msgs/TwistWithCovariance twist

srv文件样例:

[code]  int64 A    //A和B为请求
int64 B
---
int64 Sum  //响应

2.使用msg

(1)先在之前创建的package文件下创建信息

[code]$ cd ~/catkin_ws/src/beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg

这样在msg文件夹中会生成一个名为Num.msg的文本,里面只有一行信息:int 64 num

还有关键的一步:我们要确保msg文件被转换成为C++,Python和其他语言的源代码:

查看package.xml, 确保它包含以下两条语句:

[code]<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

如果没有的话就添加进去。

package.xml修改完成之后,需要对CMakeLists.txt文件简单修改,利用find_packag函数,增加对message_generation的依赖,这样就可以生成消息了,可以直接在COMPONENTS的列表里增加message_generation,

CATKIN_DEPENDS message_runtime同时,你需要设置运行依赖项,找到catkin_package(),添加CATKIN_DEPENDS message_runtime

[code]catkin_package(
...
CATKIN_DEPENDS message_runtime ...
...)

找到如下代码块:

[code]# add_message_files(
#   FILES
#   Message1.msg
#   Message2.msg
# )

去掉注释符号#,用你的.msg文件替代Message*.msg,就像下边这样:

[code]add_message_files(
FILES
Num.msg
)

手动添加.msg文件后,我们要确保CMake知道在什么时候重新配置我们的project。 确保添加了如下代码:

[code]generate_messages(
DEPENDENCIES
std_msgs
)

(2)使用rosmsg

[code]$ rosmsg show beginner_tutorials/Num

就会显示Num.msg文件中的内容:

[code]int64 num

如果忘了所在的package名字,可以输入:

[code]$ rosmsg show Num

此时会显示:

[code][beginner_tutorials/Num]:
int64 num

3.使用srv

(1)在之前的package中创建一个src文件

[code]$ roscd beginner_tutorials
$ mkdir srv

使用roscp命令从package文件中复制一个服务文件:

[code]$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

还有很关键的一步:我们要确保srv文件被转换成C++,Python和其他语言的源代码。

 

现在认为,你已经如前边所介绍的,在CMakeLists.txt文件中增加了对message_generation的依赖。:

[code]find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation)

这一步前面msg信息已经修改了。msg srv都起作用

同样,跟msg文件类似,你也需要在CMakeLists.txt文件中做一些修改。查看上边的说明,增加额外的依赖项。

删掉#,去除对下边语句的注释:

[code]# add_service_files(
#   FILES
#   Service1.srv
#   Service2.srv
# )

用你自己的srv文件名替换掉那些Service*.srv文件:

[code]add_service_files(
FILES
AddTwoInts.srv
)

(2)使用rossrv

[code]$ rossrv show beginner_tutorials/AddTwoInts

将会显示:

[code]int64 a
int64 b
---
int64 sum

和rosmsg一样,可以不用package查看:

[code]$ rossrv show AddTwoInts
[beginner_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum

[rospy_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum

4.msg和srv都需要的步骤

在CMakeLists.txt文件中找到下面这部分:

[code]# generate_messages(
#   DEPENDENCIES
# #  std_msgs  # Or other packages containing msgs
# )

去掉注释并附加上所有你消息文件所依赖的那些含有.msg文件的package

[code]generate_messages(
DEPENDENCIES
std_msgs
)

由于增加了新的消息,所以我们需要重新编译我们的package:

[code]# In your catkin workspace
$ cd ../..
$ catkin_make

5.总结-msg和srv的一般步骤

  • 首先,需要先修改package中的package.xml文件,确保messgae相关语句没有被注释掉;
  • 其次,修改CMakeLists.txt文件:
  • 在find_package函数中加入message_generation依赖;
    在catkin_package函数中加入message_runtime依赖;
    修改add_message_file函数,添加入自己创建的Num.msg文件;或者在add_service_file函数中添加入自己创建的srv文件;
    确保generate_messages函数被调用运行,去掉注释符号#;
  • 最后重现编译

参考文献:http://wiki.ros.org/cn/ROS/Tutorials/CreatingMsgAndSrv

https://www.geek-share.com/detail/2683206823.html

 

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: