by 27Loco » Thu Apr 29, 2010 8:37 pm
by 27Loco
Thu Apr 29, 2010 8:37 pm
Changed the hands to the "normal" ones again, because without the additional AX-12+ it doesn't make sense to add gripper.
Furthermore I made minor changes to the legs and took the design of the FREEDOM JrIII and changed all Dynamixel IDs. Oh dear making all motions again
Does anybody tried the software of best technology? The motion editor has a quite a different but interesting approach.
They are taking a "HomePostion" by just capturing the position of the servos. Looks like this below:
- Code: Select all
/*======================================================================*/
/* HomePosition */
/*======================================================================*/
const __attribute__((section (".rom3"))) THumanoid HomePos = {
Servos:{
RightLeg:{ 507, 517, 738, 590, 510,},
LeftLeg: { 504, 516, 290, 437, 511,},
RightArm:{ 491, 245, 486,},
LeftArm: { 519, 775, 542,},
},
};
After declaring the home position the value zero will be that servo postion captured as home position. Makes it easier to remember were the robot started with his movement.

- Code: Select all
// Wake Up
const __attribute__((section (".rom4"))) THumanoidMotion WakeUp[]={
{ Servos:{
RightLeg:{ 0, 0, 0, 0, 0,},
LeftLeg: { 0, 0, 0, 0, 0,},
RightArm:{ 0, 0, 0,},
LeftArm: { 0, 0, 0,},
},
Adj:ADJ_SACC_SDECEL, Div:4000,
},
};
Below is a simple bow motion. This is the part I am still trying to figure out. The difficulty is to recalculated the values to get the values of the servo postion.
I think the formula goes like this:
- Code: Select all
CurrentPosition * Previous Position / 1000 + HomePosition
Lets try that out with the second servo of the right and left leg:
right: 517 * 718 / 1000 + 517 = 888
left: 515 * 724 / 100 + 515 = 890
hm the left value is somehow not correct. should be below 512 of course. No idea how they figure that out. Maybe they are just adding a small line somewhere that calculates the following for the left side: (512-890)+512
- Code: Select all
// Bow
const __attribute__((section (".rom4"))) THumanoidMotion Bow[] ={
{ Servos:{
RightLeg:{ 0, 718, -11, -249, -2,},
LeftLeg: { -8, 724, 2, -263, 0,},
RightArm:{ 240, -5, -5,},
LeftArm: { 275, -2, 8,},
},
Adj:ADJ_SACC_SDECEL, Div:1000
},
{ Servos:{
RightLeg:{ 0, 0, 0, 0, 0,},
LeftLeg: { 0, 0, 0, 0, 0,},
RightArm:{ 0, 0, 0,},
LeftArm: { 0, 0, 0,},
},
Adj:ADJ_SACC_SDECEL, Div:1000
},
};
You can download their complete library from their website including inverse kinematics walking, motions for the robo one competition.

Does anybody can imagine a different approach on how they are using their motion data?
You can find more info on their website, including a lot of code.
http://www.besttechnology.co.jp/modules/knowledge/?%E3%83%A2%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90[/code]
Best wishes,
Loco

Changed the hands to the "normal" ones again, because without the additional AX-12+ it doesn't make sense to add gripper.
Furthermore I made minor changes to the legs and took the design of the FREEDOM JrIII and changed all Dynamixel IDs. Oh dear making all motions again
Does anybody tried the software of best technology? The motion editor has a quite a different but interesting approach.
They are taking a "HomePostion" by just capturing the position of the servos. Looks like this below:
- Code: Select all
/*======================================================================*/
/* HomePosition */
/*======================================================================*/
const __attribute__((section (".rom3"))) THumanoid HomePos = {
Servos:{
RightLeg:{ 507, 517, 738, 590, 510,},
LeftLeg: { 504, 516, 290, 437, 511,},
RightArm:{ 491, 245, 486,},
LeftArm: { 519, 775, 542,},
},
};
After declaring the home position the value zero will be that servo postion captured as home position. Makes it easier to remember were the robot started with his movement.

- Code: Select all
// Wake Up
const __attribute__((section (".rom4"))) THumanoidMotion WakeUp[]={
{ Servos:{
RightLeg:{ 0, 0, 0, 0, 0,},
LeftLeg: { 0, 0, 0, 0, 0,},
RightArm:{ 0, 0, 0,},
LeftArm: { 0, 0, 0,},
},
Adj:ADJ_SACC_SDECEL, Div:4000,
},
};
Below is a simple bow motion. This is the part I am still trying to figure out. The difficulty is to recalculated the values to get the values of the servo postion.
I think the formula goes like this:
- Code: Select all
CurrentPosition * Previous Position / 1000 + HomePosition
Lets try that out with the second servo of the right and left leg:
right: 517 * 718 / 1000 + 517 = 888
left: 515 * 724 / 100 + 515 = 890
hm the left value is somehow not correct. should be below 512 of course. No idea how they figure that out. Maybe they are just adding a small line somewhere that calculates the following for the left side: (512-890)+512
- Code: Select all
// Bow
const __attribute__((section (".rom4"))) THumanoidMotion Bow[] ={
{ Servos:{
RightLeg:{ 0, 718, -11, -249, -2,},
LeftLeg: { -8, 724, 2, -263, 0,},
RightArm:{ 240, -5, -5,},
LeftArm: { 275, -2, 8,},
},
Adj:ADJ_SACC_SDECEL, Div:1000
},
{ Servos:{
RightLeg:{ 0, 0, 0, 0, 0,},
LeftLeg: { 0, 0, 0, 0, 0,},
RightArm:{ 0, 0, 0,},
LeftArm: { 0, 0, 0,},
},
Adj:ADJ_SACC_SDECEL, Div:1000
},
};
You can download their complete library from their website including inverse kinematics walking, motions for the robo one competition.

Does anybody can imagine a different approach on how they are using their motion data?
You can find more info on their website, including a lot of code.
http://www.besttechnology.co.jp/modules/knowledge/?%E3%83%A2%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E6%88%90[/code]
Best wishes,
Loco
