ROS节点中创建msg和srv文件(kinetic/melodic)

坚强是说给别人听的谎言 提交于 2020-01-23 00:34:39

1.msg文件创建

#创建msg文件夹

roscd ros_pkg

mkdir msg

cd msg

#创建msg文件

touch a_msg.msg

gedit a_msg.msg

在a_msg.msg文件中写入msg内容,举个栗子

#数据类型 数据名称
int8 A
int8 B

修改package.xml,添加如下内容

<build_depend>message_generation</build_depend>

<run_depend>message_runtime</run_depend>

修改CMakeList.txt,添加如下内容

find_package(catkin REQUIRED COMPONENTS
   ...
   ...
   std_msgs
   message_generation
   ...
)
catkin_package(
  ...
  CATKIN_DEPENDS message_runtime ...
  ...)
add_message_files(
  FILES
  a_msg.msg
)
generate_messages(
  DEPENDENCIES
  std_msgs
)

 

 

2.srv文件创建

#创建srv文件夹

cd ros_pkg

mkdir srv

cd srv

#创建srv文件

touch b_srv.srv

gedit b_srv.srv

在b_srv.srv文件中写入srv内容,举个栗子,注意三个减号(---)

int64 A    #Request
int64 B
---
int64 sum  #Response

同上,修改package.xml和CMakeList.txt文件,注意Files文件添加行改为如下内容

add_service_files(
  FILES
  b_srv.srv
)

3.验证是否成功

cd workspace

catkin_make

source devel/setup.bash

rosmsg show ros_pkg/a_msg

rossrv show ros_pkg/b_srv

如果show得到的内容跟a.msg和b.srv中写的内容一致,则编译正确!

 

4.msg和srv文件的使用,在cpp文件中添加如下头文件

//使用msg文件
#include "ros_pkg/a_msg.h"

ros_pkg::a_msg msg;
msg.A = 1;
msg.B = 2;


//使用srv文件
#include "ros_pkg/b_srv.h"

int add(ros_pkg::b_srv::Request &req, ros_pkg::b_srv::Response &res){
  res.sum = req.A + req.B;
  return res.sum;
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!