自定义srv消息之ros

52 篇文章 0 订阅
43 篇文章 1 订阅

自定义消息

前言

在Ros中,如果没有现成的消息类型来描述要去传递的消息时,我们会自定义消息。

我们会新建一个Package来去自定义消息,通常这个Package写任何的业务逻辑,只是用来声明自定义的消息类型,可以只定义一种消息类型,也可以定义多种消息类型,根据业务需求来定。

所以,首先我们单独的创建一个package,我们取名为demo_srvs,一定要要添加roscpprospyrosmsg的依赖。

这个包名取名也是有讲究的,业务名_srvs

自定义消息流程

1 . 创建srv目录,移除不需要的目录

在pakage目录下新建srv目录,删除掉includesrc目录

2. 新建.srv文件

创建的这个NumOption.srv文件就是自定义消息文件,需要去描述消息的格式。

我们可以编辑代码如下

float64 a
float64 b
string option
---
float64 result

这个.srv文件以---分隔为两部分,上面一部分包含aboption,下面一部分包含一个result.

在这里,上面部分是request的数据,下面部分是response的数据。

此案例中,我们要去做的就是,发送request,例如,a=3b=3option=*,那么server端接收到数据后,做a option b 的操作,即3 * 3,结果放到response中。

这个srv文件遵循一定规范的,每一行表示一种数据。前面是类型,后面是名称。和msg的规范一致,更多类型参考附录

3. 配置package.xml文件

在package.xml种添加如下配置:

Tip

message_generation是消息生成工具,在打包编译时会用到

message_runtime运行时消息处理工具

4. 配置CMakeLists.txt

find_package添加message_generation,结果如下:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rosmsg
  rospy
  message_generation
)

添加add_message_file,结果如下:

add_service_files(
        FILES
        NumOption.srv
)

Tip

这里的NumOption.srv要和你创建的srv文件名称一致,且必须时在srv目录下,否则编译会出现问题

添加generation_msg,结果如下:

generate_messages(
        DEPENDENCIES
        std_msgs
)

Tip

这个配置的作用是添加生成消息的依赖,默认的时候要添加std_msgs

修改catkin_package,结果如下:

catkin_package(
#  INCLUDE_DIRS include
#  LIBRARIES demo_msg
#  CATKIN_DEPENDS roscpp rosmsg rospy
#  DEPENDS system_lib
        CATKIN_DEPENDS message_runtime
)

Tip

为catkin编译提供了依赖message_runtime

检验自定义消息

1. 编译项目

来到工作空间目录下,运行编译

catkin_make

2. 查看生成的头文件

c++的头文件

来到develinclude目录下,如果生成了头文件说明,自定义消息创建成功。

python的py文件

来到devellib/python2.7/dist-package目录下,查看是否生成和package名称相同的目录,以及目录内是否生成对应的py文件。

3. 通过rossrv工具校验

rossrv show demo_srvs/NumOption

查看运行结果,运行结果和自己定义的相一致,说明成功。

----------------------------------------------------------------------------

使用自定义消息

C++使用自定义消息

1. 自定义消息依赖的添加

在开发过程种,自定义消息是以一个package存在的,其他package需要用到这个自定义消息的package,是需要添加依赖的。

来到package.xml中,添加如下:

<build_depend>demo_srvs</build_depend>
<build_export_depend>demo_srvs</build_export_depend>
<exec_depend>demo_srvs</exec_depend>

来到CMakeLists.txt文件中,找到find_package,添加demo_msgs自定义消息依赖,添加结果如下:

find_package(catkin REQUIRED COMPONENTS
  roscpp
  rosmsg
  rospy
  demo_srvs
)

2. 引入依赖

#include "demo_srvs/NumOption.h"

3. 构建消息

Tip

消息依赖加入后,具体类型是demo_srvs::NumOption

Python使用自定义消息

导入模块

from demo_srvs.srv import NumOption

Tip

python导入自定义消息模块,遵循一定的规范,from 模块名.srv import 具体的消息

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_无往而不胜_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值