moteus firmware releases
I don’t normally post about moteus firmware releases, but there have been many in the last few months that fix some long standing bugs and regressions. First, the current release as of this post is:
- github: 2023-06-22
With that out of the way, here some of the fixes:
Position drift with non-unity gear reduction
It is embarrassing how long this issue has been outstanding, but ever since the flexible I/O system was introduced, there has been an issue where if the gear reduction was configured to a value other than 1, then the output position would drift from the source encoder over time. If control was not active, you would see the position drift, and if control was active, then moteus would report the correct position, but the actual position would drift.
Non-zero goal velocities with limits
Last year, when acceleration and velocity limits were implemented, the semantics of a command with a non-zero velocity was that the controller would try to reach the exact position as stated in the command while traveling at that velocity. If the velocity was non-zero, that often meant that the controller would need to back up a lot, then re-accelerate. Needless to say this is not the most useful semantics.
Now, moteus treats a command with non-zero velocity as “follow the trajectory x = x_command + v_command * t”. This is what most users expected and is more useful.
Bootloader operation in degraded CAN environments
The primary moteus firmware has long had two mitigations for degraded CAN environments. First, if a query message has the BRS (bit rate switch) flag disabled, then the controller will respond in kind. This allows the host to force operation at 1Mbps instead of the normal 5Mbps. Second, moteus will automatically attempt to rejoin the CAN bus if a busoff event occurs, say because some device was connected with an incorrect bitrate.
Those were helpful, but the bootloader lacked those fixes, so flashing new firmware in a degraded CAN environment was either unreliable, or not possible at all. No longer!
Misc
That wasn’t even all, a number of smaller fixes were made:
-
It used to be possible to trigger a firmware assert if position mode was commanded within a few ms of power on.
-
The “conf default” command would reset the configuration, but those new values would only actually be used for a subset without further action.
-
It was possible for the initial position to be outside the range of -0.5 / +0.5.
-
The ADC performance variability with firmware versions is now hopefully resolved for good (to be detailed in a later post).
Thanks for all your feedback to help find and fix issues!