ROS入门--客户端client编程实现
作者:互联网
ROS入门--客户端client编程实现
这一部分进入了service部分,前面使用的都是topic,要理解两种模型的区别
模型图:
1.创建新的功能包
之前我们创建了learning_topic用来学习话题的模型,学习自定义消息类型、学习创建发布者、订阅者,并配置他们进行实验。现在,我们要创建learning_service这个功能包来进行
服务模型的学习。
在catkin_ws 的 src目录下输入终端 catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim // 除了编程语言库、还有标准消息库等
2. 编写C++代码
/**
* 该例程将请求/spawn服务,服务数据类型turtlesim::Spawn
*/
#include <ros/ros.h>
#include <turtlesim/Spawn.h>
int main(int argc, char** argv)
{
// 初始化ROS节点
ros::init(argc, argv, "turtle_spawn");
// 创建节点句柄
ros::NodeHandle node;
// 发现/spawn服务后,创建一个服务客户端,连接名为/spawn的service
ros::service::waitForService("/spawn"); //查找系统中是否有/spawn这个服务,找到继续往下走
ros::ServiceClient add_turtle = node.serviceClient<turtlesim::Spawn>("/spawn"); //服务名还有他的数据类型
// 初始化turtlesim::Spawn的请求数据
turtlesim::Spawn srv;
srv.request.x = 2.0;
srv.request.y = 2.0;
srv.request.name = "turtle2";
// 请求服务调用
ROS_INFO("Call service to spwan turtle[x:%0.6f, y:%0.6f, name:%s]",
srv.request.x, srv.request.y, srv.request.name.c_str());
add_turtle.call(srv); //发送请求数据等待返回
// 显示服务调用结果
ROS_INFO("Spwan turtle successfully [name:%s]", srv.response.name.c_str());
return 0;
};
3.编译配置(CMakeList.txt) //这是节点类文件必经的一步,配置才能编译,位置就在build那一栏末尾
加入
add_executable(turtle_spawn src/turtle_spawn.cpp) //要把turle_spawn.cpp这个文件编译成turtle_spawn
target_link_libraries(turtle_spawn ${catkin_LIBRARIES}) //生成文件---链接库
4.source一下启动路径(在devel中)
这一步由于之前在隐藏文件中做过所以无需再做,如果未做可以参考前面几节节点文件启动的source方法。
5.运行仿真
roscore
rosrun turtlesim turtlesim_node // 自带的节点
rosrun learning_service turtle_spawn // 格式是 rosrun 功能包 文件名
标签:spawn,turtle,service,--,request,client,srv,turtlesim,ROS 来源: https://www.cnblogs.com/yztbky/p/16063294.html