外观
踩坑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
解决办法
- 修改异常处理逻辑,将
robot.stop()与gamepad_teleop.stop()调用从外层except块移动至内层finally块中,确保在destroy_node()之前优先执行停止指令。 - 新增单元测试验证中断安全性,通过Mock
robot和gamepad_teleop对象,断言在spinning期间发生KeyboardInterrupt时,两个组件的stop()方法均被正确调用且先于节点销毁。 - 提交PR修复该问题,确保中断信号能触发确定性的安全停机序列,避免依赖外层异常捕获的不确定性行为。
讨论原作者:@hello-binit 等,版权归原作者所有。
来源
本页事实对应的公开页面,以原文为准。