ROS学习笔记11-写一个简单的服务和客户端(C++版本)
2024-09-04 16:49:55
本文主要来源于:http://wiki.ros.org/ROS/Tutorials/WritingServiceClient%28c%2B%2B%29
- 写一个服务节点。
在创建消息和服务中,我们创建了一个消息AddTwoInts.srv,为实现节点功能,我们还需要编写相应代码。- 代码
在beginner_tutorials包中创建add_two_ints_server.cpp,并输入如下内容(中文注释即为说明):#include "ros/ros.h"
#include "beginner_tutorials/AddTwoInts.h"//服务头文件
bool add(beginner_tutorials::AddTwoInts::Request &req,//Request,作为输入
beginner_tutorials::AddTwoInts::Response &res)//Response,作为输出
{
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; ros::ServiceServer service = n.advertiseService("add_two_ints", add);//发布服务,因为服务不用循环发布,所以不用死循环。
ROS_INFO("Ready to add two ints.");
ros::spin(); return 0;
} - 客户端(Client)节点
代码如下(解释见中文注释)#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;
ros::ServiceClient client = n.serviceClient<beginner_tutorials::AddTwoInts>("add_two_ints");//新建服务客户端
beginner_tutorials::AddTwoInts 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 add_two_ints");
return 1;
} return 0;
} - 编译运行代码
在CMakeLists.txt中加入如下代码:add_executable(add_two_ints_server src/add_two_ints_server.cpp)
target_link_libraries(add_two_ints_server ${catkin_LIBRARIES})
add_dependencies(add_two_ints_server beginner_tutorials_gencpp) add_executable(add_two_ints_client src/add_two_ints_client.cpp)
target_link_libraries(add_two_ints_client ${catkin_LIBRARIES})
add_dependencies(add_two_ints_client beginner_tutorials_gencpp)然后运行catkin_make进行编译
使用roscore开启中心节点。
运行rosrun begginner_tutorials add_two_ints_server
启动服务节点。
运行rosrun beginner_tutorials add_two_ints_client 1 3
启动客户端节点,并传入参数
会出现:server节点会出现:
功能正确。
- 代码
最新文章
- 将Json数据转换为ADO.NET DataSet对象
- JQ常用代码
- Visual Studio远程调试监视器(MSVSMON.EXE)的32位版本不能用于调试64位进程或64位转储
- python字符串str和字节数组相互转化
- Codeforces7C 扩展欧几里得
- linux 安装redis
- Codeforces Round #131 (Div. 2) : B
- HDU1878 欧拉回路 - from lanshui_Yang
- cmd介面,进adb命令提示符error
- [ios-必看] IOS调试技巧:当程序崩溃的时候怎么办 iphone IOS
- [转]HTTP请求模型和头信息参考
- 重置winsock目录解决不能上网的问题
- 06 Activity的启动模式 Intent的七大属性的总结
- 第一册:lesson 103.
- java9 Local-variable type inference
- 委托(作用:解耦),lambda的演化
- 首席数据官(CDO)的崛起
- eclipse包层级显示和工作空间显示
- 稀疏数据压缩查询方法:Rank &; Select 操作
- 第五周 mybash的实现
热门文章
- Vue-项目搭建时的常用配置
- Centos7 将应用添加快捷方式到applications 中以pycham为例[ubuntu]适用
- MockMVC - 基于RESTful风格的Springboot,SpringMVC的测试
- 【Go语言系列】1.2、GO语言简介:哪些大公司正在使用Go语言
- 论文阅读|Focal loss
- idea使用vue项目
- IKAnalyzer使用
- 解决CentOS下boost安装后不能使用的问题
- jqGird错误“decimalSeparator”的解决办法
- SpringBoot实现restuful风格的CRUD