前言
本文主要是跟着audolabor学习ROS笔记,多为操作性质,并从另一种角度对实现的顺序进行调整,想要多学习,可以参考autolabor教程
理论模型
与之前话题通讯之间有所区别,服务通讯适用于这样的场景:服务器处有一个公共资源,客户端可以调用这个资源,进行运算或者得到某些数据。而话题通讯更多是指发布方不进行数据处理,订阅方直接得到发布方的数据,而后进行自己的数据处理。
自定义srv文件
新建一个addint.srv文件,在文件中输入
# 以下为请求数据
int32 num1
int32 num2
---
# 以下为返回数据
int32 sum
Package调整
在package.xml中加入以下代码
<build_depend>message_generation</build_depend>
<exec_depend>message_runtime</exec_depend>
CmakeLists调整
找到CmakeLists.txt修改以下四个地方
find_package(catkin REQUIRED COMPONENTS
roscpp
rospy
std_msgs
message_generation
)
add_message_files(
FILES
Person.msg
)
generate_messages(
DEPENDENCIES
std_msgs
)
catkin_package(
# INCLUDE_DIRS include
# LIBRARIES demo02_talker_listener
CATKIN_DEPENDS roscpp rospy std_msgs message_runtime
# DEPENDS system_lib
)
服务器实现
为了代码补全功能,需要在c_cpp文件和setting文件加入srv中间文件的位置,需要注意的是,不要使用~来代替/home/用户,一定要从根目录下开始写,不然亲测python不会有自动补齐的功能,不知道是bug还是linux的奇怪特性
C++
#include "ros/ros.h"
#include "fuwu/addint.h"
bool doNums(fuwu::addint::Request& req,fuwu::addint::Response& rep)//cpp同时传入请求数据和response数据,返回一个bool值,与下面python不同
{
int num1 = req.num1;
int num2 = req.num2;
int sum = num1 + num2;
rep.sum = sum;