创建Ros服务

创建一个用于节点中的srv文件。
在包文件夹中创建一个srv文件夹,并在其中创建一个chapter2_srv.srv文件,并在其中添加以下命令行:

int32 A
int32 B
int32 sum

其中A和B是来自客户端的请求数据类型,sum是来自服务器的响应数据类型。
在package.xml中找到以下命令行并取消注释

<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>

这些命令行支持在ROS构建系统中配置消息和服务。此外需要在CMakeList.txt中添加一行代码如下:

find_package(catkin REQUIRED COMPONENTSroscppstd_msgsmessage_generation
)

寻找到以下命令并取消注释,同时添加新的服务名称

add_service_files(
FILES
chapter2_srv.srv
)
generate_messages(
DEPENDENCIES
std_msgs
)

最后编译包:

$ cd ~/catkin_ws
$ catkin_make

检查是否正常:

$ rossrv show chapter2_turtleial/chapter2_srv

在src文件夹中编写cpp文件
example_3a.cpp

#include "ros/ros.h"
#include "chapter2_turtleial/chapter2_srv.h"bool add(chapter2_turtleial::chapter2_srv::Request &req,chapter2_turtleial::chapter2_srv::Response &res){res.sum = req.A + req.B;ROS_INFO("Request:A=%d,B=%d",(int)req.A,(int)req.B);ROS_INFO("Response:[%d]",(int)res.sum);return true;
}int main(int argc, char **argv){ros::init(argc,argv,"adder_server");ros::NodeHandle n;ros::ServiceServer service =n.advertiseService("chapter2_turtleial/adder",add);ROS_INFO("adder_server has started");ros::spin();return 0;
}

example_3b.cpp

#include "ros/ros.h"
#include "chapter2_turtleial/chapter2_srv.h"
#include <cstdlib>int main(int argc, char **argv){ros::init(argc,argv,"adder_client");if(argc != 3){ROS_INFO("Usage:adder_client A B");return 1;}ros::NodeHandle n;ros::ServiceClient client = n.serviceClient<chapter2_turtleial::chapter2_srv("chapter2_turtleial/adder");chapter2_turtleial::chapter2_srv srv;srv.request.A = atoll(argv[1]);srv.request.B = atoll(argv[2]);if(client.call(srv)){ROS_INFO("Sum: %ld",(long int)srv.response.sum);}else{ROS_ERROR("Failed to call service adder_server");return 1;}return 0;
}

编辑CMakeList.txt文件

add_executable(example3a src/example_3a.cpp)
add_executable(example3b src/example_3b.cpp)
add_dependencies(example3a chapter2_turtleial_generate_messages_cpp)
add_dependencies(example3b chapter2_turtleial_generate_messages_cpp)
target_link_libraries(example3a ${catkin_LIBRARIES})
target_link_libraries(example3b ${catkin_LIBRARIES})

编译所有节点的包:

$ cd ~/catkin_ws/
$ catkin_make --pkg chapter2_turtleial

测试:
运行节点管理器:

$roscore

在其他终端中分别运行:

$ rosrun chapter2_turtleial example3a
$ rosrun chapter2_turtleial example3b

测试效果截图:

Ros学习笔记(五)创建Ros服务相关推荐

  1. ROS学习笔记五:理解ROS topics

    ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...

  2. ROS学习笔记十一:ROS中数据的记录与重放

    ROS学习笔记十一:ROS中数据的记录与重放 本节主要介绍如何记录一个正在运行的ROS系统中的数据,然后在一个运行的系统中根据记录文件重新产生和记录时类似的运动情况.本例子还是以小海龟例程为例. 记录 ...

  3. ROS学习笔记26(ROS的命令行工具)

    需要说明的是:本篇博客内容来自于<ROS机器人编程 从基本概念到机器人应用程序编程实战>的第五章,本是打算参考和翻译官网相关资料,但官网资料的质量明显没有这本书描述的更为清楚,记录于此仅仅 ...

  4. ROS学习笔记02、ROS使用C++、Python来实现HelloWorld

    文章目录 前言 一.创建工程文件目录 二.实现helloworld 2.1.创建ROS包 2.2.C++版的HelloWorld 2.3.Python版的HelloWorld 三. 借助launch文 ...

  5. MonoRail学习笔记五:定制服务实现自定义功能

    在上一篇MonoRail学习笔记四:MonoRail基本流程分析 中我提到,MonoRail中可以自定义一些服务.比如可以定义自己的Url解析类,来实现http://localhost:***/ind ...

  6. ROS学习笔记一(ROS的catkin工作空间)

    在安装完成ROS indigo之后,需要查看环境变量是否设置正确,并通过创建一个简单的实例来验证ROS能否正常运行. 1 查看环境变量 在ROS的安装过程中,我们执行了如下命令:(此命令就是向当前用户 ...

  7. ROS学习笔记_创建工作空间(一)

    创建工作空间 mkdir -p ~/catkin_ws_2/src -p参数是将路径上的父子目录同时创建. $ cd ~/catkin_ws_2/ $ catkin_make 在工作空间的根目录下运行 ...

  8. ROS学习笔记02:ROS架构与基础

    文章目录 一.ROS架构 二.第一个ROS例程 (一)turtlesim功能包 1.话题与服务 2.背景色参数 (二)控制乌龟运动 1.启动节点管理器 2.启动乌龟仿真器节点 3.启动键盘控制节点 三 ...

  9. ROS学习笔记九:ROS工具

    ROS有各种工具可以帮助用户使用ROS.应该指出,这些GUI工具是对输入型命令工具的补充.如果包括ROS用户个人发布的工具,那么ROS工具的数量很庞大.其中,本文讨论的工具是对于ROS编程非常有用的辅 ...

  10. ROS学习笔记2(ROS文件系统和ROS常用命令)

    文章目录 1 预备工作 2 ros包文件系统概览 3 文件系统工具 3.1 rospack 3.2 roscd 3.3 roscd log 3.4 rosls 3.5 tab代码补全 4 总结 1 预 ...

最新文章

  1. python实现tcp发包_python 多线程tcp udp发包 Dos工具。
  2. linux下安装监控网络流量工具Iptraf
  3. [PWA] Show Notifications when a Service Worker is Installed or Updated
  4. 给定下面的java代码_则运行_会产生类型的异常_JavaSE_笔试题_单选选择题
  5. Python编程基础:第十六节 元组Tuple
  6. 前端学习(1550):$scope和调试工具
  7. python基础技巧总结(三)
  8. python:接口自动化测试框架优化版
  9. (好文章搬个砖)MySQL索引背后的数据结构及算法原理
  10. VS debug调试时提示“未找到源”
  11. 海康摄像头如何查看IP,重置密码
  12. 安装VMware-打开时显示文件包含病毒
  13. mysql解题器_mysql触发器,答题记录表同步教学跟踪(用户列表)
  14. 多系统下的蓝牙设备共用配对问题之LTK、EDIV、ERAND.以 Manjaro、Debian、Windows10 为例
  15. 网络安全笔记(宏病毒)
  16. 旅行家问题2(TSP,奇怪的转化模型)
  17. 12864c语言接温度计,单片机万年历+温度计+12864LCD液晶显示 仿真+程序
  18. NVIDA英伟达公司--(夜的第一章)
  19. 最全Android安全检测漏洞解决方案
  20. U盘安装Win10,遇到“由于存在受损的安装文件 因此安装无法继续”

热门文章

  1. 推荐一个程序员阅读文章资料时的辅助神器
  2. .第一天.net 学习理论
  3. LinkedHashMap 底层分析
  4. 面向对象程序的设计模式
  5. 摘抄 Promise原理
  6. eclipse里maven install时,报错提示jdk为无效的目标版本:1.7
  7. Bootstrap 更改Navbar默认样式
  8. 配置Memcache服务器并实现主从复制功能(repcached)(转)
  9. wamp环境下php命令运行时出现错误:无法启动此程序,因为计算机中丢失OCI.dll。尝试重新安装该程序以解决此问题...
  10. Ant in Action读书笔记(一):Ant里的Property是immutable的