# Nav2无GUI环境下如何通过/rosout日志监控运行状态并触发重启

> 原文链接：https://robotics.hellobike.com/pitfalls/2025-04-25-robotics-se-115389
> 频道：pitfalls | 更新日期：2025-04-25 | 标签：auto, stackexchange, nav2
> 核心摘要：在无屏机器人上通过订阅/rosout话题解析Nav2日志，检测特定关键字以判断系统状态并触发自动重启服务。

# Nav2无GUI环境下如何通过/rosout日志监控运行状态并触发重启

::: v-pre
> 本文由 AI 根据公开内容整理，可能有误，请以原文为准：[How can I verify that nav2 is running properly in a GUI-less environment?](https://robotics.stackexchange.com/questions/115389/how-can-i-verify-that-nav2-is-running-properly-in-a-gui-less-environment)（Robotics Stack Exchange #115389）

**状态**：已解决

## 问题

在无GUI的真机环境中部署Nav2时，无法直观确认导航栈是否正常运行或发生故障。仅当机器人不响应移动指令时才能发现问题，缺乏程序化检测Nav2异常状态的机制，导致无法构建自动杀进程并重启的Ubuntu守护服务。

## 环境

Ubuntu系统，ROS 2，Nav2导航栈，无显示器真机环境，rclpy Python客户端库。

## 解决办法

1. 创建继承自 `rclpy.node.Node` 的 `RosoutParser` 节点，使用 `self.create_subscription` 订阅 `/rosout` 话题，消息类型为 `ros_interfaces.msg.Log`。
2. 在回调函数中检查 `msg.name` 字段，过滤出目标节点（如 `basic_navigator`）的日志消息。
3. 解析 `msg.msg` 内容，匹配关键状态字符串（如 "Nav2 is ready for use!"）或错误关键字，作为系统健康度判据。
4. 将解析逻辑集成至Ubuntu systemd服务或独立监控脚本中，当检测到异常日志时执行 `nav2` 进程终止与重启操作。
5. 利用 `Log` 消息中的 `file`、`line`、`function` 字段辅助定位问题源头，实现无GUI环境下的自动化运维闭环。

原问题作者：dongdong；采纳答案作者：dongdong。原内容依 CC BY-SA 4.0 授权，本页摘要同样依 CC BY-SA 4.0 授权。
:::

## 原始参考来源 (Sources)

- [Robotics Stack Exchange #115389：How can I verify that nav2 is running properly in a GUI-less environment?](https://robotics.stackexchange.com/questions/115389/how-can-i-verify-that-nav2-is-running-properly-in-a-gui-less-environment)