Command group for LSS - 4 DoF Robotic Arm

Dear Community,

I’ve just received a LSS - 4 DoF Robotic Arm.

How can I send a multiple servo command (a.k.a. “Command Group”) as it is possible with the Lynxmotion AL5D / SSC 32 servos (as documented here)?

I could not find related hints in LSS Communication Protocol.

My goal is to move multiple servos simultaneously. Ideally I can “reuse” the command groups from my AL5D.

Thanks and best regards!

1 Like

Hey @ST2020!

Welcome to the RobotShop community!

There are currently no protocol command to create a coordinated move command as a group. That being said, this is definitely a feature we are looking into adding to the LSS!

We’ve ran some tests on older Lynxmotion platforms using the new LSS instead of Hitec RC servomotors. Even without group commands there was no real difference in how fast the servos reacted, especially if you move their baud rate to 500k (highly recommended, most platforms can support it).

As for reusing your group commands, simply add a \r (the carriage return) between the commands in a group. For example, an older command might’ve been:

Which you could replace with:
#0P1500\r#1P900\r#2P400\r#3P2200\r
At 500k baud (20 µs per character), your LSS with ID=3 would starting moving ~600 µs later, which is quite faster than the best human reflexes (~2 ms best case scenario, if I remember correctly). I’ll assume that if 15 ms delay is good for professional gamers, than under 1 ms is probably satisfactory for robot use, too! :slight_smile:

If you stick to the default 115.2k baud then it will be ~4.34 times slower, so the expected delay in that example would be about 2604.17 ms or about 2.6 ms.

I hope this information helps! Good luck with your project!

Sincerely,

1 Like

Hi @scharette

thanks a lot for the feedback - this is great help!

For your mentioned style of command group: Is there a way to find out with a (e.g. single) query whether the command group has finished or is still in execution? E.g. is there something like “#254QWR\r” -> broadcasting all servos for wheel speed?

Background: I am running a cyclic control system (150ms per cycle). In each cycle I would like to check whether the “entire robot” is still moving or has finished the current “group command”. If the robot has finished the group command then it gets the next group command - otherwise let the robot go on until it has finished the current group command.

Thanks a lot and best regards!

1 Like

Since the bus is shared by all the LSS on it, they cannot all answer at the same time (broadcast a reply). If you actually send a broadcast ID (254) query, the LSS will not reply since that would cause bus contention.

But, 150 ms is pretty long and you should have plenty of time during one loop to query status (command = Q) of each of the 4 LSS on your bus. Simply send one query then wait for a reply. If your platform allows for tweaking the FIFO and FTDI drivers’ response (for the LSS Adapter Board), you can get the latency pretty low, maybe 1-2 ms per query. I know someone else has done this on the forum under Linux (on a PC) and a different person on a RPi4 by changing using the hardware UART instead of the USB port (using one with a FIFO of 1 byte, I think).

We have some ideas at this time on a potential bus-wide query command, but it is not ready to implement let alone test.

1 Like