编程语言
首页 > 编程语言> > ROS入门--客户端client编程实现

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