ROS中自定义复杂数据类型

先说一下需求,想要服务的请求数据为一个point(x,y,z)的数组。具体的形式表示如:

[point1,point2,...]

geometry_msgs::Point

首先是对ROS官方提供的数据类型geometry::Point的认识和理解:

可以看到该数据类型格式如上图。
所以我们想是不是定义一个Point的数组就可以了。

自定义新的数据类型gm_ros_package::Points

来看一下自定义的数据类型的格式:


实现对geometry_msgs::Point 的一种封装。
在代码中定义:

gm_ros_package::Points points;
//points 就是geometry_msgs::Point的数组
//在赋值时许格外注意,使用vector进行赋值

自定义服务消息数据类型gm_ros_package::test

看一下服务消息数据类型的具体形式:

应用代码:

//server端
#include "ros/ros.h"
#include "gm_ros_package/objectPosition.h"
#include "gm_ros_package/test.h"bool process_position(gm_ros_package::test::Request &req,gm_ros_package::test::Response &res)
{   ROS_INFO("x:%f,y:%f,z:%f",req.points.point[0].x,req.points.point[0].y,req.points.point[0].z);res.back = 12;return true;
}int main(int argc,char** argv)
{ros::init(argc,argv,"recive_positon_node");ros::NodeHandle nh;ros::ServiceServer service = nh.advertiseService("object_position",process_position);ROS_INFO("wait the position message!");ros::spin();return 0;
}
//client端
#include "ros/ros.h"
#include "gm_ros_package/objectPosition.h"
#include "gm_ros_package/Points.h"
#include "geometry_msgs/Point.h"
#include "gm_ros_package/test.h"
#include <iostream>
using namespace std;int main(int argc,char** argv)
{ros::init(argc,argv,"send_position_node");ros::NodeHandle nh;ros::ServiceClient client = nh.serviceClient<gm_ros_package::test>("object_position");gm_ros_package::test position;gm_ros_package::Points points;geometry_msgs::Point point[2];point[0].x = 1.0;point[0].y = 2.0;point[0].z = 3.0;point[1].x = 11.0;point[1].y = 21.0;point[1].z = 3.10;//特别注意这里赋值的形式std::vector<geometry_msgs::Point> ar(point,point+2);points.point = ar;position.request.points = points;if(client.call(position)){ROS_INFO("the progress is :%ld",position.response.back);}else{ROS_ERROR("Fail to call service");}
}

总结

对于自己定义的复杂数据类型,当使用时,需要从最内层逐层的向外填充赋值。

ROS中自定义复杂数据类型相关推荐

  1. ROS中自定义带有header的消息文件

    ROS中自定义带有header的消息文件 为什么需要header? 在发布端发布的数据或者在订阅端订阅数据时,数据通常是连续发布或者被订阅的,这些信息没有特定的标识,搞得我们发和收了很多消息,都不知道 ...

  2. ros中自定义msg消息并用其他功能包调用

    注:本篇文章仅作为学习笔记,如有侵权,请联系删除. 目录 一.创建msg消息 1.在src目录创建自定义的msg功能包. 2.修改自定义msg功能包内的package.xml文件 3.修改自定义msg ...

  3. ROS服务中自定义数据类型

    ROS服务中自定义数据类型 在上一篇文章中,描述了一种两层封装的点集传输服务消息类型,比较复杂.上一篇文章 事后我就在想何必包两层,直接在服务中利用提供的数据类型定义数组不就行了.所以动手试了一下: ...

  4. 头文件中自定义PCL点云数据类型并在项目中使用

    文章目录 具体操作 1.头文件中定义新的点类型 2.在PCL项目中使用自定义点云类型 3.在ROS项目中使用自定义点云类型 具体操作 1.头文件中定义新的点类型 例如我想要自定义点类型PointXYZ ...

  5. Redis数据实战之GEO在LBS中应用与自定义新数据类型

    Redis数据实战之GEO在LBS中应用与自定义新数据类型 引言 面向 LBS 应用的 GEO 数据类型 GEO 的底层结构 GeoHash 的编码方法 如何操作 GEO 类型 如何自定义数据类型 R ...

  6. ROS中cv_bridge如何用python3进行编译

    最近遇到了个问题,cv_bridge实现了opencv和ros中图像数据类型的转换,但ros-melodic默认python版本是python2.在配置yolact环境的时候,要求是python3. ...

  7. 如何在ROS中使用PCL—数据格式(1)

    在ROS中点云的数据类型 在ROS中表示点云的数据结构有: sensor_msgs::PointCloud      sensor_msgs::PointCloud2     pcl::PointCl ...

  8. 如何来理解Python中的字典数据类型

    大家好,我是Python建设者.今天给大家讲解下Python中的字典数据类型. 一.前言 字典是Python中的数据类型,可让将数据存储在键/值对中. 二.什么是字典理解? 字典理解是创建字典的一种优 ...

  9. ROS之自定义msg

    一. 配置步骤,建立文件过程参考古月居的书,修改xml文件和CMakeList文件参考下面链接.注意不使用  <run_depend>message_runtime</run_dep ...

最新文章

  1. python的lambda表达式是什么?什么是回调函数?
  2. About darwin OS
  3. JavaScript的表单事件
  4. css设置一个div显示在另一个div的上层_CSS工程中常见问题-1
  5. 蜕变与成长中的青春创作:评论家谈少数民族青年作家的创作
  6. vue基础之data
  7. clistctrl获取选中行数据_Power Query基础6:筛选、排序、删重复行
  8. c语言字符数组与字符串的使用详解
  9. 计算机硬件基础-笔记
  10. python自动处理数据_Python自动化测试-使用Pandas来高效处理测试数据
  11. KindEditor上传本地图片
  12. 12.SpringBoot集成微信公众号开发
  13. Mono.Cecil DefaultAssemblyResolver.Dispose
  14. Java、JSP旅行社旅游信息管理系统
  15. Elsevier系旗下期刊论文投稿流程
  16. Unity 编辑器开发实战【Custom Editor】- FSM Editor
  17. Java中删除cookie
  18. 详解ISO 13400文档(DoIP协议)-2
  19. 019基于脑电图信号和CNN的癫痫发作检测2018
  20. BI体系架构及相关技术介绍

热门文章

  1. 桃李不言,下自成蹊——《大数据》编辑部祝各位老师节日快乐!
  2. 智慧城市知识图谱模型与本体构建方法
  3. 【C语言】第七章 模块化与函数 题解
  4. 超大容量文本的单词统计(洛谷P1308题题解,Java语言描述)
  5. 遍历一个文件夹所有文件
  6. 人生没有后悔药,云主机可以有“时光机”
  7. UVa11549计算器谜题[floyd判圈]
  8. 巧用自媒体平台,让你事半功倍
  9. DSO(dsoframer)的接口文档
  10. 转载:redis备份策略