ROS学习笔记:用C++编写一个简单的服务和客户端
程序员文章站
2024-01-23 16:24:10
这一节主要介绍如何使用c++编写一个简单的服务和客户端节点。
编写服务节点
由于在前面的练习中,已经向beginner_tutorials软件包中复制了一个addtwoints.srv文件。所以这里...
这一节主要介绍如何使用c++编写一个简单的服务和客户端节点。
编写服务节点
由于在前面的练习中,已经向beginner_tutorials软件包中复制了一个addtwoints.srv文件。所以这里直接在src目录中创建add_two_ints_server.cpp文件即可。
#include "ros/ros.h" #include "beginner_tutorials/addtwoints.h" //在devel/include目录中,由addtwoints.srv文件自动生成的 bool add(beginner_tutorials::addtwoints::request &req, beginner_tutorials::addtwoints::response &res) { 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); //一旦检测到有add_two_ints服务,就调用add函数 ros_info("ready to add two ints."); ros::spin(); return 0; }
编写客户端节点
#include "ros/ros.h" #include "beginner_tutorials/addtwoints.h" #include 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("add_two_ints"); //生成一个add_two_ints服务 beginner_tutorials::addtwoints srv; srv.request.a = atoll(argv[1]); srv.request.b = atoll(argv[2]); //将char转换为int,atoll函数位于cstdlib库文件中 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工作空间中运行
catkin_make
检验服务与客户端
确认在每个终端中都载入了工作空间的环境变量之后,在三个不同的终端中运行如下三行代码:
roscore rosrun beginner_tutorials add_two_ints_server rosrun beginner_tutorials add_two_ints_client 1 5
如下图所示