Hi all,
I try to put my FanCat into operation with the Shoulder Rolls. In opencat.h there is #define WALKING_DOF 8 which I changed to 12. A first test led to my FanCat fidgeting uncontrollably.
Are there any other points to consider?
Greetings from Germany
Steffen
the factors are the coefficient of P control (one part of PID control). It adjusts the joint angles proportional to the body orientation angles (in radian).
X leg is the joint configuration similar to humans, with elbow and knee pointing inward. >> leg is like a dog, with elbow and knee joints pointing in the same direction.
The 16 elements in the matrix are arranged as a 4x4 array, corresponding to each joint. The sub-element(pair of numbers) is the coefficient for pitch and roll angles' coefficient on each joint.
s(houlder): shoulder roll joint
u(pper): shoulder pitch joint
l(ower): knee pitch joint
R: Roll angle
P: Pitch angle
F: Factor
Hi, can you explain what are values (factors - are they degrees or some other values and what is 1.5 and -1.5? ), what is X_Leg and what is Leg and what number pairs in matrix mean and how are they grouped?
Thanks.
The following parameters are all used in the balancing, each corresponds to one DoF.
#define panF 60 #define tiltF 60 #define sRF 50 //shoulder roll factor #define sPF 12 //shoulder pitch factor #define uRF 30 //upper leg roll factor #define uPF 30 //upper leg pitch factor #define lRF (-1.5*uRF) //lower leg roll factor #define lPF (-1.5*uPF)//lower leg pitch factor #define LEFT_RIGHT_FACTOR 1.5 #define FRONT_BACK_FACTOR 1.5 //#define POSTURE_WALKING_FACTOR 1 #ifdef POSTURE_WALKING_FACTOR float postureOrWalkingFactor; #endif
#ifdef X_LEG int8_t adaptiveParameterArray[16][NUM_ADAPT_PARAM] = { { -panF, 0}, { -panF, -tiltF}, { -2 * panF, 0}, {0, 0}, {sRF, -sPF}, { -sRF, -sPF}, { -sRF, sPF}, {sRF, sPF}, {uRF, uPF}, {uRF, uPF}, { -uRF, uPF}, { -uRF, uPF}, {lRF, lPF}, {lRF, lPF}, { -lRF, lPF}, { -lRF, lPF} };
#else // >> leg int8_t adaptiveParameterArray[16][NUM_ADAPT_PARAM] = { { -panF, 0}, { -panF / 2, -tiltF}, { -2 * panF, 0}, {0, 0}, {sRF, -sPF}, { -sRF, -sPF}, { -sRF, sPF}, {sRF, sPF}, {uRF, uPF}, {uRF, uPF}, {uRF, uPF}, {uRF, uPF}, {lRF, lPF}, {lRF, lPF}, {lRF, lPF}, {lRF, lPF} }; #endif
There's a lot of play around the numbers. I recommend you start by tuning only one to see the effects. And you will have to reupload the WrtieInstincts.ino to overwrite these parameters in EEPROM.
Hi, I am trying to understand balancing, I see that Kitty is making small but not enough adjustments when using "wk" under different angles. It somehow concentrates more on the wk instructions than on the angle correction. Can anyone explain how adaptiveParameterArray is working with all upper leg and lower leg Roll factor?
Any hint/help appreciated
Ahhh, thank you!
But....... even the 8 DOF version is significant slower as my first catmini version. There must be more aspects.
I see, thank you!
Hi Li, as you can see in the video Bela 12 moves quite slowly using the normal kwk skill. wkR and wkL is even worse.
Do you think its because of the weight? She has 700 gr, Lipo 2200 mAh 7,4 V 25 C 2S included.
I step down the voltage to 6.7 V.
float adjust(byte i) {
float rollAdj, pitchAdj, retval;
if (i == 1 || i > 3) {//check idx = 1
bool leftQ = (i - 1 ) % 4 > 1 ? true : false;
//bool frontQ = i % 4 < 2 ? true : false;
//bool upperQ = i / 4 < 3 ? true : false;
float leftRightFactor = 1;
if ((leftQ && RollPitchDeviation[0]*slope > 0 )
|| ( !leftQ && RollPitchDeviation[0]*slope < 0))
leftRightFactor = LEFT_RIGHT_FACTOR;
rollAdj = fabs(RollPitchDeviation[0]) * adaptiveCoefficient(i, 0) * leftRightFactor;
}else{
if (i>3){
rollAdj = postureOrWalkingFactor * RollPitchDeviation[0] * adaptiveCoefficient(i, 0) ;
}else{
rollAdj = RollPitchDeviation[0] * adaptiveCoefficient(i, 0) ;
}
}
if (i == 4 || i == 5 ){
retval = rollAdj + adaptiveCoefficient(i, 1) * ((i % 4 < 2) ? RollPitchDeviation[1] : abs(RollPitchDeviation[1]));
}else if(i == 6 || i == 7){
retval = -rollAdj - RollPitchDeviation[1] * adaptiveCoefficient(i, 1);
}else{
retval = -rollAdj - RollPitchDeviation[1] * adaptiveCoefficient(i, 1);
}
return ( retval );
}