Fix offset translation for STS servos. #97
Merged
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.
Hi!
This fixes offset translation for Feetech STS servos (fixes #96), making it continuous from -180 to 180 degrees. One can now set a new zero position by simply setting the offset to 0, reading the current position, and writing it to the offset, which previously broke on negative positions and required one to negate positive positions.
I have tested this to work on the STS3215.
A breaking change this introduces is changing the register type for
offsetfromi16tou16, which changes the signature forread_raw_offset,write_raw_offsetandsync_write_raw_offsetto takeu16instead ofi16. I feel that this is a worthwhile change, as the register is never interpreted as a signed integer, just an unsigned magnitude (0--2047) and a direction bit (bit 11). I am interpreting the direction bit as positive low and negative high.