1.实现向 turtlesim 发送请求,在乌龟显示节点的窗体指定位置生成一乌龟。
2.流程和上一个文章的话题订阅差不多。先获取服务名称与服务消息。启动小海龟节点。先启动roscore 然后启动rosrun turtlesim turtlesim_node
3.查看服务列表 rosservice list
/spawn翻译为产卵,很形象的说明这是小海龟服务。 rosservice type /spawn查看服务类型
rossrv info turtlesim/Spawn 查看消息格式
从上到下是,乌龟的x,y坐标,角度,名字,下面是返回值(响应后的返回值)
4.实现自己的功能包。如果是新建的功能包,依赖要有roscpp rospy std_msgs turtlesim,我用上一个文章的功能包,加过依赖了,所以就不用在加了。直接新建一个test_spawn.cpp,写代码。
#include"ros/ros.h"
#include"turtlesim/Spawn.h"
int main(int argc, char *argv[])
{
setlocale(LC_ALL,"");
// 初始化 ros 节点
ros::init(argc,argv,"set_turtle");
// 创建 ros 句柄
ros::NodeHandle nh;
// 创建 service 客户端
ros::ServiceClient client = nh.serviceClient<turtlesim::Spawn>("/spawn");
//等待服务启动
ros::service::waitForService("/spawn");
//发送请求
turtlesim::Spawn spawn;
spawn.request.x = 1.0;
spawn.request.y = 1.0;
spawn.request.theta = 1.57;//90度
spawn.request.name = "my_spawn";
bool flag = client.call(spawn);//接受响应
if (flag)
{
ROS_INFO("新的小海龟生成,名字%s",spawn.response.name.c_str());
}
else
{
ROS_INFO("小海龟生成失败!");
}
return 0;
}
然后配置相关文件
编译,然后运行