ROS学习笔记11-写一个简单的服务和客户端(C++版本)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了ROS学习笔记11-写一个简单的服务和客户端(C++版本),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2293字,纯文字阅读大概需要4分钟。
内容图文
![ROS学习笔记11-写一个简单的服务和客户端(C++版本)](/upload/InfoBanner/zyjiaocheng/705/0492c9945e0d43629747574421c0c1cf.jpg)
本文主要来源于: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节点会出现:
功能正确。
- 代码
内容总结
以上是互联网集市为您收集整理的ROS学习笔记11-写一个简单的服务和客户端(C++版本)全部内容,希望文章能够帮你解决ROS学习笔记11-写一个简单的服务和客户端(C++版本)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。