如何在ROS2中修改launch文件,以便在接收到特定信号(如SIGINT)时能够执行预设的自定义功能?
时间: 2024-12-20 19:20:41 浏览: 2
在Robot Operating System (ROS2) 中,如果你想让launch文件在接收到特定信号,如SIGINT(Unix/Linux系统中的中断信号,通常由`Ctrl+C`触发),执行预设的自定义功能,你需要结合使用ros2节点生命周期管理和信号处理机制。
首先,你需要创建一个包含自定义功能的Node,这个Node应该监听SIGINT信号,并在其回调函数中执行所需的任务。你可以使用`rclpy`库,它是ROS2 Python客户端的一部分,来实现这一点。以下是一个简单的步骤:
1. 导入必要的库:
```python
import rclpy
from rclpy.node import Node
```
2. 创建一个继承自Node的类,并覆盖on_shutdown()方法,这里将处理SIGINT信号:
```python
class CustomNode(Node):
def __init__(self):
super().__init__('custom_node')
self.shutdown_received = False
def on_shutdown(self):
# 这里是你预设的自定义功能
self.get_logger().info('Received SIGINT signal. Executing custom function...')
# 在此处添加你的定制操作
self.shutdown_received = True
self.destroy_node()
```
3. 在node初始化时,注册shutdown handler:
```python
def main(args=None):
rclpy.init(args=args)
node = CustomNode()
try:
rclpy.spin(node)
except KeyboardInterrupt:
# 如果用户手动发送SIGINT(例如通过Ctrl+C)
pass
finally:
if not node.shutdown_received:
node.on_shutdown()
rclpy.shutdown()
```
4. 现在,当你运行含有这个节点的launch文件时,它会在接收到SIGINT信号时自动执行你的自定义功能。
阅读全文