ROS消息, 服务, 主题, 订阅 1

首先, msg, 消息可以理解成一个类, 或者结构体, 用于在C++跟Python之间传递数据用, 里面就是数据结构类似:

  • int8, int16, int32, int64 (plus uint*)
  • float32, float64
  • string
  • time, duration
  • other msg files
  • variable-length array[] and fixed-length array[C]

整数, 浮点数, 字符串, 时间, 时间间隔, 其他的msg文件类型, 固定长度数组跟非固定长度数据, 等等, 其实跟一个java bean的概念很像吧.

例子:

  Header header
  string child_frame_id
  geometry_msgs/PoseWithCovariance pose
  geometry_msgs/TwistWithCovariance twist

这个msg里面包含了, Header, 其他msg类型, string, geometry_msgs/PosewithCovariance, 字面理解就是姿势类.

 

srv, 服务类似msg, 只是用---符号分隔开发送跟回应, 比如:

int64 A
int64 B
---
int64 Sum

就是request是A, B, response是Sum

 

概念介绍完毕, 接下来实战一下, 首先创建msg, 其实就是写一个文件在package的/msg/文件夹.

$ roscd beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg

 

接着, 修改package.xml文件, 让编译跟运行的时候, 认识msg文件:

  <build_depend>message_generation</build_depend>
  <run_depend>message_runtime</run_depend>

 

然后修改CMakeLists.text, 加入msg的支持, 在已有的定义段落内添加即可:

find_package(catkin REQUIRED COMPONENTS
   roscpp
   rospy
   std_msgs
   message_generation
)
catkin_package(
  ...
  CATKIN_DEPENDS message_runtime ...
  ...)
add_message_files(
  FILES
  Num.msg
)

generate_messages(
  DEPENDENCIES
  std_msgs
)

上面的很多内容已经存在, 只需要去掉注释部分即可.

如果以后, 你想查看某个package的msg数据类型, 用这个命令:

$ rosmsg show beginner_tutorials/Num

如果你连包名都记不住, 直接rosmsg show Num也可以.

 

接下来是srv, 再说一次, srv跟msg一个概念, 是个类, 只是分为request跟response而已.

先建一个srv文件夹:

$ roscd beginner_tutorials
$ mkdir srv

 这里, 可以用roscp命令, 从别的package里面copy一个srv文件过来

$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv

 

一样, 检查一下package.xml, 下面的有没有被注释, 有的话, 取消掉.

  <build_depend>message_generation</build_depend>
  <run_depend>message_runtime</run_depend>

 

CMakeLists.c里面同样:

# Do not just add this line to your CMakeLists.txt, modify the existing line
find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)

srv跟msg本质上一样, 所以这里也一样.

add_service_files(
  FILES
  AddTwoInts.srv
)

 service文件也要增加进去.

同样, 如果要查看service, 可以用类似查看msg的命令:

$ rossrv show beginner_tutorials/AddTwoInts

然后, 无论msg,还是srv, 都要再改下面:

generate_messages(
  DEPENDENCIES
  std_msgs
)

 然后启动安装:

$ roscd beginner_tutorials
$ cd ../..
$ catkin_make install

然后你会发现, 在devel/include/beginner_tutorials目录下面,msg被干成了.h文件,可能是被序列化了吧...

OK, msg跟srv就建好了.

 

posted @ 2017-05-17 09:47  Montauk  阅读(972)  评论(0)    收藏  举报