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 ,结果就不展示了。

最新文章

  1. ASP.NET Core真实管道详解[2]:Server是如何完成针对请求的监听、接收与响应的【上】
  2. protocol buffer c++ python库安装
  3. 基于WinCE的JSON 类库 源码
  4. 数据结构算法C语言实现(四)---2.3循环链表与双向链表
  5. change和onchange触发为什么不立马生效?
  6. python3百度指数抓取
  7. dlopen、dlsym和dlclose的使用
  8. 开发者需要知道的11条HTML5小常识
  9. E: Some packages could not be authenticated
  10. nefu 1191 平行宇宙 (bfs)
  11. maven修改远程和本地仓库地址
  12. box-decoration-break属性
  13. Android 获取 上下文环境参数 getResources
  14. 【CSS】Sticky Footer 布局
  15. ubuntu apt-get 出现NO_PUBKEY的解决方案
  16. ScrollView嵌套ListView,禁止ListView的滚动,只让ScrollView可以滚动
  17. sizeof, strlen区别
  18. OpenLayers3 学习-1
  19. 微服务编译、启动jar命令指定配置文件
  20. 微信小程序保存图片的方法

热门文章

  1. 利用RabbitMQ实现分布式事务
  2. Informix从一个表更新多选数据到另一个表
  3. C# 字符串按设置的格试在前面或后面增加空格或其它字符
  4. 使用 rm -rf 删除了工程目录,然后从 pycharm 中找了回来
  5. javascript/js实现 排序二叉树数据结构 学习随笔
  6. 一行命令开启VNC 和windows之间复制粘贴功能
  7. 配置java环境遇到的问题及解决方案
  8. [LeetCode] 342. 4的幂 ☆(是否4 的幂)
  9. nginx: [emerg] directive &quot;upstream&quot; has no opening &quot;{&quot; in /application/nginx-1.6.3/conf/nginx.conf:13 ...
  10. Java中的File操作总结