今天学习使用ros发布和订阅自定义的消息以及消息数组,记录,备忘!
说明:
以ubuntu14.04,indigo版本为例
ros工作空间位置:~/workspace/catkin_ws
定义的消息数组为:
std_msgs/Header header
geometry_msgs/Pose[] path
其中Header是由uint32 seq,time stamp,string frame_id组成,它的消息定义在/opt/ros/indigo/share/std_msgs/msg 目录下有详细说明,而Pose是包含了Point和Quaternion类型组成,Point是3维的坐标点,Quaternion是四元数,他们的具体说明在/opt/ros/indigo/share/geometry_msgs/msg目录下。Pose[] 则表示后面定义的path是一个Pose类型的数组。接下来上代码:
cd ~/workspace/catkin_ws/src
#创建功能包
catkin_create_pkg mytest std_msgs rospy roscpp
cd mytest/
mkdir msg && cd msg
新建mypath.msg 的文件,将上面我想创建的两行消息粘贴进来,保存退出。打开mytest目录下的package.xml文件,在下面添加两行:
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
保存退出,然后打开mytest目录下的CMakeLists.txt文件:
- 在find_package中添加geometry_msgs message_generation,
- 取消add_message_files和FILES以及下面反括号的注释,在下面添加一行mypath.msg
- 取消generate_messages所在部分的注释,将geometry_msgs添加进去
- 取消catkin_package所在部分的注释,在std_msgs后面添加message_runtime
然后重新catkin_make编译一下,没有报错。进入mytest/src目录下,新建发布消息节点mytalk.cpp,将下面发布消息代码粘贴进去:
#include <ros/ros.h>
#include <geometry_msgs/Pose.h>
#include "mytest/mypath.h"