ROS入门--客户端client编程实现
ROS入门--客户端client编程实现
(参考古月居b站视频P13,本文仅为笔记和个人理解)
这一部分进入了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 功能包 文件名
本文来自博客园,作者:FrankPlus,转载请注明原文链接:https://www.cnblogs.com/yztbky/p/16063294.html

 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号