ROS手动编写服务端和客户端service demo(C++)
2024-09-01 09:54:22
service demo
原理和 topic 通信方式很像 点击打开链接,因此
1.srv :
进入 service_demo 创建 srv 文件夹,创建 Greeting.srv,将以下代码插入:
string name
int32 age
---
string feedback
这个意思是 client 将自己的名称和年龄发给 server,server 会返回一个字符串。
2.server.cpp
进入 src 文件夹,编写 server.cpp
// 加载必要文件,注意Service_demo的加载方式
# include "ros/ros.h"
# include "service_demo/Greeting.h"
# include "string" // 定义请求处理函数
bool handle_function(service_demo::Greeting::Request &req,
service_demo::Greeting::Response &res)
{
// 此处我们对请求直接输出
ROS_INFO("Request from %s with age %d ", req.name.c_str(), req.age); // 返回一个反馈,将response设置为"..."
res.feedback = "Hi " + req.name + ". I'm server!";
return true;
} int main(int argc, char **argv)
{
// 初始化节点,命名为"greetings_server"
ros::init(argc, argv, "greetings_server"); // 定义service的server端,service名称为“greetings”,收到request请求之后>传递给handle_function进行处理
ros::NodeHandle nh;
ros::ServiceServer service = nh.advertiseService("greetings", handle_function); ros::spin();
return ;
}
3.client.cpp
# include "ros/ros.h"
# include "service_demo/Greeting.h" int main(int argc, char **argv)
{
// 初始化,节点命名为"greetings_client"
ros::init(argc, argv, "greetings_client"); // 定义service客户端,service名字为“greetings”,service类型为Service_demo
ros::NodeHandle nh;
ros::ServiceClient client = nh.serviceClient<service_demo::Greeting>("greetings"); // 实例化srv,设置其request消息的内容,这里request包含两个变量,name和age,见Greeting.srv
service_demo::Greeting srv;
srv.request.name = "HAN";
srv.request.age = ;
if (client.call(srv))
{
// 注意我们的response部分中的内容只包含一个变量response,另,注>意将其转变成字符串
ROS_INFO("Response from server: %s", srv.response.feedback.c_str());
}
else
{
ROS_ERROR("Failed to call service Service_demo");
return ;
}
return ;
}
4.CMakeLists.txt & package.xml
5.编译运行
先运行 server ,再运行 client ,结果就不展示了。
最新文章
- ASP.NET Core真实管道详解[2]:Server是如何完成针对请求的监听、接收与响应的【上】
- protocol buffer c++ python库安装
- 基于WinCE的JSON 类库 源码
- 数据结构算法C语言实现(四)---2.3循环链表与双向链表
- change和onchange触发为什么不立马生效?
- python3百度指数抓取
- dlopen、dlsym和dlclose的使用
- 开发者需要知道的11条HTML5小常识
- E: Some packages could not be authenticated
- nefu 1191 平行宇宙 (bfs)
- maven修改远程和本地仓库地址
- box-decoration-break属性
- Android 获取 上下文环境参数 getResources
- 【CSS】Sticky Footer 布局
- ubuntu apt-get 出现NO_PUBKEY的解决方案
- ScrollView嵌套ListView,禁止ListView的滚动,只让ScrollView可以滚动
- sizeof, strlen区别
- OpenLayers3 学习-1
- 微服务编译、启动jar命令指定配置文件
- 微信小程序保存图片的方法
热门文章
- 利用RabbitMQ实现分布式事务
- Informix从一个表更新多选数据到另一个表
- C# 字符串按设置的格试在前面或后面增加空格或其它字符
- 使用 rm -rf 删除了工程目录,然后从 pycharm 中找了回来
- javascript/js实现 排序二叉树数据结构 学习随笔
- 一行命令开启VNC 和windows之间复制粘贴功能
- 配置java环境遇到的问题及解决方案
- [LeetCode] 342. 4的幂 ☆(是否4 的幂)
- nginx: [emerg] directive ";upstream"; has no opening ";{"; in /application/nginx-1.6.3/conf/nginx.conf:13 ...
- Java中的File操作总结