ROS中自定义复杂数据类型
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中自定义复杂数据类型相关推荐
- ROS中自定义带有header的消息文件
ROS中自定义带有header的消息文件 为什么需要header? 在发布端发布的数据或者在订阅端订阅数据时,数据通常是连续发布或者被订阅的,这些信息没有特定的标识,搞得我们发和收了很多消息,都不知道 ...
- ros中自定义msg消息并用其他功能包调用
注:本篇文章仅作为学习笔记,如有侵权,请联系删除. 目录 一.创建msg消息 1.在src目录创建自定义的msg功能包. 2.修改自定义msg功能包内的package.xml文件 3.修改自定义msg ...
- ROS服务中自定义数据类型
ROS服务中自定义数据类型 在上一篇文章中,描述了一种两层封装的点集传输服务消息类型,比较复杂.上一篇文章 事后我就在想何必包两层,直接在服务中利用提供的数据类型定义数组不就行了.所以动手试了一下: ...
- 头文件中自定义PCL点云数据类型并在项目中使用
文章目录 具体操作 1.头文件中定义新的点类型 2.在PCL项目中使用自定义点云类型 3.在ROS项目中使用自定义点云类型 具体操作 1.头文件中定义新的点类型 例如我想要自定义点类型PointXYZ ...
- Redis数据实战之GEO在LBS中应用与自定义新数据类型
Redis数据实战之GEO在LBS中应用与自定义新数据类型 引言 面向 LBS 应用的 GEO 数据类型 GEO 的底层结构 GeoHash 的编码方法 如何操作 GEO 类型 如何自定义数据类型 R ...
- ROS中cv_bridge如何用python3进行编译
最近遇到了个问题,cv_bridge实现了opencv和ros中图像数据类型的转换,但ros-melodic默认python版本是python2.在配置yolact环境的时候,要求是python3. ...
- 如何在ROS中使用PCL—数据格式(1)
在ROS中点云的数据类型 在ROS中表示点云的数据结构有: sensor_msgs::PointCloud sensor_msgs::PointCloud2 pcl::PointCl ...
- 如何来理解Python中的字典数据类型
大家好,我是Python建设者.今天给大家讲解下Python中的字典数据类型. 一.前言 字典是Python中的数据类型,可让将数据存储在键/值对中. 二.什么是字典理解? 字典理解是创建字典的一种优 ...
- ROS之自定义msg
一. 配置步骤,建立文件过程参考古月居的书,修改xml文件和CMakeList文件参考下面链接.注意不使用 <run_depend>message_runtime</run_dep ...
最新文章
- python的lambda表达式是什么?什么是回调函数?
- About darwin OS
- JavaScript的表单事件
- css设置一个div显示在另一个div的上层_CSS工程中常见问题-1
- 蜕变与成长中的青春创作:评论家谈少数民族青年作家的创作
- vue基础之data
- clistctrl获取选中行数据_Power Query基础6:筛选、排序、删重复行
- c语言字符数组与字符串的使用详解
- 计算机硬件基础-笔记
- python自动处理数据_Python自动化测试-使用Pandas来高效处理测试数据
- KindEditor上传本地图片
- 12.SpringBoot集成微信公众号开发
- Mono.Cecil DefaultAssemblyResolver.Dispose
- Java、JSP旅行社旅游信息管理系统
- Elsevier系旗下期刊论文投稿流程
- Unity 编辑器开发实战【Custom Editor】- FSM Editor
- Java中删除cookie
- 详解ISO 13400文档(DoIP协议)-2
- 019基于脑电图信号和CNN的癫痫发作检测2018
- BI体系架构及相关技术介绍