ROS实操入门系列(五)通过Service设置小乌龟的各种功能(位置、行走路线颜色、清除路线、生成新乌龟等Service干货!!)

@[TOC](ROS实操入门系列(五)通过Service设置小乌龟的各种功能(位置、行走路线颜色、清除路线、生成新乌龟等))

小乌龟功能列表

  1. 开启小乌龟节点后,可以使用 rosservice 命令查询当前小乌龟的功能

    rosservice list
    

    在这里插入图片描述

  2. 清除功能(可以清理小乌龟走过的线路)

    rosservice call /clear
    
  3. 杀死小乌龟,小乌龟默认名称为turtle1

    rosservice call /kill "name: 'turtle1'"
    
  4. 重置小乌龟

    rosservice call /reset
    
    通过设置x,y来设置新乌龟的位置。通过设置theta来设置小乌龟头的朝向。通过设置name来设置小乌龟的名称。
    
  5. 设置小乌龟行走路线的颜色

    rosservice call /turtle1/set_pen "{r: 255, g: 0, b: 0, width: 10, 'off': 0}" 
    
    r,g,b控制画笔的颜色值。取值范围为0-255.
    with控制的是画笔的粗细。
    off表示是否使用画笔,0代表是使用,1为不使用。不使用时看不见行走的路线
    
  6. 设置绝对位置

    rosservice call /turtle1/teleport_absolute "x: 3.0
    y: 4.0
    theta: 1.57" 
    
    通过设置x,y来设置小乌龟的位置。通过设置theta来设置小乌龟头的朝向。
    
  7. 生成新的小乌龟

    rosservice call /spawn "x: 0.0
    y: 0.0
    theta: 0.0
    name: ''" 
    
    通过设置x,y来设置新的小乌龟的位置。通过设置theta来设置小乌龟头的朝向。通过name设置小乌龟名字
    

工具调试

	使用调试工具进行下面的调试
	rosrun rqt_service_caller rqt_service_caller
  1. 清除功能,先控制乌龟走一段路线,然后清除
    在这里插入图片描述

    在这里插入图片描述

  2. 清除掉小乌龟,小乌龟默认名称为turtle1

    在这里插入图片描述

  3. 重置小乌龟在这里插入图片描述

  4. 小乌龟行走路线的颜色在这里插入图片描述

  5. 设置绝对位置
    在这里插入图片描述

  6. 生成新的小乌龟
    在这里插入图片描述

需求

  1. 实现图形化界面,来控制小乌龟的运行
    在这里插入图片描述

  2. 小乌龟的模拟器,其实是一个Service的Server端,我们要对小乌龟进行一些列的操作,我们就去创建一系列的Client端, 按照对应的服务数据题规范进行服务访问。

    总结起来,我们要干的事情就是:
    (1)创建QT UI
    (2)创建 Service通讯
    (3)整合QT UI 和 Service通讯

主要代码实现

  1. 清理画布
    def click_clear(self):
        # 访问小乌龟的服务 /clear
        # 查看该服务的类型: std_srvs/Empty
        service_name = '/clear'
        client = rospy.ServiceProxy(service_name, Empty)
        client.wait_for_service()
        client.call(EmptyRequest())
        client.close()
    
  2. 重置小乌龟
    def click_reset(self):
        service_name = '/reset'
        client = rospy.ServiceProxy(service_name, Empty)
        client.wait_for_service()
        client.call(EmptyRequest())
        client.close()
    
  3. 创建新的小乌龟
        def click_spawn(self):
        service_name = '/spawn'
        client = rospy.ServiceProxy(service_name, Spawn)
        client.wait_for_service()
        x = float(self.le_spawn_x.text())
        y = float(self.le_spawn_y.text())
        # 输入为角度值
        theta = float(self.le_spawn_theta.text())
        name = self.le_spawn_name.text()
        request = SpawnRequest()
        request.x = x
        request.y = y
        request.theta = radians(theta)
        request.name = name
        client.call(request)
        client.close()
    
  4. 清除掉小乌龟
    def click_kill(self):
        service_name = '/kill'
        client = rospy.ServiceProxy(service_name,Kill)
        client.wait_for_service()
        request = KillRequest()
        request.name = self.le_kill_name.text()
        client.call(request)
        client.close()
    
    
  5. 设置小乌龟行走路线的颜色
    def click_pen(self):
        name = self.le_pen_name.text()
        r = int(self.le_pen_r.text())
        g = int(self.le_pen_g.text())
        b = int(self.le_pen_b.text())
        width = int(self.le_pen_width.text())
        checked = self.cb_pen.isChecked()
        off = 1 if checked else 0
        service_name = '/{}/set_pen'.format(name)
        client = rospy.ServiceProxy(service_name, SetPen)
        client.wait_for_service()
        request = SetPenRequest()
        request.r = r
        request.g = g
        request.b = b
        request.width = width
        request.off = off
        client.call(request)
        client.close()
    
    
  6. 设置小乌龟的绝对路径
    def click_absolute(self):
        name = self.le_absolute_name.text()
        x = float(self.le_absolute_x.text())
        y = float(self.le_absolute_y.text())
        theta = float(self.le_absolute_theta.text())
    
        service_name = '/{}/teleport_absolute'.format(name)
        client = rospy.ServiceProxy(service_name, TeleportAbsolute)
        client.wait_for_service()
        request = TeleportAbsoluteRequest()
        request.x = x
        request.y = y
        request.theta = radians(theta)
        client.call(request)
        client.close()
    

https://www.lanqiao.cn/courses/2947,提供准备好的云主机ros环境,进行实操,课程包括了 Topic 通讯, Service 通讯,ROS 自定义消息,URDF可视化,TF坐标转换等技术要点。每个技术点都会结合例子先把原理讲解清楚,为了达到学以致用的目的,我们会再进行知识拓展,针对每个技术点实现对应的生动有趣的需求,保证学完后会有很大的收获。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值