Good morning @cyberpalin and others
Looks like someone is having some fun!
Is your output in PWM (RC) like servo positions centered at 1500 or in angles (10ths of a degree) Actually looks like maybe both…
There were a couple ways of doing some of this.
That is suppose Servo 2 wants to move from 70 to -52 in 100ms (Or what the step time is).
And so you output something like: #2D-52T100\r
Which hopefully will start moving that servo to that position and should arrive at that position in specific time.
However if you output a new command, it will override that…
Two ways we handled this. We detected that the servo made it to it’s position.
Do some form of Query. On SSC-32 this was the Q command… Which returned something like a . when done and something like a + if the last. With the LSS we do still have the Q command, which returns a byte showing different status.
Note: with the SSC-32 we only needed to talk to the SSC-32 as it controlled the servos, here we would maybe have to ask all of the servos are you done yet…
When we went with this approach (again only one Serial command: Probably just Q\r and one byte back, we found that the servo movements were not fluid but sort of jerky as each servo would start and stop, and then you had to wait for a full Query to complete, before you would start them to their next position.
So we went to our own timed output code. That is if I say that the move is supposed to last 100ms, I will output the next command 100ms from the time I started this move. We also worked to make this time as accurate as possible, as the SSC-32 would not execute the data, until it received the CR. So earlier we output everything but the CR and when that time came we output the final CR to start the next move.
However on Dynamixels, I think the code outputs the whole Group move command at the specified time. But the timing was reasonably the same, as we always output the exact same number of bytes per step.
Which usually worked reasonably well when run from Microcontroller. At times though I have seen issues when run through something like RPI, especially through USB, where the timing may be different when the RPI may be doing something else.
Side comment: So at one point, I had made a version of the firmware for the USB2AX device, which allowed me to say here is the next group move command to execute when you finish the previous one. Which removed the USB latency issues. Edit: I believe I also had code like this in my RPI port that used a Teensy to control the servos
My strong guess is that is what we will probably want to do the walking stuff using our own timing code as well. Unless again the LSS has the ability to say here is your next move…
Hope some of this makes sense