Ros2/power on position independance#72
Merged
AndreasJosefGassner merged 2 commits intomainfrom Feb 16, 2026
Merged
Conversation
…nt positions on power-on. Requires config file changes.
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.
This PR makes the published joint values independent of the GELLO's joint positions on power-on and thus removes the need for an error prone manual initialization routine before teleoperation.
Until now, it is necessary that the GELLO arms are within a certain range of poses when they get powered on, in order that the joint position mapping between the GELLO arms and the real robots are correct. This is because the Dynamixel motors reset their internal position registers to values between 0 and 2π radians on power up, losing tracking of full rotations (multi-turn), and the publisher didn't handle this ambiguity.
Implementation approach:
On startup, the publisher normalizes the initial motor positions by removing assembly offsets, applying joint signs, and wrapping values to each joint's working range. This resolves the multi-turn ambiguity from the motor's power-on reset. After initialization, all position updates are computed incrementally using deltas between consecutive readings, maintaining continuity across the full joint range. Final positions are clamped to the FR3's joint limits.