ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

ROS入门--客户端client编程实现

2022-03-27 16:34:22  阅读:225  来源: 互联网

标签:spawn turtle service -- request client srv turtlesim ROS


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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有