ROS21讲学习笔记——P13

【古月居】古月·ROS入门21讲 | 一学就会的ROS机器人入门教程_哔哩哔哩_bilibili

 本讲要创建服务客户端,对turtlesim发出创建一只新海龟的请求。

这里要重新创建一个功能包

$ cd ~/catkin_ws/src

$ catkin_create_pkg learning_service roscpp rospy std_msgs geometry_msgs turtlesim

 进入learning_service的src目录,创建以下CPP代码

/*
该例程将请求/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");
	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 spawn turtle[x:%0.6f, y:%0.6f, name:%s]", srv.request.x, srv.request.y, srv.request.name.c_str());
	
	add_turtle.call(srv);//.call()发送请求
	
	//显示服务调用结果
	ROS_INFO("Spawn turtle successfully [name:%s]", srv.response.name.c_str());
	
	return 0;
}

代码中第17行的ros::service::waitForService("/spawn")称为阻塞型函数,等待turtlesim的/spawn服务。

在CMakeLists.txt文件中添加以下代码,编译CPP文件并链接库

add_executable(turtle_spawn src/turtle_spawn.cpp)

target_link_libraries(turtle_spawn ${catkin_libraries})

 编译好后进入工作空间,依次输入指令

$ cd ~/catkin_ws

$ catkin_make

$ roscore

$ rosrun turtlesim turtlesim_node

$ rosrun learning_service turtle_spawn

 在turtle_spawn节点终端会出现

[ INFO] [1645406120.111999758]: Call service to spawn turtle[x:2.000000, y:2.000000, name:turtle2]
[ INFO] [1645406120.127507749]: Spawn turtle successfully [name:turtle2]

显示进行服务请求,请求成功,新海龟名为turtle2

左下角便是新创建的海龟。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值