Hi all. I hope this is the right place to post this
I am building a T-Hex (4dof) but with a Phoenix like body I am at the point of calibrating. I have changed the body dimetions in the config file swapped out your nifty DIY controller file replaced it with PS2 file got it all lined up at 1500 but when I fire it up the back legs are in a different posion not much but a problem. I think I read some ware that Zenta is not using offset registers. I am not much of a software guy I know just enough to get my self in trouble… Like now! If some one could point me in the right direction where theas values are changed that would be great.
sounds like a assembly problem.
the legs for the front, middle and rear are different.
T-Hex 3DOF Leg (Front/Middle legs)
viewtopic.php?f=40&t=6092
T-Hex 3DOF Leg (Rear leg)
viewtopic.php?f=40&t=6076
if you have done this correctly then it may just be down to your servo horns being off.
Thank you for responding Yes I am aware that the front & middle legs are different then
The rear legs. All the legs are level at 1500 in Lynx Term. When I hit start on the PS2
and the robot go’s to it’s start position. The rear legs are a few degrees off from the front & middle legs even though I calibrated them in lynx term and saved them to the SSC 32.
It aperers that the modified Phoenix /4dof T-hex code is not looking to the ssc 32 registers for the values.
Did you mechanically align the joints as well?
8-Dale
If I understand your question, you are asking about using different options other than the built-in servo offsets that are stored in the EEPROM of the SSC-32. As you mentioned, there are places and robots that Zenta may not use the built-in SSC-32 servo offsets. Some of the time I believe it is because he may want/need a larger range than the SSC-32 register supports.
There are a couple of alternative ways:
-
You can use the SSC-32 PO command to set up offsets. There are a couple issues here, which include if the BAP resets and you reissue the PO commands, I think the work as addative… Also I think they have the same restrictions.
-
Do it your self. If you are using the phoenix code, you can have a set of offsets you use. Options include compiling them in with things like a wordtable or simple constants. Alternatively you can store them in the EEPROM of the BAP and read them back in. Then you would need to change the ServoDriver and FreeServos functions to make use of these offsets. My versions of these functions are non-standard as they run in binary mode and using my own serial output functions to get to a higher speed, but for example my Servo Driver starts off looking like:
for LegIndex = 0 to 2
wCoxaSSCV = (-CoxaAngle1(LegIndex) +900)*1000/1059+650 ; compute the values to pass to SSC
wFemurSSCV = (-FemurAngle1(LegIndex)+900)*1000/1059+650
wTibiaSSCV = (-TibiaAngle1(LegIndex)+900)*1000/1059+650
This could be modified to have an offset. Something like:
for LegIndex = 0 to 2
wCoxaSSCV = (-CoxaAngle1(LegIndex) +900)*1000/1059+650 + CoxaOffset(LegIndex)
wFemurSSCV = (-FemurAngle1(LegIndex)+900)*1000/1059+650 + FemurOffset(Legindex)
wTibiaSSCV = (-TibiaAngle1(LegIndex)+900)*1000/1059+650 + TibiaOffset(Legindex)
This added the offset in SSC-32 units. Alternatively you could define them in something like 10ths of degree or the like and maybe these calculations could be:
for LegIndex = 0 to 2
wCoxaSSCV = (-CoxaAngle1(LegIndex) + CoxaOffset1(LegIndex) +900)*1000/1059+650
...
I hope this makes a little sense…
Kurt