创建ros服务

前言

ROS的话题和服务的对比如下图,图片取自https://blog.csdn.net/hmd3394969/article/details/115274820
在这里插入图片描述

一、创建ROS服务

在包的目录下创建srv文件夹

mkdir srv

请添加图片描述
新建一个srv文件

cd srv
gedit test.srv

添加如下:

int64 a
int64 b
---
int64 sum

其中,三条短线上⽅的代表请求参数,下⽅的代表相应参数.
与创建msg时一样
确保package.xml中包含以下两行且没有被注释

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

在CMakeLists.txt文件中,将message_generation添加到COMPONENTS列表中,添加运行时依赖关系
在这里插入图片描述
添加运行时依赖关系CATKIN_DEPENDS message_runtime
请添加图片描述
在CMakeLists.txt文件中添加srv文件,注意文件名前不能有空格,否则编译时会不通过
请添加图片描述
取消注释或添加

 generate_messages(
   DEPENDENCIES
   std_msgs
)

在这里插入图片描述
无需编译,在工作空间目录下使用下面的命令查看服务是否创建成功

source devel/setup.bash 
rossrv show test

如果成功的话端口输出如下
在这里插入图片描述

二、创建测试节点

最后在工作空间目录执行catkin_make编译,编译完后会在以下目录生成消息和服务的C++头文件.
在这里插入图片描述
在功能包的src目录下创建test_client.cpptest_server.cpp两个问价
在test_server.cpp中填入下面内容:

#include "ros/ros.h"
#include "test_srv/test.h"
bool addCallback(test_srv::test::Request &req, test_srv::test::Response &res)
{
    res.sum = req.a * req.b;
return true;
}
int main(int argc,char**argv)
{
    ros::init(argc, argv,"server");
    ros::NodeHandle nh;
    ros::ServiceServer server = nh.advertiseService("add_service", addCallback);
    ros::spin();
return 0;
}

在test_client.cpp中填入下面内容:

#include "ros/ros.h"
#include "test_srv/test.h"
int main(int argc,char**argv)
{
    ros::init(argc, argv,"client");
    ros::NodeHandle nh;
    ros::ServiceClient client = nh.serviceClient<test_srv::test>("add_service");

    test_srv::test srv;
    srv.request.a =5;
    srv.request.b =5;
if(client.call(srv))
{
ROS_INFO("Success! %ld + %ld = %ld\n", srv.request.a, srv.request.b, srv.response.sum);
}
else
{
ROS_INFO("Failed to call service multiply_service");
return 1;
}
return 0;
}

将两个cpp文件添加到功能包的CMakeLists.txt文件中

add_executable(test_server src/test_server.cpp)
target_link_libraries(test_server ${catkin_LIBRARIES})
add_executable(test_client src/test_client.cpp)
target_link_libraries(test_client ${catkin_LIBRARIES})

然后catkin_make编译
编译完后,先运行:

roscore

然后运行:

rosrun test_srv test_server 

最后运行:

rosrun test_srv test_client 

结果如下:
在这里插入图片描述
源码地址:
链接: https://pan.baidu.com/s/1K-a9f72LliohToUrgIWaWA 提取码: phi5
–来自百度网盘超级会员v5的分享

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超维空间科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值