ROS第 8 课 编写简单的客户端 Client

第 8 课 编写简单的客户端 Client

本节以创建简单的服务(Client)节点turtle_spawn.py为例进行讲解。该节点通过程序的形式发布一个让客户端产生一个新的小乌龟的请求。

1.配置客户端代码编译规则

  1. 输入指令“cd catkin_ws/src/beginner_hiwonder/scripts/”,回车。
    在这里插入图片描述
  2. 输入指令“vi turtle_spawn.py”编辑程序,复制下面程序。如需修改,再按下“i”即可修改。修改完成,按下“Esc”,输入“:wq”保存并退出。
    在这里插入图片描述
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 这个脚本用于请求turtlesim包提供的/spawn服务以创建新的海龟,服务的数据类型为turtlesim::Spawn

# 导入Python的sys模块,用于访问与Python解释器相关的变量和函数
import sys
# 导入ROS的python接口模块
import rospy
# 从turtlesim包的srv模块中导入Spawn服务
from turtlesim.srv import Spawn


# 定义一个函数用于生成(spawn)海龟
def turtle_spawn():
    # 初始化ROS节点,节点名为'turtle_spawn'
    rospy.init_node('turtle_spawn')
    # 阻塞等待直到发现/spawn服务,才继续执行下去
    rospy.wait_for_service('/spawn')
    try:
        # 创建一个ServiceProxy,作为/spawn服务的客户端,服务类型为Spawn
        add_turtle = rospy.ServiceProxy('/spawn', Spawn)

        # 请求服务调用,传入请求数据,这里是在坐标(2.0, 2.0)处,朝向为0.0弧度创建一个名为"turtle2"的海龟
        response = add_turtle(2.0, 2.0, 0.0, "turtle2")
        # 返回从服务中得到的响应,其中包括新海龟的名字
        return response.name

    except rospy.ServiceException as e:  # 捕获异常,异常类型为服务异常
        # 如果服务调用失败,打印错误信息
        print "Service call failed: %s" % e


# 当该脚本被执行,而非被其他模块导入时
if __name__ == "__main__":
    # 调用上面定义的函数请求生成海龟,并打印出生成的海龟名字
    print "Spwan turtle successfully [name:%s]" % (turtle_spawn())

在这里插入图片描述
3) 输入指令“chmod +x turtle_spawn.py”回车,为保存的turtle_spawn.py赋予可执行权限
在这里插入图片描述

2.运行客户端

  1. 输入指令“roscore”,启动节点管理器。
    在这里插入图片描述
    若已开启,则会出现以下提示:
    在这里插入图片描述
  2. 输入指令“rosrun turtlesim turtlesim_node”,回车,开启小乌龟。
    在这里插入图片描述
    此时,界面会弹出小乌龟运行窗口,如下图所示:
    在这里插入图片描述
  3. 重新打开一个命令行终端,输入指令“rosrun beginner_hiwonder turtle_spawn.py”回车,运行客户端。
    在这里插入图片描述
    这时,客户端发送请求至服务端,并应答开启另一个小乌龟,如下图所示:
    在这里插入图片描述
  • 11
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

命运从未公平

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值