ROS 创建msgs srv 具体步骤

本博客是ROS入门教程,详细介绍了创建ROS消息和服务的方法。包括创建自定义ROS消息,确保msg文件转换为多语言源代码;创建srv文件,将其转换为多语言代码;多次编译工作空间,并通过rosmsg show和rossrv show命令检查ROS对消息和服务的识别情况。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS入门教程-1.1.10 创建ROS消息和ROS服务

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

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

  • 在ROS中有一个特殊的数据类型:Header,它含有时间戳和坐标系信息。

  • 下面是一个msg文件的样例,它使用了Header,string,和其他另外两个消息类型。

Header header
  string child_frame_id
  geometry_msgs/PoseWithCovariance pose
  geometry_msgs/TwistWithCovariance twist
  • srv文件分为请求和响应两部分,由'---'分隔。其中A和B是请求, 而Sum是响应。下面是srv的一个样例:
int64 A
int64 B
---
int64 Sum

一. 创建自定义的ROS消息 :(msg

1.下面,我们将在之前创建的package里定义新的消息。

$ cd ~/catkin_ws/src/beginner_tutorials
$ mkdir msg
$ echo "int64 num" > msg/Num.msg
  • 上面是最简单的例子——在.msg文件中只有一行数据。当然,你可以仿造上面的形式多增加几行以得到更为复杂的消息:
string first_name
string last_name
uint8 age
uint32 score

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

  • 查看package.xml, 确保它包含一下两条语句:
  <build_depend>message_generation</build_depend>
  <run_depend>message_runtime</run_depend>
  • 如果没有,添加进去。

  • 注意:在构建的时候,我们只需要"message_generation"。然而,在运行的时候,我们只需要"message_runtime"。

  • 打开 package.xml 文件 :

将上的两代码添加到这个 package.xml 文件里,如下图所示:

è¿éåå¾çæè¿°

3.编写 beginner_tutorials 程序包中的CMakeLists.txt 中的 find_packag() 函数,增加对 message_generation 的依赖,这样就可以生成消息了。 

  • 打开 CMakeLists.txt 文件:

è¿éåå¾çæè¿°

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rospy
  std_msgs
  message_generation
)

 4.继续编写 beginner_tutorials 程序包中的CMakeLists.txt 中的 catkin_package() 函数, 添加运行依赖:message_runtime , roscpp , rospy , std_msgs

è¿éåå¾çæè¿°

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES beginner_tutorials
   CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
#  DEPENDS system_lib
)

5.继续编写 beginner_tutorials 程序包中的CMakeLists.txt 中的 add_message_files()函数:添加新创建的消息文件: Num.msg 

è¿éåå¾çæè¿°

 add_message_files(
    FILES
#   Message1.msg
#   Message2.msg
    Num.msg
 )

6.继续编写 beginner_tutorials 程序包中的 CMakeLists.txt 。通过上一步手动添加完 .msg 文件后,我们要确保 CMake 知道在什么时候重新配置我们的 project 。 确保添加了如下代码: 添加包含 msgs 的软件包依赖 

è¿éåå¾çæè¿°

 generate_messages(
   DEPENDENCIES
   std_msgs
 )
  • 继续编写 beginner_tutorials 程序包中的 CMakeLists.txt,并为下边这行代码去掉#:
# rosbuild_genmsg()

 

接下来,编译,就可以生成自己的消息源代码了。

二. 编译工作空间:

$ cd ~/catkin_ws
$ catkin_make
$ source devel/setup.bash

三. 编译工作空间:

  • 下面通过rosmsg show命令,检查ROS是否能够识消息。$ rosmsg show [message type]

$ rosmsg show beginner_tutorials/Num
  • 你将会看到:
int64 num
  • 在上边的样例中,消息类型包含两部分: 消息所在的package Num 和 消息名Num
  • 如果你忘记了消息所在的package,你也可以省略掉package名。输入:

$ rosmsg show Num 
  • 你将会看到:
[beginner_tutorials/Num]:
int64 num

四. 创建srv:

1:现在 beginner_tutorials 软件包中创建一个 srv 文件夹,用来存放我们下面要创建的服务文件:

$ roscd beginner_tutorials
$ mkdir srv
  • 这次,不自己写服务文件了, 我们直接复制已有的文件:( roscp 是一个很实用的命令行工具,它实现了将文件从一个 package 复制到另外一个 package 的功能。)

$ roscp rospy_tutorials AddTwoInts.srv srv/AddTwoInts.srv
  • 还有很关键的一步:我们要确保srv文件被转换成C++,Python和其他语言的源代码。
  • 我们打开这个 AddTwoInts.srv 文件看看里面有什么:

gedit srv/AddTwoInts.srv

è¿éåå¾çæè¿°

下面就是编写 package.xml 文件 和 CMakeLists.txt 文件了。跟创建消息的步骤类似:(目的:确保 srv 文件被转换成为 C++ , Python 和其他语言的源代码)

2:查看 beginner_tutorials 程序包中的 package.xml , 确保它包含一下两条语句: (上面创建的 msg 消息的时候就可以添加了,所以这次就不需要添加了)

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

3:编写 beginner_tutorials 程序包中的 CMakeList.txt 文件中的 find_packag() 函数,增加对 message_generation 的依赖:(上面创建 msg 消息的时候已经添加了,所以现在就不需要添加了。可以跳过这个步骤)

è¿éåå¾çæè¿°

(你发现了吧, message_generation 对 msg 和 srv 都起作用)

4:继续编写 beginner_tutorials 程序包中的 CMakeLists.txt 中的 add_service_files() 函数:添加新创建的服务文件 :

è¿éåå¾çæè¿°

 add_service_files(
   FILES
#   Service1.srv
#   Service2.srv
AddTwoInts.srv
 )

5:继续编写 beginner_turtorials 程序包中的 CMakeLists.txt 文件中的 generate_messages() 函数:添加包含 msgs 的软件包依赖: (在创建 msg 消息的时候,就已经添加了,所以现在可以跳过这个步骤)

è¿éåå¾çæè¿°

(你发现了吧, generate_messages() 函数 对msgsrv 都起作用)

四. 编译工作空间:

现在我们回到主工作空间路径来编译一下:

$ cd ~/catkin_ws
$ catkin_make

五. 使用srv:

  • 下面通过rossrv show命令,检查ROS是否能够识该服务。
$ rossrv show beginner_tutorials/AddTwoInts
  • 你将会看到:
int64 a
int64 b
---
int64 sum
  • 跟rosmsg类似, 你也可以不指定具体的package名来查找服务文件:
$ rossrv show AddTwoInts
[beginner_tutorials/AddTwoInts]:
int64 a
int64 b
---
int64 sum

 

 

wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值