Skip to content

踩坑GitHub hello-robot/stretch_ros29 个月前

Stretch Driver双重try-catch致Ctrl-C时stop()未可靠执行 ​

本文由 AI 根据公开内容整理,可能有误,请以原文为准:Double try-catch(GitHub hello-robot/stretch_ros2 #159)

状态:有绕过办法

问题 ​

在Stretch Driver主循环的双重try-catch结构中,当executer.spin()运行时触发Ctrl-C,Python会先执行内层finally再进入except块。这导致ROS2节点在发送机器人停止指令前被销毁,使得stop()命令无法可靠执行,机器人可能维持最后接收的运动指令而非安全停止。

环境 ​

hello-robot-stretch-robots, Stretch Driver, ROS2, Python

解决办法 ​

  1. 修改异常处理逻辑,将robot.stop()与gamepad_teleop.stop()调用从外层except块移动至内层finally块中,确保在destroy_node()之前优先执行停止指令。
  2. 新增单元测试验证中断安全性,通过Mock robot和gamepad_teleop对象,断言在spinning期间发生KeyboardInterrupt时,两个组件的stop()方法均被正确调用且先于节点销毁。
  3. 提交PR修复该问题,确保中断信号能触发确定性的安全停机序列,避免依赖外层异常捕获的不确定性行为。

讨论原作者:@hello-binit 等,版权归原作者所有。

来源

本页事实对应的公开页面,以原文为准。

  1. GitHub hello-robot/stretch_ros2 #159:Double try-catch访问 2026-10-26