Ros Srv消息 自定义Srv消息

业务与数据

在Service通讯模型中,我们通常都是Client将数据发送给Server,Server经过业务逻辑处理,将结果返回给client。如下图:


图片.png

在此处,我们需要特别关注的就是传输过程中的RequestResponse,这两个都是数据,一个是请求的数据,一个是响应的数据。从数据的角度来说,数据由业务所产生,但不应该与业务无关,应该与规范相关,其实就是定义规范来限制数据类型,来规范业务间的通讯。

在此,ROS提供的是srv数据来做此操作,如下图:

图片.png

在数据交互过程中的请求阶段,我们将整个包当成一个srv,包含了requestresponse,这个阶段交给client端去填充request的数据。

在数据交互过程中的server处理阶段,server拿到client发送的srv包,从中获得request数据,根据业务逻辑来去处理操作数据。

在数据交互过程中的响应阶段,将server操作的结果填充到srvresponse,将srv返回。

在这三个阶段中,srv自始至终就是一个数据包,规范了client的数据填充,也规范了server的数据填充。

在ROS中对于Service通讯模式的数据类型,系统提供了一些现成的类型供我们参考和使用。

查询所有的消息类型

rossrv list

可以查询出当前支持的所有消息类型。例如我们用到过的roscpp_tutorials/TwoInts

查询消息类型的数据结构

我们还可以对一个消息的数据结构进行查询。

rossrv show roscpp_tutorials/TwoInts

显示的结果为:

int64 a
int64 b
---
int64 sum

结果显示分为两个部分,中间用---分隔。

上面部分是request的数据规范。

下面部分是response的数据规范。

发散与探讨

我们在前面可以发现,ros系统还是提供了大量的数据类型供我们使用。但是数据类型再多,很有可能也满足不了我的实际业务场景,这个时候,我们就需要定制自己的数据类型了。

在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的规范一致

ros不只是提供了int64string两种基本类型供我们描述,其实还有很多:

msg类型 C++对应类型 Python对应类型
bool uint8_t bool
int8 int8_t int
int16 int16_t int
int32 int32_t int
int64 int64_t intlong
uint8 uint8_t int
uint16 uint16_t int
uint32 uint32_t int
uint64 uint64_t intlong
float32 float float
float64 float float
string std:string strbytes
time ros:Time rospy.Time
duration ros::Duration rospy.Duration

3. 配置package.xml文件

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

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

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
)

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

添加generation_msg,结果如下:

generate_messages(
        DEPENDENCIES
        std_msgs
)

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

修改catkin_package,结果如下:

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

为catkin编译提供了依赖message_runtime

检验自定义消息

1. 编译项目

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

catkin_make

2. 查看生成的头文件

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

3. 通过rossrv工具校验

rossrv show demo_srvs/NumOption

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,711评论 5 468
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,932评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,770评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,799评论 1 271
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,697评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,069评论 1 276
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,535评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,200评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,353评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,290评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,331评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,020评论 3 315
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,610评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,694评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,927评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,330评论 2 346
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,904评论 2 341

推荐阅读更多精彩内容