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

文章目录

  • 第 9 课 编写简单的服务端 Server
    • 1.创建服务器代码
    • 2.运行服务器节点

第 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/svel_msg.linear.x = 0.5vel_msg.angular.z = 0.2# 使用Publisher发布速度命令turtle_vel_pub.publish(vel_msg)time.sleep(0.1)  # 每次循环等待0.1秒# 定义服务的回调函数,当有服务请求时调用
def commandCallback(req):global pubCommand  # 使用全局变量pubCommandpubCommand = 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,服务请求时调用commandCallbacks = 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 “{}””,并按下回车,令小乌龟沿着圆形轨迹移动。
    在这里插入图片描述
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/632976.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

蓝桥杯每日一题---基数排序

题目 分析 在实际的比赛过程中很少会自己手写排序,顶多是定义一下排序规则。之所以要练习一下基数排序,是因为在后续学习过程中学到后缀数组时需要自己手写基数排序,那么这里使用的方法也和后缀数组一致,理解这里也便于后缀数组的…

领域特定语言(Domain-Specific Language, DSL)在 Visual Studio 2022中的实验——建立领域模型

一、环境 dotnet --version 8.0.101 Microsoft Visual Studio Enterprise 2022 (64 位) - Current 版本 17.8.4 已安装组件 ComponentLinkVisual Studiohttp://go.microsoft.com/fwlink/?LinkId185579Visual Studio SDKhttps://go.microsoft.com/fwlink/?li…

RTC讲解

RTC(Real Time Clock)实时时钟 RTC实时时钟本质上是一个独立的定时器。RTC模块拥有一组连续计数的32位无符号计数器,在相应软件配置下,可提供时钟日历的功能。修改计数器的值可以重新设置系统当前的时间和日期。 RTC模块和时钟配…

提升开发效率,Fiddler Everywhere for Mac助您解决网络调试难题

在现代软件开发中,网络调试是一个不可或缺的环节。无论是前端开发还是后端开发,我们经常需要对网络请求进行监控和调试,以便及时发现并解决问题。而Fiddler Everywhere for Mac作为一款强大的网络调试工具,能够帮助开发者提升工作…

Ubuntu重启后进入initramfs导致无法开机

今晚,我的电脑意外关机,重新开机后打开了虚拟机后出现initramfs,一直无法开机。该虚拟机使用的是 vm17,系统是ubuntu20, 解决方案 使用如下命令查看和识别磁盘、分区或文件系统的信息 在initramfs后面输入 fsck /dev/sdb4 ,即修复上面损坏的…

32 选择组件

效果演示 实现了一个复选框的动画效果,当复选框被选中时,复选框的前面会出现一个勾号,同时复选框的背景颜色会变成灰色,复选框旁边会出现一个火花效果。当复选框被取消选中时,复选框的勾号会消失,复选框的背…

线程同步--生产者消费者模型

文章目录 一.条件变量pthread线程库提供的条件变量操作 二.生产者消费者模型生产者消费者模型的高效性基于环形队列实现生产者消费者模型中的数据容器 一.条件变量 条件变量是线程间共享的全局变量,线程间可以通过条件变量进行同步控制条件变量的使用必须依赖于互斥锁以确保线…

Docker(三)使用 Docker 镜像

作者主页: 正函数的个人主页 文章收录专栏: Docker 欢迎大家点赞 👍 收藏 ⭐ 加关注哦! 使用 Docker 镜像 在之前的介绍中,我们知道镜像是 Docker 的三大组件之一。 Docker 运行容器前需要本地存在对应的镜像&#x…

行驶证OCR识别应用领域有哪些?

随着科技的不断发展,OCR技术已经逐渐成熟,并在各个领域得到了广泛的应用。其中,OCR技术在行驶证识别领域的应用也日益受到关注。本文将重点介绍行驶证OCR识别的应用领域,以便更好地了解这一技术的应用前景。 首先,行驶…

尚硅谷Nginx高级配置笔记

写在前面:本笔记是学习尚硅谷nginx可成的时候的笔记,不是原创,如有需要,可以去官网看视频,以下是pdf文件 Nginx高级 第一部分:扩容 通过扩容提升整体吞吐量 1.单机垂直扩容:硬件资源增加 云…

计算机毕业设计----SSH会议室管理系统

项目介绍 本系统为基于jspsshmysql的会议室管理系统,包含普通用户和管理员,系统功能如下: 普通用户:会议室管理、会议管理、用户管理、个人资料。 管理员用户:会议室管理、会议管理、用户管理、部门管理、设备管理、个…

基于docker创建nginx容器

docker一键安装可以参考我这个博客:一键安装docker 1.创建基础容器 docker run -p280:280 --name nginx -d nginx创建挂载到容器的宿主机文件夹 mkdir -p /home/000nginx-ebrms-ftp/html mkdir -p /home/000nginx-ebrms-ftp/logs mkdir -p /home/000nginx-ebrms-f…

三坐标平台对环境的温度有要求吗——河北北重

三坐标铸铁平台对环境的温度有一定的要求。通常情况下,三坐标平台在使用过程中要求环境的温度保持在一定范围内,以确保测量数据的准确性和稳定性。 具体的温度要求可能会因不同的三坐标铸铁平台型号和制造商而有所不同,一般来说,常…

Unity Mirror VR联机开发 实战篇(二)

一、迁移示例中的联机物体 1、将MirrorExamplesVR工程中的部分文件夹复制到自己的工程中。 1、打开MirrorExamplesVR中的 SceneVR-Common场景。 2、将场景中没用的东西都删掉,只留下面这些,新建一个空物体XR Mirror,将所有剩下的物体拖成XR …

汽车连接器接线端子和多芯线束连接界面

冷压接的开式压接和闭式压接以及热压接的超声波焊接对汽车连接器接线端子和多芯线束连接界面 连接器接线端子和多芯线束的连接是电子线束行业,特别是汽车行业常用的导线连接方式。汽车整车线束又由许多分支线束组成,而分支线束必须通过连接器实现连接&am…

绝地求生【违规处罚工作公示】1月8日-1月14日

1月8日至1月14日期间,共计对174,636个违规账号进行了封禁,其中164,757个账号因使用外挂被永久封禁。 若您游戏中遇到违规行为,建议您优先在游戏内进行举报; 另外您也可以在官方微信公众号【PUBG国际版】中点击“ 服务中心 - 举报…

python统计分析——样本均值的分布(上)

参考资料:用python动手学统计学 1、导入库 import numpy as np import pandas as pd import scipy as sp from scipy import statsfrom matplotlib import pyplot as plt import seaborn as sns 2、设置总体 本次研究总体是均值为4、标准差为0.8的正态总体。 po…

使用 MinIO 和 PostgreSQL 简化数据事件

本教程将教您如何使用 Docker 和 Docker Compose 在 MinIO 和 PostgreSQL 之间设置和管理数据事件,也称为存储桶或对象事件。 您可能已经在利用 MinIO 事件与外部服务进行通信,现在您将通过使用 PostgreSQL 自动化和简化数据事件管理来增强数据处理能力…

Linux--磁盘与文件系统

目录 1.什么是文件系统 2.磁盘 2.1什么时磁盘 2.2磁盘的物理存储结构 2.3磁盘的逻辑抽象结构 3.磁盘文件系统(EXT2) inode Table(i结点表) Data Block inode Bitmap(inode位图) Block Bitmap(块位图) 在Linux如何删除文件 Group Descriptor Ta…

30分钟带你深入优化安卓Bitmap大图

30分钟带你源码深入了解Bitmap以及优化安卓大图 一、前言二、Bitmap入门1. 如何创建Bitmap?2. Bitmap的堆内存分布在哪里3. 图片文件越大,Bitmap堆内存会越大吗?4. 如何管理Bitmap的内存?5. 实战修改Bitmap的堆内存,改变图片的图…