通过ros2服务来控制程序的启动和关闭

news2024/9/19 10:34:47

运行handle.py程序,启动服务节点,调用服务节点控制程序的启动和关闭,本例为启动和关闭一个python程序(每隔一秒打印hello,world),运行截图如下:

一、创建服务节点

handle.py 

import rclpy
from rclpy.node import Node
from std_srvs.srv import SetBool
import subprocess

class ProgramControlNode(Node):

    def __init__(self):
        super().__init__('program_control_node')
        self.srv = self.create_service(SetBool, 'control_program', self.control_program_callback)
        self.process = None

    def control_program_callback(self, request, response):
        if request.data:  # 启动 Python 程序
            if self.process is None:  # 确保没有进程正在运行
                self.get_logger().info('Starting Python program...')
                self.process = subprocess.Popen(["python3", "/home/wl/Desktop/test_ros_service/sevice.py"])  # 替换为你的 Python 脚本路径
                response.success = True
                response.message = "Python program started."
            else:
                response.success = False
                response.message = "Python program is already running."
        else:  # 关闭 Python 程序
            if self.process is not None:
                self.get_logger().info('Stopping Python program...')
                self.process.terminate()
                self.process.wait()
                self.process = None
                response.success = True
                response.message = "Python program stopped."
            else:
                response.success = False
                response.message = "No Python program is running."
        return response

def main(args=None):
    rclpy.init(args=args)
    node = ProgramControlNode()
    rclpy.spin(node)
    rclpy.shutdown()

if __name__ == '__main__':
    main()

二、编写python程序

sevice.py

这里每隔一秒循环打印“Hello, World!"

import time

while True:
    print("Hello, World!")
    time.sleep(1)

三、执行ros2服务节点

python3 handle.py

四、调用服务,控制程序启动和关闭

# 启动程序
ros2 service call /control_program std_srvs/srv/SetBool "{data: true}"
# 关闭程序
ros2 service call /control_program std_srvs/srv/SetBool "{data: false}"

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

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

相关文章

无人机之航拍挑选注意事项

航拍无人机的挑选,主要从安全稳定、航拍画质、云台防抖、图传距离、续航时间等因素来考虑。 一、安全稳定 安全稳定性,是我们选择航拍无人机的首要参考标准。毕竟再好的镜头、再好的外形设计、再好的航拍功能,如果没有安全稳定的飞行&#x…

【若依 - 前后端不分离版】SysCaptchaController 详解:生成与处理验证码

文章目录 一、SysCaptchaController 类概述1. 类的功能2. 主要功能 二、验证码生成流程1. 接口定义2. 代码流程解析2.1. 设置响应头2.2. 生成验证码2.3. 存储验证码2.4. 返回验证码图片 三、处理异常和流关闭1. 异常处理2. 流关闭 四、实际应用中的验证码处理1. 验证码生成和展…

【数模修炼之旅】05 拟合模型 深度解析(教程+代码)

【数模修炼之旅】05 拟合模型 深度解析(教程代码) 接下来 C君将会用至少30个小节来为大家深度解析数模领域常用的算法,大家可以关注这个专栏,持续学习哦,对于大家的能力提高会有极大的帮助。 1 拟合模型介绍及应用 …

无缝融入,即刻智能[三]:Dify-LLM平台知识库构建(多路召回、精排重排),43K+星标见证专属智能方案

无缝融入,即刻智能[三]:Dify-LLM平台知识库构建(多路召回、精排重排),43K+星标见证专属智能方案 大语言模型的训练数据一般基于公开的数据,且每一次训练需要消耗大量算力,这意味着模型的知识一般不会包含私有领域的知识,同时在公开知识领域存在一定的滞后性。为了解决这一…

SSM学生社团管理系统—计算机毕业设计源码20360

目 录 摘要 1 绪论 1.1 研究背景 1.2 研究意义 1.3论文结构与章节安排 2 学生社团管理系统系统分析 2.1 可行性分析 2.2 系统流程分析 2.2.1 数据增加流程 2.2.2 数据修改流程 2.2.3 数据删除流程 2.3 系统功能分析 2.3.1 功能性分析 2.3.2 非功能性分析 2.4 系…

python3爬虫(未完结)

一个简单的例子:爬取自己的csdn博客,统计每篇博客的访问量,制作一个柱状图,以访问量从大到小的方式显示。 1. 首先从“个人主页”爬取所有所有文章的链接 1.1 打开个人主页,右键->检查:可以看到每篇文章…

如何使用Java SpringBoot+Vue搭建二手闲置交易系统?

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

四步解决国标设备接入问题

用国标协议完成多品牌设备统一接入,是智能设备在多场景应用中都会碰到的安装步骤。国标接入常常过程复杂,这边介绍一种相对简便的方法,用萤石开放平台的“国标设备添加工具”接入 Step1:私信我获取安装包 私信我获取国标设备添加…

Nginx服务器申请及配置免费SSL证书

免费SSL证书申请 背景: 我的情况是这样,域名解析是华为云的,然后免费证书在腾讯云申请。但是大致的配置流程都是一样的 在腾讯云平台申请免费的SSL证明(目前有效期是9天),申请步骤如下 主要步骤说明 申请免费SSL证书配置证书到域…

自定义变量添加到分机呼叫信息(mod_cti基于FreeSWITCH)

文章目录 前言联系我们添加流程1. 修改cti.json配置2. 配置自动外呼进入排队转坐席3. 变量同步到坐席通道 4. 导入号码添加自定义变量 前言 在默认配置中,分机的呼叫信息会被推送到redis的hash表中,hash表名:calls。我们可以通过修改配置&am…

【大模型LLMs】RAG实战:基于LlamaIndex快速构建RAG链路(Qwen2-7B-Instruct+BGE Embedding)

【大模型LLMs】RAG实战:基于LlamaIndex快速构建RAG链路(Qwen2-7B-InstructBGE Embedding) 1. 环境准备2. 数据准备3. RAG框架构建3.1 数据读取 数据切块3.2 构建向量索引3.3 检索增强3.4 main函数 参考 基于LlamaIndex框架,以Qwe…

【GitLab】使用 Docker 安装 GitLab 1:配置 SSH 端口

使用 Docker 安装 GitLab 要求修改ssh端口 GitLab 使用 SSH 通过 SSH 与 Git 交互。默认情况下,GitLab 使用端口22。 要在使用 GitLab Docker 映像时使用其他端口,您可以执行以下操作之一: 更改服务器的 SSH 端口(推荐)。 更改 GitLab Shell SSH 端口。 更改服务器的 SSH …

电测量数据交换DLMS∕COSEM组件第62部分:COSEM接口类(4)

1.7COSEM服务器模型 COSEM服务器被构建为3层体系结构如图3所示。 图4示例说明如何用COSEM服务器模型构建一台组合式计量设备。 1.8COSEM逻辑设备 1.8.1概述 COSEM逻辑设备包含一组COSEM对象,每个物理设备均应包含一个“Management logical device”。对COSEM逻辑设备…

MPLS相关实验

一、实验拓扑图以及实验要求 1、实验拓扑图 2、实验要求 合理利用IP地址进行分配R3、R4、R5、R6运行ospf在R2、R3、R4、R5、R6上运行MPLSR1上使用静态,R7上运行rip协议,R8上运行ospf协议全网可达 二、实验分析 合理利用IP地址进行分配R3、R4、R5、R6…

将自己的网站改造成可安装的PWA

概述 本文是一篇水文,感兴趣的读者可以看看。分享一下怎么讲自己的网站改造成可安装的PWA。 PWA简介 渐进式 Web 应用(Progressive Web App,PWA)是一个使用 web 平台技术构建的应用程序,但它提供的用户体验就像一个…

死锁问题分析和解决——资源回收时

1.描述问题 在完成线程池核心功能功能时,没有遇到太大的问题(Any,Result,Semfore的设计),在做线程池资源回收时,遇到了死锁的问题 1、在ThreadPool的资源回收,等待线程池所有线程退出时&#xff…

2024年【浙江省安全员-C证】复审模拟考试及浙江省安全员-C证作业模拟考试

题库来源:安全生产模拟考试一点通公众号小程序 浙江省安全员-C证复审模拟考试参考答案及浙江省安全员-C证考试试题解析是安全生产模拟考试一点通题库老师及浙江省安全员-C证操作证已考过的学员汇总,相对有效帮助浙江省安全员-C证作业模拟考试学员顺利通…

C++进阶(14)类型转换、IO流

文章目录 一、类型转换C语言隐式类型转换强制类型转换 C类型转换的情况类型转换的函数(4个) 二、IO流1、缓冲区2、提高输入输出效率3、文件操作文件权限写操作 --- ofstream文本方式写入二进制方式写入 读操作 --- ifstream文本方式读取二进制方式读取 其…

如何使用DEV-C++做游戏?

我的B站视频做过关于python的小游戏开发,但很多小伙伴希望通过C做一些有趣的动画或游戏,该怎么实现呢? B站:bigbigli_大李 大家好,我是大李。 今天主要跟大家谈谈如何通过C做一些小游戏开发,这里我们就 使用…

JavaScript - Api学习 Day02(事件监听、流、委托)

事件监听 一、事件监听1.1 什么是事件、事件监听1.1.1 事件监听的基本流程1.1.2 重点关注以下三个核心要素 1.2 Event handling models 事件处理模型1.2.1 DOM Level 版本(1)DOM Level 0(2)DOM Level 2 1.2.2 事件类型&#xff08…