【ROS通信机制实战练习三】通过服务实现turtlesim小乌龟的生成

24 篇文章 3 订阅
20 篇文章 0 订阅
这里记录下使用ROS中的服务生成turtlesim小乌龟。

要实现这个内容,需要先确定生成乌龟的服务是什么,然后才能用编程实现。

使用ROS命令查看服务
rosservice list

在这里插入图片描述
通过上面的内容,可以发现,支持乌龟生成的是 spawn 这个服务,确定了服务,下面的就是关注服务的信息数据是什么。通过下面的命令实现

rosservice type /spawn

在这里插入图片描述
查看服务数据类型

rossrv info turtlesim/Spawn

加粗样式

C++实现
#include "ros/ros.h"
#include "turtlesim/Spawn.h"

int main(int argc,char *argv[]){
    ros::init(argc,argv,"test_03_service_client");
    ros::NodeHandle nh;
    ros::ServiceClient sc = nh.serviceClient<turtlesim::Spawn>("/spawn");
    //组织信息对象
    //1. 请求数据设置
    turtlesim::Spawn spawn;
    spawn .request.x = 1.0;
    spawn.request.y=4.0;
    spawn.request.theta=1.5;
    //不能重复调用,否则会报错
    spawn.request.name="turtle2";
    //2. 发送请求
    //判断服务器状态
    sc.waitForExistence();
    //ros::service::waitForService("spawn");
   bool flag =  sc.call(spawn);
   if(flag){
    ROS_INFO("new gui appear .. the name %s",spawn.response.name.c_str());
   }else{
    ROS_INFO("new gui disappear...");
   }
    ros::spin();
    return 0;
}
Python 实现
#! /usr/bin/env python
# -*- coding:utf-8 -*-

import rospy
from turtlesim.srv import  Spawn,SpawnRequest,SpawnResponse

if __name__=="__main__":
    rospy.init_node("test_03_client_p")
    #创建client 对象
    client = rospy.ServiceProxy("/spawn",Spawn)
    #组织消息对象
    request = SpawnRequest()
    request.x = 1.0
    request.y = 4.0
    request.theta = 1.5
    #不能重复调用
    request.name = "turtle3"
    #判断服务器的状态
    client.wait_for_service()
    try:
        #发送数据
        response = client.call(request)
        #打印参数
        rospy.loginfo("the service name :%s",response.name)
    except Exception as e:
        rospy.logerr("wrong response...")

【注:要注意配置CMakeLists.txt,编译后运行】

运行结果

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值