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

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,添加如下内容

message_generation

message_runtime

修改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;
}

 

你可能感兴趣的:(ROS)