From 32bbd5c44c8e505a76d3637328a1f6f7e1f56e1a Mon Sep 17 00:00:00 2001 From: sladro Date: Sat, 13 Sep 2025 08:22:40 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8D=E9=85=8D=E7=BD=AE?= =?UTF-8?q?=E6=9B=B4=E6=96=B0=E5=90=8E=E8=B7=AF=E5=BE=84=E8=A7=84=E5=88=92?= =?UTF-8?q?=E7=BB=84=E4=BB=B6=E6=9C=AA=E9=87=8D=E6=96=B0=E5=88=9D=E5=A7=8B?= =?UTF-8?q?=E5=8C=96=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题描述: - 修改配置文件后运行路径规划报错"Joint index out-of-range" - CollisionChecker持有无效的robot_id引用 解决方案: - 在on_config_applied方法中重新初始化路径规划组件 - 确保路径规划组件使用新的arm_controller实例 影响文件: - src/gui/main_window.py: 添加_initialize_planning_components()调用 - CLAUDE.md: 更新已知问题文档 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- CLAUDE.md | 14 ++++++++++++++ config.json | 8 ++++---- src/gui/main_window.py | 3 +++ 3 files changed, 21 insertions(+), 4 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index e7671d4..e81fe62 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -144,6 +144,20 @@ wall_position = [2.0, 0.0, 1.0] # 错误! ## 已知问题 +### 配置更新后路径规划组件未重新初始化(2025-09-13)✅ 已解决 +**现象**:修改配置文件后运行路径规划,报错"Joint index out-of-range"。 + +**根本原因**: +- `on_config_applied`方法重新创建了`ArmController`但未重新初始化路径规划组件 +- `CollisionChecker`仍持有旧的`arm_controller`引用,其`robot_id`已无效 +- 使用无效的`robot_id`调用`p.resetJointState`导致索引越界错误 + +**解决方案**: +- 在重新创建`ArmController`后立即调用`_initialize_planning_components()` +- 确保路径规划组件使用新的`arm_controller`实例 + +**修复文件**:`src/gui/main_window.py`(第282行) + ### KDL逆运动学崩溃(2025-09-11)✅ 已解决 **现象**:点击"Test Reachability"按钮后程序直接退出,无错误信息。 diff --git a/config.json b/config.json index af6aecf..370097c 100644 --- a/config.json +++ b/config.json @@ -65,9 +65,9 @@ }, "transport_object": { "initial_position": [ - 1.0, + 0.6, 0.5, - 0.7 + 0.5 ], "dimensions": { "width": 0.1, @@ -98,7 +98,7 @@ "path_planning": { "collision": { "check_resolution": 0.05, - "safety_margin": 0.01 + "safety_margin": 0.05 }, "execution": { "velocity_scaling": 1.0, @@ -106,4 +106,4 @@ "motor_max_force": 150.0 } } -} +} \ No newline at end of file diff --git a/src/gui/main_window.py b/src/gui/main_window.py index f1bb256..e196c65 100644 --- a/src/gui/main_window.py +++ b/src/gui/main_window.py @@ -278,6 +278,9 @@ class MainWindow: # Recreate arm controller self.arm_controller = create_arm_controller(self.config_loader, self.physics_client) + # Reinitialize path planning components with new arm controller + self._initialize_planning_components() + # Restore robot state if available if robot_state: try: