ros(7)自定义service数据
创建Persom.srv
新建srv文件夹
在srv文件夹中创建Persom.srv,编辑文件
string name
uint8 age
uint8 sexuint8 unknown = 0
uint8 male = 1
uint8 female = 2---
string result
修改package,xml
add_service_files(FILESPerson.srv
)generate_messages(DEPENDENCIESstd_msgs
)
修改cmake
find_package(catkin REQUIRED COMPONENTSgeometry_msgsroscpprospystd_msgsturtlesimmessage_generation #查找依赖
)add_service_files(FILESPerson.srv
)generate_messages(DEPENDENCIESstd_msgs
)catkin_package(
# INCLUDE_DIRS include
# LIBRARIES learning_serviceCATKIN_DEPENDS geometry_msgs roscpp rospy std_msgs turtlesim message_runtime
# DEPENDS system_lib
)
编译
catkin_make
编辑person_client.cpp
/*** 该例程将请求/show_person服务,服务数据类型learning_service::Person*/#include <ros/ros.h>
#include "learning_service/Person.h"int main(int argc, char** argv)
{// 初始化ROS节点ros::init(argc, argv, "person_client");// 创建节点句柄ros::NodeHandle node;// 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的serviceros::service::waitForService("/show_person");ros::ServiceClient person_client = node.serviceClient<learning_service::Person>("/show_person");// 初始化learning_service::Person的请求数据learning_service::Person srv;srv.request.name = "Tom";srv.request.age = 20;srv.request.sex = learning_service::Person::Request::male;// 请求服务调用ROS_INFO("Call service to show person[name:%s, age:%d, sex:%d]", srv.request.name.c_str(), srv.request.age, srv.request.sex);person_client.call(srv);// 显示服务调用结果ROS_INFO("Show person result : %s", srv.response.result.c_str());return 0;
};
编辑person_server.cpp
/*** 该例程将执行/show_person服务,服务数据类型learning_service::Person*/#include <ros/ros.h>
#include "learning_service/Person.h"// service回调函数,输入参数req,输出参数res
bool personCallback(learning_service::Person::Request &req,learning_service::Person::Response &res)
{// 显示请求数据ROS_INFO("Person: name:%s age:%d sex:%d", req.name.c_str(), req.age, req.sex);// 设置反馈数据res.result = "OK";return true;
}int main(int argc, char **argv)
{// ROS节点初始化ros::init(argc, argv, "person_server");// 创建节点句柄ros::NodeHandle n;// 创建一个名为/show_person的server,注册回调函数personCallbackros::ServiceServer person_service = n.advertiseService("/show_person", personCallback);// 循环等待回调函数ROS_INFO("Ready to show person informtion.");ros::spin();return 0;
}
修改cmake
add_executable(person_server src/person_server.cpp)
target_link_libraries(person_server ${catkin_LIBRARIES})
add_dependencies(person_server ${PROJECT_NAME}_gencpp)add_executable(person_client src/person_client.cpp)
target_link_libraries(person_client ${catkin_LIBRARIES})
add_dependencies(person_client ${PROJECT_NAME}_gencpp)
编译:
catkin_make
运行:
rosrun service_example person_client
rosrun service_example person_server
ros(7)自定义service数据相关推荐
- ROS 学习笔记(三):自定义服务数据srv+server+client 示例运行
ROS 学习笔记(三):自定义服务数据srv+Server+Client 示例运行 一.自定义服务数据: 1.向功能包添加自定义服务文件(AddTwoInts.srv) cd ~/catkin_ws/ ...
- 7.ROS编程学习:自定义服务数据c++调用
目录 一.准备工作--配置vscode 二.服务端创建 1.创建文件demo01_server.cpp 2.服务端的CMakeList.txt配置 3.测试服务端 三.客户端实现 1.创建domo01 ...
- ros自定义service消息.srv文件中增加自定义.msg消息
先制作msg文件 1. 在disinfect_msg包下创建 :testInfo.msg 文件 int32 Id string TargetName string X string Y string ...
- ROS中自定义复杂数据类型
ROS中自定义复杂数据类型 先说一下需求,想要服务的请求数据为一个point(x,y,z)的数组.具体的形式表示如: [point1,point2,...] geometry_msgs::Point ...
- ROS入门-13.服务数据的定义与使用
前面我们已经学习到了spawn和Trigger两种在ROS中已经定义好的服务数据类型的使用方式,当已经定义好的服务数据不能满足我们需求时,就需要根据自己需求来定义一个服务数据的类型并使用 之前在自定义 ...
- ROS中自定义带有header的消息文件
ROS中自定义带有header的消息文件 为什么需要header? 在发布端发布的数据或者在订阅端订阅数据时,数据通常是连续发布或者被订阅的,这些信息没有特定的标识,搞得我们发和收了很多消息,都不知道 ...
- ROS实现串口GPS数据的解析与通信(这篇文章所用的代码和我买的带有ROS功能包的GPS模块的功能包的代码一样)
我发现这篇文章所用的代码和我买的带有ROS功能包的GPS模块的功能包的代码一样!!! https://gitee.com/maxibooksiyi/gps_driver 转载自:https://blo ...
- R语言ggplot2可视化:可视化箱图、在箱图中添加抖动数据点(Dot + Box Plot)、自定义抖动数据点的大小、颜色、数据点分布在箱图中间、添加主标题、副标题、题注信息
R语言ggplot2可视化:可视化箱图.在箱图中添加抖动数据点(Dot + Box Plot).自定义抖动数据点的大小.颜色.数据点分布在箱图中间.添加主标题.副标题.题注信息 目录
- R语言ggplot2可视化:自定义函数在箱图(boxplot)上添加分组样本个数(count)、分组均值(mean)、箱体填充色自定义、数据标签色彩自定义
R语言ggplot2可视化:自定义函数在箱图(boxplot)上添加分组样本个数(count).分组均值(mean).箱体填充色自定义.数据标签色彩自定义 目录
最新文章
- BZOJ1833:[ZJOI2010]数字计数——题解
- php快排,网址快排 快速排名软件 thinkphp快排源码 网站快排程序 百度排名
- linux系统实用脚本,常用linux系统命令及简单小脚本
- win10浏览器_Win10系统中ie浏览器的证书错误应该如何解决?
- Lodop 打印控件
- Go 语言学习笔记(一):基础知识
- 抓取页面图片元素并保存到本机电脑
- SQL数据分析实战:好用的窗口函数
- 【前端就业课 第一阶段】HTML5 零基础到实战(九)列表
- 插座上的Linux充电器.不..Marvell Plug Computer
- python中读取指定的行和列_Python怎么获取excle中指定行和列的值?
- 自定义注解 相关知识汇总(转)
- java每天定时任务
- CentOS6.4 Install Nginx 1.4.4 到特定目录
- 【Less-9】基于SQLI的SQL时间盲注
- 中功率继电器行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- Scrum电子看板工具
- C++内存耗尽怎么办?
- JavaScript基础函数的配置对象Configuration Objects(020)
- ERP如何才能实施成功:ERP成功率为0现象 从具体实施层面剖析
热门文章
- 网页挂码方式html css,CSS代码 解决网页挂马问题
- Java设计模式之迭代器模式
- 【LeetCode笔记】139. 单词拆分(Java、动态规划、字符串、哈希表)
- 安卓软件错误log_Android编程实现捕获程序异常退出时的错误log信息功能详解
- leetcode 6 --- convertZ
- 计算ln_钢筋工程算量培训-钢筋工程量计算公式
- javawed商店商品结算_微信小商店搭建
- 卡扇区数据教程_分享一款硬盘分区和数据恢复软件
- 直博5年!叹我年少轻狂!头4年一篇1作SCI也没有...
- 上午写了一段代码,下午就被开除了,奇怪的知识又增加了