Repository navigation
fix(panda): judge move_to_pose success by absolute tolerances - #64
Merged
Merged
Conversation
The check used Eigen's relative isApprox on the position and on the raw quaternion coefficients. The position tolerance was therefore 1% of the goal's distance from the robot base, the orientation tolerance about 1.1 degrees and sensitive to the sign of the quaternion, and the warning only reported the position, although the orientation usually decided it. The Cartesian controller is an impedance controller without integral action, so it settles short of the goal wherever friction balances its spring. On an FER at the default impedance that was up to 7.7 mm and 3 degrees, and most moves returned False. success_threshold is now an absolute distance, 2 cm by default, and orientation_threshold a rotation angle, 0.1 rad by default, computed with angularDistance so q and -q compare equal. The warning reports both errors and both thresholds. The error computation is exposed privately as _core._pose_error for tests.
JeanElsner
force-pushed
the
jean/fix/speed-factor-validation
branch
from
September 30, 2026 16:58
4cb25a4 to
2e4a85b
Compare
JeanElsner
force-pushed
the
jean/fix/move-to-pose-success
branch
from
September 30, 2026 16:58
d7c4df7 to
f0f5a95
Compare
JeanElsner
changed the base branch from
jean/fix/speed-factor-validation
to
main
September 30, 2026 17:12
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Stacked on #63, which is stacked on #61. Merge in that order; each retargets to
mainwhen its base merges.Summary
move_to_posereturnedFalsefor most moves that finished as well as its controller can.isApproxmade it 1% of the goal's distance from the robot base, about 5 mm at the start pose and more further out.Why the defaults are what they are. The Cartesian controller is an impedance controller without integral action. It settles wherever its spring balances friction. Measured on an FER at the default impedance (800 N/m, 40 Nm/rad), four 5 cm moves from the start pose ended up to 7.7 mm and 3.0° from the goal, which is about 3–5 N and 2 Nm of friction. Three of the four returned
False. Tripling the impedance roughly halved the errors, which confirms the cause.Changes
success_thresholdformove_to_poseis now an absolute distance in metres, 0.02 by default.orientation_threshold, a rotation angle in radians, 0.1 (5.7°) by default. It's computed withQuaterniond::angularDistance, so the quaternions' sign no longer matters._core._pose_errorexposes the computation, and_core._MOVE_TO_POSE_*_THRESHOLDexposes the defaults, following the existing_JOINT_*constants.move_to_joint_positionis unchanged. Its relative tolerance works in practice, and changing it would change joint-move behaviour.This is an API behaviour change. Anyone passing
success_thresholdtomove_to_posegets a metre value instead of a relative one. The value 0.01 now means 1 cm.Test plan
tests/test_pose_error.pychecks:notes/check_pose_path.pyon the FER (protocol 5) with a libfranka 0.9.2 build of this branch, 2026-09-30. All 12 moves returnedTruewith no warnings, at 800, 1600 and 2400 N/m. The same moves on the previous build returnedFalsefor 10 of 12. Worst at the default impedance: 7.6 mm and 2.99 deg. The motion repeated within 0.2 mm and 0.1 deg of the earlier run, so only the verdict changed.