第一个命令行:启动之前的launch文件,启动乌龟的GUI
cd demo03_ws
catkin_make
source ./devel/setup.bash
roslaunch plumbing_test start_turtle.launch
1.服务名称与服务消息获取
获取话题
第二个命令行:
获取话题:rosservice list
获取消息类型:rosservice info /spawn
获取消息格式:rossrv info turtlesim/Spawn
2.服务客户端(c++)实现
创建功能包需要依赖的功能包: roscpp rospy std_msgs turtlesim
#include"ros/ros.h"
#include"turtlesim/Spawn.h"
/*
生成一只小乌龟
准备工作:
1.服务话题 /spawn
2.服务消息类型 turtlesim/Spawn
3.运行前先启动 turtlesim_node 节点
实现流程:
1.包含头文件
需要包含 turtlesim 包下资源,注意在 package.xml 配置
2.初始化 ros 节点
3.创建 ros 句柄
4.创建 service 客户端
5.等待服务启动
6.发送请求
7.处理响应
*/
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
// 2.初始化 ros 节点
ros::init(argc,argv,"service_call");
// 3.创建 ros 句柄
ros::NodeHandle nh;
// 4.创建 service 客户端
ros::ServiceClient client = nh.serviceClient<turtlesim::Spawn>("/spawn");
// 5.组织数据并发送
//5.1组织请求数据
turtlesim::Spawn spawn;
spawn.request.x =1.0;
spawn.request.y =4.0;
spawn.request.theta = 1.57;
spawn.request.name = "turtle2";
//5.2发送请求
//判断服务器状态
// ros::service::waitForService("/spawn"); //第一种方式
client.waitForExistence(); //第二种方式
bool flag =client.call(spawn); //访问服务器
// 6.处理响应
if (flag)
{
ROS_INFO("新的乌龟生成,名字:%s",spawn.response.name.c_str());
} else {
ROS_INFO("乌龟生成失败!!!");
}
}
配置文件
运行
第一个命令行:启动之前的launch文件,启动乌龟的GUI
cd demo03_ws
catkin_make
source ./devel/setup.bash
roslaunch plumbing_test start_turtle.launch
第二个命令行(新建一个乌龟,方向旋转90°):
cd demo03_ws
catkin_make
source ./devel/setup.bash
rosrun plumbing_test test02_sub_pose