Inconsistent results with MovePlayer (and goto_position in general)

motors
english
software
Tags: #<Tag:0x00007f5ce7cb8658> #<Tag:0x00007f5ce7cb8450> #<Tag:0x00007f5ce7cb8248>

#1

Hi all!

I’ve been using goto_position() with the robot abstraction on a set of 5 MX-28s with a bps of 1000000 and the default 50Hz refresh rate. But for some reason, I keep getting inconsistent playback of moves I record.

What I mean is, when I first power the motors, record a move and play it back, the move is fast, jerky, and seems to miss frames. I have a helper function that moves my motors back to a neutral position over 1.0s, that I often run after playing a move. I have relatively small angle limits, so this happens fairly slowly. When I play back a move after this, the move is played back very smoothly, but very slowly! It seems like it’s not properly changing motor speeds. Has anyone experienced this issue? Is there something I’m missing?

Thanks so much for any advice!


#2

Hello,
Are you using à raspberry pi or a laptop ?

If tout are using a laptop, when you say goto_position at 50Hz, do you ask this function at 50Hz ? In this case, your behavior is normal. You send too much constraint at a time.
Two options : you use goto but at 1Hz or until 10 Hz.
Above 10Hz, I suggest you use goal_position with a moving_speed at 0 (maximum speed) but this setup does not work on raspberry because of usb bottleneck.
The second option can give very smooth moves.


#3

Hi! I’m using a laptop currently, with a USB2Dynamixel, but switching to a USB2AX. Using MovePlayer, I believe it is implemented using goal_position and goal_speed, which is updated at 50Hz. I believe goto_position is implemented in a similar way. Does this mean I should lower the overall refresh rate of the robot abstraction? i.e. BaseDxController ? I didn’t realize this was such a bottleneck.

I still am confused why the behavior isn’t at least consistent. Thanks for your help!