代码编织梦想

本教程介绍了如何使用ROS的service通信模型,并给出简单的C++示例。至于为什么选择deepin而不是ROS通用的ubuntu,也仅仅是为了支持国产系统。鉴于本人水平有限,如哪位攻城狮网友发现本文存在的问题,烦请留言指正,谢谢!

Service 节点

本教程中我们创建一个add_to_ints_server,用于接收两个int数,并返回他们的和。
确保在beginner_tutorials包的目录下创建了srv目录,并创建AddTwoInts.srv文件。

服务端代码如下

在beginner_tutorials的src目录下创建add_two_server.cpp,并粘贴如下代码

#include "ros/ros.h"
///beginner_tutorials/AddTwoInts.h是由srv文件所生成的。
#include "beginner_tutorials/AddTwoInts.h"

/**
 * add函数两个参数是AddTwoInts.srv中定义的。此函数提供两个int数相加并返回和的服务。
 * 两个Int数存储在req中,结果存储在res中
 * 并返回一个boolean值。
 **/
bool add(beginner_tutorials::AddTwoInts::Request  &req,
         beginner_tutorials::AddTwoInts::Response &res)
{
  res.sum = req.a + req.b;
  ROS_INFO("request: x=%ld, y=%ld", (long int)req.a, (long int)req.b);
  ROS_INFO("sending back response: [%ld]", (long int)res.sum);
  return true;
}

int main(int argc, char **argv)
{
  ros::init(argc, argv, "add_two_ints_server");
  ros::NodeHandle n;

  ///此语句通过advertiseService函数创建一个ROS服务
  ros::ServiceServer service = n.advertiseService("add_two_ints", add);
  ROS_INFO("Ready to add two ints.");
  ros::spin();

  return 0;
}

客户端代码

在beginner_tutorials的src目录下创建add_two_ints_clients.cpp文件,并复制以下代码

#include "ros/ros.h"
#include "beginner_tutorials/AddTwoInts.h"
#include <cstdlib>

int main(int argc, char **argv)
{
  ros::init(argc, argv, "add_two_ints_client");
  if (argc != 3)
  {
    ROS_INFO("usage: add_two_ints_client X Y");
    return 1;
  }

  ros::NodeHandle n;
  ///这里创建一个用于add_two_ints服务的客户端。ServiceClient对象后续用于调用服务
  ros::ServiceClient client = n.serviceClient<beginner_tutorials::AddTwoInts>("add_two_ints");

  ///初始化一个自动生成的AddTwoInts类,并赋值给请求对应的成员。AddTwoInts类包含request和response两个成员
  beginner_tutorials::AddTwoInts srv;
  srv.request.a = atoll(argv[1]);
  srv.request.b = atoll(argv[2]);
  
  ///实际开始调用服务。由于服务调用是阻塞的,直到服务调用完毕后call()才会返回。如果调用成功call()返回true
  ///否则返回false.
  if (client.call(srv))
  {
    ROS_INFO("Sum: %ld", (long int)srv.response.sum);
  }
  else
  {
    ROS_ERROR("Failed to call service add_two_ints");
    return 1;
  }

  return 0;
}

修改CMakeLists.txt

CMakeLists.txt中添加如下内容

add_executable(add_two_ints_server src/add_two_ints_server.cpp)
add_executable(add_two_ints_client src/add_two_ints_client.cpp)

add_dependencies(add_two_ints_server beginner_tutorials_generate_messages_cpp)
add_dependencies(add_two_ints_client beginner_tutorials_generate_messages_cpp)

target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})
target_link_libraries(add_two_ints_client ${catkin_LIBRARIES})

修改完后,进行编译。

实测

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/no_pao_spite/article/details/126983657

9、ros使用c++编写一个简单的service和client-爱代码爱编程

在开始本篇文章之前,默认我们在前面的几篇文章中已经进行了如下的工作: 创建了beginner_tutorial包在beginner_tutorial包中创建了AddTwoInts.srv文件 如果没有满足以上条件的话,请

ros service 和client的测试以及roslaunch的使用_土豆西瓜大芝麻的博客-爱代码爱编程

由于任务需要,安排测试单机可以模拟多少个client来并发访问一个service。 我的思路:在本机启动一个ros service,然后编写一个client来访问这个service,然后测试client能否成功访问。然后再编写launch文件,来批量启动client。 service的功能:名字“add_two_ints_server”,该节点将接收到两个

ros教程六——编写 service and client (c++篇)_i飞越疯人院的博客-爱代码爱编程

本教程介绍如何使用C ++编写Service and Client 节点。 1、编写 Service Node  在这里,将创建服务(“add_two_ints_server”)节点,该节点将接收两个整数并返回总和。将目录更改为catkin工作区之前的教程中创建的beginner_tutorials包: $roscd beginner_tutoria

ros 编写简单的service和client (c++ catkin)-爱代码爱编程

一. 编写service节点 这里,我们将创建一个简单的service节点("add_two_ints_server"),该节点将接收到两个整形数字,并返回它们的和。进入先前你在catkin workspace教程中所创建的beginner_tutorials包所在的目录: cd ~/catkin_ws/src/beginner_tutorials

ROS2学习笔记之编写C++服务service和client篇-爱代码爱编程

ROS2学习笔记之编写C++服务service和client篇 背景前期准备学习内容1. 创建包1.1 更新 package.xml2. 编写服务service节点2.1 代码解释2.2 让service生成可执行文件3 编写客户端client节点3.1 代码解释3.2 生成可执行文件4. 编译运行总结 学习目标:能够用C++编写服务的serv

C++编写简单的Service和Client-爱代码爱编程

编写Service节点 这里,我们将创建一个简单的service节点("add_two_ints_server"),该节点将接收到两个整形数字,并返回它们的和。进入先前你在catkin workspace教程中所创建的包所在的目录:  $ roscd practice/ 在beginner_tutorials包中创建src/add_two_i

ROS入门笔记(十一):编写与测试简单的Service和Client (Python)-爱代码爱编程

ROS入门笔记(十一):编写与测试简单的Service和Client (Python) 文章目录 01 导读02 功能包的创建03 在功能包中创建自定义服务类型3.1 定义srv文件3.2 在package.xml中添加功能包依赖3.3 在CMakeLists.txt添加编译选项04 查看自定义的服务消息05 功能包的源代码编写5.1 编写Ser

ROS系列:五、编写简单的service和client-爱代码爱编程

6.编写简单的service和client 上一节介绍了两个ros节点通过发布与订阅消息的通信方式,现在就介绍ros节点间通信的另外一种方式服务。我们将学到:如何自定义服务类型、server端节点编写、client端节点编写等。我就以实现两个整数求和为例,client端节点向server端节点发送a、b的请求,server端节点返回响应sum=a+b给c

机器人操作系统ROS1(3)-编写简单的Service和Client-爱代码爱编程

在此之前,需要先创建好ROS工作空间以及功能包,具体可参考下面链接:机器人操作系统ROS1(2)-创建工作空间以及功能包 一、srv介绍 srv:srv文件声明了一个服务,包括request(请求)和response(响应),存储在功能包的srv目录下。 srv文件主要用于声明自定义变量,包括std_msgs,geometry_msgs等等,具体变量类

ROS-Note:编写简单的服务和客户端 C++-爱代码爱编程

编写简单的服务和客户端 C++ 编写服务节点 server node 在beginner_tutorials包中创建src/add_two_ints_server.cpp文件 #include "ros/ros.h" #include "beginner_tutorials/AddTwoInts.h" //之前创建的srv文件中生成的头文件 boo

【ROS读书笔记】--- 8-2.服务--编写客户端client程序-爱代码爱编程

“所行之路已有人行!” 准备工作程序源码及分析代码配置文件Cmakelist.txtpackage.xml运行效果 本节将学习如何如何编写客户端cpp以及配置相关文件。大概流程基本这样 准备工作 新建功能包client以及client/src/client_demo.cpp 程序源码及分析 代码 #include<ros/ros

04 ROS Client-Service-Server实例-爱代码爱编程

零、Service机制 Client与Server向ROS MASTER注册MASTER根据Client订阅的信息,查阅注册表中是否有提供对应Service的ServerClient收到Server的TCP通信地址Client用TCP通信尝试与Server连接,并发送Service的请求数据Server接收Service请求与参数,开始执行Service

【ROS2】三、编写服务端和客户端(C++)-爱代码爱编程

1 创建软件包 打开一个新终端并获取您的 ROS 2 安装,以便命令正常工作。ros2 导航到在上一教程中创建的目录。dev_ws 回想一下,包应该在目录中创建,而不是在工作区的根目录中创建。导航到并创建新包:srcdev_ws/src ros2 pkg create --build-type ament_cmake cpp_srvcli --de

ros2与c++入门教程-编写服务端和客户端 - 创客智造_创客智造的博客-爱代码爱编程

来源:https://www.ncnynl.com/archives/201806/2490.html 说明: 介绍如何编写服务端和客户端编写服务端步骤: 新建包cpp_srvclicd ~/dev_ws/src ros2 pkg create --build-type ament_cmake cpp_srvcli --dependencies

python vs c++ 谁更快_树莓派c语言比python快多少-爱代码爱编程

背景 我非常喜欢编程语言,之前写过rust、R、python、C++等。我的第一门语言就是R语言,然后在比较掌握R语言之后,又花了很长一段时间学习RCPP。我觉得不管是会R还是说会python,都应该会C\C++。C\C+

离散化(保序 / 非保序)-爱代码爱编程

目录 概念 可能出现的问题 分类 1.保序  离散化模板( https://www.acwing.com/blog/content/277/)  例题:区间和 思路 代码 2.不保序 概念         给定一系列要为坐标的值,可能很大,1 到 10e9  ,总不能开一个10e9的数组吧,就要涉及到离散化,将10e5个数(大小在