fix: 放宽 RM75 QP 位置收敛阈值

This commit is contained in:
2026-07-30 18:12:14 +08:00
parent 0df9e9bcfc
commit 84c96d7cf8
2 changed files with 34 additions and 2 deletions
+33 -1
View File
@@ -1,11 +1,13 @@
import math import math
from pathlib import Path from pathlib import Path
from types import SimpleNamespace
from xml.etree import ElementTree from xml.etree import ElementTree
import numpy as np import numpy as np
import pytest import pytest
from xr_rm_teleop.placo_ik_solver import ( from xr_rm_teleop.placo_ik_solver import (
QP_POSITION_TOLERANCE_M,
PlacoIkSolver, PlacoIkSolver,
_validated_transform, _validated_transform,
) )
@@ -94,10 +96,40 @@ def test_qp_solve_converges_to_reachable_tcp_target() -> None:
) )
) )
assert position_error <= 1e-3 assert position_error <= QP_POSITION_TOLERANCE_M
assert orientation_error <= 5e-3 assert orientation_error <= 5e-3
def test_qp_solve_accepts_position_error_within_two_millimeters() -> None:
solver = object.__new__(PlacoIkSolver)
solver._actual_joints = np.zeros(7)
solver._robot = SimpleNamespace(
state=SimpleNamespace(q=np.zeros(14))
)
solver._frame_task = SimpleNamespace(T_world_frame=None)
solver._target_errors = lambda: (1.5e-3, 0.0)
result = solver.solve(np.eye(4))
assert result == pytest.approx([0.0] * 7)
def test_qp_solve_rejects_position_error_above_two_millimeters() -> None:
solver = object.__new__(PlacoIkSolver)
solver._actual_joints = np.zeros(7)
solver._robot = SimpleNamespace(
state=SimpleNamespace(q=np.zeros(14)),
update_kinematics=lambda: None,
)
solver._frame_task = SimpleNamespace(T_world_frame=None)
solver._solver = SimpleNamespace(solve=lambda update: None)
solver._validate_result = lambda result, previous: None
solver._target_errors = lambda: (2.1e-3, 0.0)
with pytest.raises(RuntimeError, match="QP did not converge after 30"):
solver.solve(np.eye(4))
def test_validated_transform_accepts_finite_se3_and_returns_a_copy() -> None: def test_validated_transform_accepts_finite_se3_and_returns_a_copy() -> None:
transform = np.eye(4) transform = np.eye(4)
transform[:3, 3] = [0.3, -0.1, 0.2] transform[:3, 3] = [0.3, -0.1, 0.2]
+1 -1
View File
@@ -11,7 +11,7 @@ EXPECTED_PLACO_VERSION = "0.9.4"
RM75_JOINT_NAMES = [f"joint_{index}" for index in range(1, 8)] RM75_JOINT_NAMES = [f"joint_{index}" for index in range(1, 8)]
RM75_Q_SLICE = slice(7, 14) RM75_Q_SLICE = slice(7, 14)
QP_MAX_ITERATIONS = 30 QP_MAX_ITERATIONS = 30
QP_POSITION_TOLERANCE_M = 1e-3 QP_POSITION_TOLERANCE_M = 2e-3
QP_ORIENTATION_TOLERANCE_RAD = 5e-3 QP_ORIENTATION_TOLERANCE_RAD = 5e-3