ROS第 9 课 编写简单的服务端 Server

第 9 课 编写简单的服务端 Server

1.创建服务器代码


注意:在创建服务器代码之前,需要先创建工作空间和功能包,具体操作过程可前往目录“第4课 创建工作空间与功能包”查看文档。


  1. 输入指令“cd catkin_ws/src/beginner_hiwonder/scripts/”,回车。
    在这里插入图片描述
  2. 输入指令“vi turtle_command_server.py”编辑程序,复制下面程序。如需修改,再按下“i”即可修改。修改完成,按下“Esc”,输入“:wq”保存并退出。
    在这里插入图片描述
#!/usr/bin/env python
# -*- coding: utf-8 -*-

# 导入ROS的python接口模块
import rospy
# 导入thread模块用于创建新线程,time模块用于休眠
import thread, time
# 从geometry_msgs.msg导入Twist消息类型,该消息定义了线性和角速度
from geometry_msgs.msg import Twist
# 从std_srvs.srv导入Trigger服务类型,该服务用于简单的触发请求
from std_srvs.srv import Trigger, TriggerResponse

# 初始化全局变量pubCommand,用于确定是否发布速度命令
pubCommand = False;

# 定义一个Publisher,发布消息到'/turtle1/cmd_vel'话题,消息类型为Twist,队列长度为10
turtle_vel_pub = rospy.Publisher('/turtle1/cmd_vel', Twist, queue_size=10)

# 定义一个线程函数,用于连续发布速度命令
def command_thread():
    while True:  # 持续运行
        if pubCommand:  # 如果pubCommand为True,则发布速度命令
            vel_msg = Twist()  # 创建Twist类型的消息
            # 设置线速度为0.5m/s,角速度为0.2rad/s
            vel_msg.linear.x = 0.5
            vel_msg.angular.z = 0.2
            # 使用Publisher发布速度命令
            turtle_vel_pub.publish(vel_msg)

        time.sleep(0.1)  # 每次循环等待0.1秒

# 定义服务的回调函数,当有服务请求时调用
def commandCallback(req):
    global pubCommand  # 使用全局变量pubCommand
    pubCommand = bool(1-pubCommand)  # 切换pubCommand的值
    # 在ROS日志中记录信息
    rospy.loginfo("Publish turtle velocity command![%d]", pubCommand)
    # 返回服务响应
    return TriggerResponse(1, "Change turtle command state!")

# 定义一个函数用于设置ROS节点和服务
def turtle_command_server():
    rospy.init_node('turtle_command_server')  # 初始化ROS节点,名称为'turtle_command_server'
    # 创建一个服务'/turtle_command',服务类型为Trigger,服务请求时调用commandCallback
    s = rospy.Service('/turtle_command', Trigger, commandCallback)
    print "Ready to receive turtle command."
    # 创建一个新线程运行command_thread函数
    thread.start_new_thread(command_thread, ())
    # spin()保持python脚本不会退出,直到节点被显式关闭
    rospy.spin()

# 当脚本被执行时
if __name__ == "__main__":
    turtle_command_server()  # 调用turtle_command_server函数

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

2.运行服务器节点

  1. 输入指令“roscore”,启动节点管理器。
    在这里插入图片描述
    若已开启,则会出现以下提示:
    在这里插入图片描述
  2. 输入指令“rosrun turtlesim turtlesim_node”,并按下回车,启动小乌龟仿真器。
    在这里插入图片描述
  3. 打 开 一 个 新 的 命 令 行 终 端 , 输 入 指 令 “ rosrun beginner_hiwonder turtle_command_server.py”,并按下回车,运行服务器节点。如需停止节点的运行,可按下快捷键“Ctrl+C”。
    在这里插入图片描述
  4. 再次打开一个新的命令行终端,输入指令“rosservice call /turtle_command “{}””,并按下回车,令小乌龟沿着圆形轨迹移动。
    在这里插入图片描述
    在这里插入图片描述
  • 12
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

命运从未公平

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

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

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

打赏作者

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

抵扣说明:

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

余额充值