青海快三下载 » ROS2探索总结 » ROS2探索总结-13.话题与服务接口定义

快3预测:ROS2探索总结-13.话题与服务接口定义

青海快三下载 www.41pi3.cn ROS2探索总结-13.话题与服务接口定义

概要:

  • ROS是一个分布式的机器人软件框架,涉及多节点之间的数据通信,绝大部分是基于话题或者服务完成的。

  • 话题和服务在节点之间打通了一条隧道,其中来往的车辆就是需要传输的数据。每个数据长什么样,使用什么样的数据结构,可以使用ROS中已有的定义,也可以根据需求使用语言无关的接口自己定义,在编译过程时,再基于接口定义生成多种语言的代码。

  • 这是ROS中非常重要、非?;〉墓δ?,为ROS的松耦合提供了基础,在ROS2中依然保留了这项接口定义的功能。本篇我们就来看看ROS2中关于接口定义的方法。

一、话题接口定义

  • ROS2中的话题接口称为消息,描述文件以.msg结尾,放置在功能包的msg文件夹下,包含字段(fields)和常量(constants)两部分。

  • 1. 字段

  • 字段使用以下方式定义,包含类型和名称,使用空格分开:

fieldtype1 fieldname1 fieldtype2 fieldname2 fieldtype3 fieldname3

eg:

int32 my_int
string my_string
  • 这里的字段类型可以使用ROS中的标准数据结构定义:

请输入图片描述

  • 也可以使用功能包中已有的消息定义,如: “geometry_msgs/PoseStamped”等。

  • 还可以定义数组,包括数组的长度和范围:

variable-length array[] fixed-length array[C], bounded-length array[<=C]

eg:

int32[] unbounded_integer_array
int32[5] five_integers_array
int32[<=5] up_to_five_integers_array
string string_of_unbounded_size
string<=10 up_to_ten_characters_string
string[<=5] up_to_five_unbounded_strings
string<=10[] unbounded_array_of_string_up_to_ten_characters each
string<=10[<=5] up_to_five_strings_up_to_ten_characters_each
  • 另外,使用以下结构,每个字段还可以设置一个默认值:
fieldtype fieldname fielddefaultvalue

eg:

uint8 x 42
int16 y -2000
string full_name "John Doe"
int32[] samples [-200, -100, 0, 100, 200]

- 2. 常量

  • 常量类似程序中的宏定义,和上边的默认值有点像,只是不允许修改。
constanttype CONSTANTNAME=constantvalue

eg:

int32 X=123
int32 Y=-123
string FOO="foo"
string EXAMPLE='bar'

这里需要注意,字段的名称必须是大写字母组成。

二、服务接口定义

  • 服务接口的描述文件以.srv结尾,放置在功能包中的srv文件夹里。

  • 服务描述文件中包含请求和应答两个部分的消息定义,中间使用“---”分开:

string str --- string str

可以调用已有的消息接口定义,如:

#request constants
int8 FOO=1
int8 BAR=2#request fields
int8 foobar
another_pkg/AnotherMessage msg
---
#response constants
uint32 SECRET=123456#response fields
another_pkg/YetAnotherMessage val
CustomMessageDefinedInThisPackage value
uint32 an_integer
  • 这里需要注意,服务接口中可以调用消息接口,但是不能嵌套调用服务接口!

三、话题接口配置示例

  • 这里创建一个描述通信录事项的消息定义,在功能包中创建msg文件,并在其中创建Contact.msg文件内容:
bool FEMALE=true
bool MALE=false
string first_name
string last_name
bool gender
uint8 age
string address
  • 为了将以上定义编译成不同编程语言对应的文件,还需要配置package.xml和CMakeLists.txt。
  1. package.xml
  • 在package.xml文件中添加以下内容:
<buildtool_depend>rosidl_default_generators</buildtool_depend>
<exec_depend>rosidl_default_runtime</exec_depend>
<member_of_group>rosidl_interface_packages</member_of_group>

2.CMakeLists.txt

  • 在CMakeLists.txt文件中添加以下内容:
find_package(rosidl_default_generators REQUIRED)
 
set(msg_files
"msg/Contact.msg"
)
 
rosidl_generate_interfaces(${PROJECT_NAME}
${msg_files}
)
 
ament_export_dependencies(rosidl_default_runtime)

四、服务接口配置示例

  • srv文件类似,在srv文件夹下创建AddTwoFloats.srv文件,内容如下:
float64 a
float64 b
---
float64 sum
CMakeLists.txt文件中添加:

set(srv_files
   "srv/AddTwoFloats.srv")
 
rosidl_generate_interfaces(${PROJECT_NAME}
   ${msg_files}
   ${srv_files}
)

五、编译生成代码文件

  • 最后,就可以编译功能包了,定义的接口会生成对应的程序文件,自动放置在install文件夹中,例如以上接口示例生成的头文件如下:

请输入图片描述

请输入图片描述

请输入图片描述

  • 有了这些程序文件,后续我们就可以在程序中调用啦!

纠错,疑问,交流: 请进入讨论区点击加入Q群

获取最新文章: 扫一扫右上角的二维码加入“创客智造”公众号


标签: ros2探索总结

  • 游泳池水质可手机扫码查询 数据5分钟更新一次 2019-05-02
  • 楼顶建起1.7万平方米运动场   “8D重庆”又现网红建筑 2019-04-29
  • 涂颜淼:转变思维 做新时代的消防战士 2019-04-29
  • 扫码有风险,公众需警惕 2019-04-20
  • 计划确定之后,还需要落实,就要求计划所涵盖的所有因素都按预订的方案对接转化,尤其是计划所涉及的人一定要达到相应的要求并严格按计划开展活动…… 2019-04-20
  • 所以,让你和你的四两吓坏了![微笑] 2019-04-19
  • 喝了这药真的必死无疑了吗? 2019-04-14
  • 东莞高考泄题?假的! 2019-04-14
  • 总榜第一!大洋网总有惊喜要给你,请足够相信 2019-04-13
  • 久久为功,扎实推进生态宜居的美丽乡村建设 2019-04-13
  • “白色污染”怎么治 网友:塑料垃圾为何屡禁不止 2019-03-30
  • 默滕斯建功卢卡库梅开二度 比利时3 2019-03-30
  • 在这里,医生一起撸串 2019-03-28
  • 1至5月我区为企业和社会减负4200余万元 2019-03-28
  • 大豆自己种,芯片自己造 2019-03-20
  • 82| 255| 450| 14| 763| 146| 807| 515| 738| 520|