ROS----好多小乌龟

ROS----好多小乌龟

当我们运行完rosrun turtlesim turtlesim_node后在桌面上出现一只小乌龟,显得那么孤单和寂寞,所以我们就来杀死这个单身龟,再创建一群小乌龟。
之前乌龟的控制是通过topic的发布和订阅来实现,此处的乌龟的死亡和新生是通过service来实现。
启动小乌龟,然后rosservice list看一下,有哪些服务被启动。可以看到一个/clear、/kill、/spawn、/turtle1/set_pen,从字面理解,kill极有可能就是杀死小乌龟的。所以迫不及待试一下。rosservice info /kill

Node: /turtlesim
URI: rosrpc://dynamicw-Inspiron-3442:44027
Type: turtlesim/Kill
Args: name

需要传入一个参数,也就时杀死的小乌龟的名字,根据名字从生死薄上划去。

rosservie call /kill turtle1

孤独的小乌龟真的没有了。证明猜想正确。
根据/turtle1/set_pen来得到小乌龟的名字为turtle1。
使用同样的方法,查看服务的信息:rosservice info /spawn

Node: /turtlesim
URI: rosrpc://dynamicw-Inspiron-3442:44027
Type: turtlesim/Spawn
Args: x y theta name

/spawn需要四个参数,看着样子很像是创建乌龟的,有坐标,有角度还有名字。
试一下rosservice call /spawn "x:3.0 y:3.0 theta: 3.14 name:'nihao'"
果然在屏幕上出现了一个乌龟,猜想正确。接下来就在代码中创建一个乌龟大家族吧!

#include <ros/ros.h>
#include <turtlesim/Spawn.h>
#include <turtlesim/Kill.h>

#include <string>
#include <iostream>
using namespace std;

int main(int argc,char** argv)
{
	//定义好乌龟家族中的名字
    string names[] = {"name01","name02","name03","name04","name05","name06","name07","name08","name09","name10"};
    ros::init(argc, argv, "moreturtle");
    ros::NodeHandle n;
    ros::service::waitForService("spawn");//等待/spawn服务启动
    ros::ServiceClient client_kill = n.serviceClient<turtlesim::Kill>("kill");//定义一个/kill服务的客户端
    turtlesim::Kill kill_name;
    kill_name.request.name="turtle1";
    client_kill.call(kill_name);//调用/kill服务杀死孤独的小乌龟
    ros::ServiceClient client = n.serviceClient<turtlesim::Spawn>("spawn");//定义一个/spawn服务的客户端
    turtlesim::Spawn turtle;
    
    for(int i = 0; i < 10;i++)
    {
    	//为每一个乌龟定义未知角度和名字
        turtle.request.name="x"+names[i];
        turtle.request.x = i+1;
        turtle.request.y = 1;
        turtle.request.theta = 1.57;
        client.call(turtle);//调用/spawn服务生成可爱的小乌龟
    }
    for(int i = 0;i < 10;i++)
    {
        turtle.request.name="y"+names[i];
        turtle.request.x = 1;
        turtle.request.y = i+1;
        turtle.request.theta = 0;
        client.call(turtle);
    }
}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值