Lynxmotion SES V2 Hexapod Robot

One tip for easy calibration of the femur servo. Before mounting the lower screws on coxa horn and before installing the tibia servo. Simply make the servo go idle and press down the horn and then set origin offset.

1 Like

@Zenta - You are right about this tip but i will add that mounting the last servo will not impeed the process. The servo (last one) will sit on the table at exactly the same height as the other one.

@Kurte - Iā€™m unsure i understand. The servo do not have a proper Zero since you can send the command to zero it anywhere (360deg).

LOL, you are correct about that!

I ended up wiring the leg like this. Iā€™m using a beta short C bracket since I a got the old SES C bracket. Using the beta cable holder that also work fine.
I decided to reverse the screws that hold the femur brackets. So that the screw heads are pointing toward the femur servo. Since the sharp end of the screw might rubb against the servo wire.





Btw. The new cable holders are great! Really love the new brackets and the smooth movement and sound of the servos. Looking forward to get it walking.

5 Likes

Thanks @zenta @dialfonzo - As usual I do a few things backwards. That is I assembled the six legs and then look to how to wire. Of course I then find it difficult to get wires into the one side of the coxa to femur bracketā€¦ So for first on removed the screws to remove servo slightly plug in wire.

Question: With your brackets example that one, do you typically screw in all 4 screws on both sides, or only a subsetā€¦ I was doing every possible screw hole, but looks like I might run slightly short on screws. But will see I probably have more of them setting around from other projects over the years.

KĆ„re - Thanks for those pictures. Looks like a nice wire holder on top of the smaller C brackets. I am guessing that is one of your own brackets?

It looks like the short C Brackets that were included are the V1? and not the current V2? As I donā€™t see a place where they narrow down like shown in the current page, to allow cable routing and the clips? So I am guessing for now go with Zip tie?

Zeroing the servos - I asked as each robot/servo type over the years have all appeared to suggest different ways of doing things. i.e. back to old Lynxmotion days. Many times the assembly instructions would say, make sure the servo is zeroed, then undo the horn, move it N clicks in some direction, then install, then run the servo test app, and move the servo until exactly X angle and write down numberā€¦

Robotis one would say make sure that the servo is in the zero location by looking at the lines for 0 on the horn and attach your bracket accordingly.

Orion said something like assemble the robot, then move the leg to where it has the right angles and tell the software you are there and it will read in the current offset and use itā€¦

I am thinking closer to Orion, although I am not sure if you are simply using the Offset command with your software are do you set your actual logical zero point. Speaking of the Orion ones. One interesting feature Nathan added to their servos was the ability to set the logical direction for angles. That is with most setups, the code needs to remember which direction each legs servos are and negate the angle on some of themā€¦ With his setup you could tell the servo that it is to reverse the angles for you, which was not a big deal, but was interesting.

Still lots more for me to learn!

Now back to playing

1 Like

I think the main difference is that we are using a magnetic encoder in the LSS (unlike many other smart servos using potentiometer) and there is therefore no need to be at any specific position to set a zero with the LSS. By default, though, at production the horn is set so that the holes of the horn align with the case of the LSS when at position 0Ā°.

My absolute favourite is RB-Spa-879, especially because it is both low cost and does I2C shifting properly. As far as I know, some of the other low costs ones available donā€™t work with I2C necessarily. Anyway, I use that one every time I need level shifting for digital I/O.

Sounds like a good plan. Less confusion that way! :slight_smile:

There is no group move at this time, partly due to the fact that each motor is its own controller. That being said, there are a few ideas concerning this, such as a group move command (where multiple IDs & positions are updated all at once).

Currently, youā€™d need to send all commands sequentially (ex: #1D100\r#2D200\r#3D400\rā€¦). If updating 18 LSS at the same time, the first one in the list would start moving sooner than the 18th one, of course.
Now, at 500 kbps and if the entire 18 servo command string is packed beforehand and sent all at once (no delay between bytes/commands), the delay between the first and last servo moving should be at most:

  • One command is at most = header [1] + ID [2] + command [1] + value [4] + footer [1] = 9 bytes.
  • One command is at lest = header [1] + ID [1] + command [1] + value [1] + footer [1] = 5 bytes.
  • Character transfer duration (500 kbps => 50 kBps) = 20 Āµs / byte.
  • Worse delay between first and last servo motion = 18 x 9 bytes x 20 Āµs/byte = 3240 Āµs or 3.24 ms, Ā± jitter from control loop.

Assumptions made above:

  • 18 LSS on one bus
  • Baud is set to 500 kbps for all LSS (8N1)
  • IDs are 2 digits long
  • Commands are all 4 digits long (i.e. 0-3600)

Therefore, I think the current delay for an 18 servo update is probably quite acceptable since it falls within the jitter size of the control period (probably around @ 2.5 ms) and human reflexes are most likely > 10 ms in best case scenario (competitive video gaming is fine with 20-30 ms loop).

Of course, we welcome all input and for sure are interested in any way to make this better (such as an actual group move command)! I can see such a group move being followed by an (optional) ā€œexecuteā€ broadcast command to allow everything to start at the same time (again, Ā± jitter of control loop).

We do have a gyre configuration, which literally inverses all motions without you needed to change your code. We actually use this in the LSS 4DoF arm, too.

You can read more about it here.

Thanks. Ordered, Iā€™ve been using them myself before. Just couldnā€™t find anyā€¦

1 Like

I use 4 screws to hold brackets together. But I use only 4 screws to mount the SES V2 Double Wide Bracket to the femur servo.

Yep. Therefore I used a beta V2 short C-bracket. A Zip tie should do the job though.

1 Like

Btw. @scharette or @dialfonzo is there a reason youā€™ve skipped the 3D printed end-cap on the foot? Iā€™m using the one supplied during beta though. They was pretty neat.

1 Like

Thatā€™s going to be for @dialfonzo, I leave all mechanical things to his magical hands! :smiley:

Regarding ā€œzeroingā€ i think it would be a lot easier to lay the robot flat on the ground like this but iā€™m not the programmer here. That would give an accurate Zero i think.

@kurte - Most of the location only use 4 screws, even for the LSS-DoubleWide bracket. If anything is missing let us know.

@zenta - That must be an error. Would you like the file ?

I think the key point, no matter what method we use, is that it is repeatable! :smiley:
Also, I should mention that a quick #254CO\r will set the zero for all servos on the bus, you can also add a value to the CO command, such as #1CO500 or something. Therefore, even if the flat position (shown above) is not the optimal position for all the servosā€™ zeroes, it would be the reference point from which you set them so that the end result is the same every time for every user! :slight_smile:

No need. I have them. @kurte og @xan might not have them?

Thatā€™s true and I agree this approach is much easier for everyone. We need some fixed offsets on the front and rear coxas anyway. So we might add one for the tibias as well.

1 Like

During production this is the step where the LSS horn is ā€œcenteredā€ so the holes are aligned with the case:


The LSS is placed into a bracket that is fixed in place and turned so everything is aligned. Then the internal zero for the encoder is set. This allows good enough alignment that is both easy to do and also reliable.

Thatā€™s what I liked a lot about @dialfonzo 's proposal of laying the hex flat. Most people should have easy access to a flat surface that is large enough (tables, counters, floors! :smiley: ) and it would lead to reliable offsets. Since maybe we wouldnā€™t want all of those servos to be zeroed at that position, thatā€™s where you can send each joint individually a CO[value] where the value is different than just doing CO. This allows us to do all the joints at once but also have zeroes that are different for each joints.

And in reference to @kurte point, we can setup CG=-1 where appropriate before doing the zero, that way it all works well with maybe positive values going forward (no matter the side)? I can certainly see using CG for the LSS responsible for horizontal movement!

Thanks everyone,

Lots of good information here for me to absorb. Hope you donā€™t mind I keep throwing things out here as I am not as familiar with these setups as you all are. I hope you donā€™t mind that I mention other servo systems and the like.

@dialfonzo - The standard older short C bracket should work fine with zip-tie or the like. If you donā€™t mind shipping the other ones to make them all more what will likely be your end configuration that also would be great.

Offsets
I like the idea of something like lying the robot down flat and have it calculate the logical zero point. I believe Orion did something similar and than allowed you to fine tune as well.

Other servo stuff
Their servos were sort of interesting but they broke a lotā€¦ Another interesting thing he had in their servo software, was the ability to tell the servo to stop moving if the torque (or was it current or???) exceeded some valueā€¦ Actually I think he did this in their servo controller, butā€¦ He used it to detect when gripper was holding something. And we were experimenting in trying to use this to detect foot hitting ground or being blocked. But again first need to work on the basics.

Recap: currently no group moves.
The SSC-32 I believe sort of had the command with the format I mentioned. Or later on we had a binary version of the command as well.

The Robotis Dynamixel: work be setting or query of logical registers. And they have command to do a write to a set of servos, by doing specific command sent to broadcast ID, and with it the starting register number and number of registers to set and then followed by data for each servo, each block starts with servo ID, followed by data for that servo. And they all wait until they receive the trailing checksum data to act on the data.

They also with V2 have ability to do query to multiple servos as well. They receive command like the above, with just the servo numbers, and then each responds in turn with their data packet. ā€¦

Now back to playing

1 Like

Iā€™m not sure i follow here, you do not have the brackets needed to build the Hexapod ?
The angle bracket in this configuration is a new one, i made it in such a way that itā€™s now a real multiple of LSS size.

The servo have two commands based on Current:
Current Hold
Current Limp

2 Likes

Sorry :blush: - As I mentioned it is sort of of I think trivialā€¦

As I mentioned I did a dry run of assembling the Hex without doing the wiring.


Pardon the mess and the quick Iphone picture.

The Issue I was trying to resolve was how the wire from Coxa, to femur connects. With Zentaā€™s setup, the top Short C bracket, he has a cable bracket on the top of the short C bracket. So I tried the new cable clip and it did not appear to want to fit. Then I noticed that the C-brackets on website shows there are now holes in them for routing cables plus setup for your new clipsā€¦ Again not a show stopping issue.

2 Likes