Walking Biped (4 Servos Per Leg)
by bonnetx in Circuits > Robots
9432 Views, 125 Favorites, 0 Comments
Walking Biped (4 Servos Per Leg)
This biped robot was 3D printed.
4 low cost servos (SG90 or SG91) per leg are used to control hip, knee and ankle pith and ankle roll.
The kinematic commands are written to be simply implemented in an arduino (mini). Few parameters are used to control the step length and the cadence.
These parameters can be modified using a cheap BT module (HC06).
Mechanics
Simply print (or modify the iges files).
Adjust the position to the servo as follow :
- Ankle roll : near the middle of the range of motion (90°).
- Ankle pitch : near the middle or to allow more dorsiflexion (used during the swing phase). I have set this to 80° on mine (so you have 80° of plantiflexion (the foot goes to the floor) and 100° in dorsiflexion.
- Knee pitch : near the full extension so 20° to avoid mechanical limits.
- Hip pitch : near the middle, but you can allow more hip flexion than extension.
Downloads
Electronics
One two cell batterie (7.2V) is used.
The power for the servo is done by two LM7805 voltage regulator (one per limb).
The brain is a arduino mini clone.
One MPU6050 is not used for the moment (for future release)
And i modify the parameters thanks to a HC06 BT module.
Walking !!!!
Frontal plane
To achieve a correct walking, first focus on the frontal plane.
It could be very simple,
T is a variable time between each loop,
KML is the amplitude of the ankle roll mouvement (between 5 and 15°), it depends on the location of the center of mass of your robot and feet with.
FD and FG are the zero position of the foot roll.
t=t+1;
if (t>100) {t=0;}
myservo7.write(FG-KML*sin(2*3.14*t/100)); // left foot
myservo8.write(FD+KML*sin(2*3.14*t/100)); // right foot
delay (T);
Yes it's just a sinus.
Adjust T and KML to allow the robot to lift the feet of the ground.
If KML is to low it will not be possible, if it is to high, he will fall.
Sagittal plane
On the picture, you can see the position of the joints according to the gait cycle.
The basic idea is to store the joints position in tables.
two parametres are used to define the amplitude of the movement.
KST is used for the hip
and KSW for the knee during swing.
The movement of the joint are simply written using linear function according to the % of the gait cycle.
void setkin(int FHD[],int FKD[],int FHG[],int FKG[],int KST,int KSW)
{
for (int i=0; i <= 5; i++) {
FHD[i]=-KST; // Hip flexion Right
FKD[i]=0; // Knee flexion Right }
for (int i=6; i <= 45; i++) {
FHD[i]=KST*i/20.0-5*KST/4.0;
FKD[i]=0; } //
for (int i=46; i <= 55; i++) {
FHD[i]=KST;
FKD[i]=0; } //
for (int i=56; i <= 80; i++) {
FHD[i]=-KST*i/10.0+65*KST/10.0;
FKD[i]=KSW*sin((i-55)/40.0*3.14); } //
for (int i=81; i <= 95; i++) {
FHD[i]=-3*KST/2.0;
FKD[i]=KSW*sin((i-55)/40.0*3.14); } // //
for (int i=95; i <= 100; i++) {
FHD[i]=KST*i/10.0-11*KST;
FKD[i]=0; } //
// The second limb is obtained with a time simetry
for (int i=0; i <= 49; i++) {
FHG[i]=FHD[50+i]; // Left hip flexion
FKG[i]=FKD[50+i]; // Left knee flexion }
for (int i=50; i <= 100; i++) {
FHG[i]=FHD[i-50];
FKG[i]=FKD[i-50]; } }
Ankles :
if you just read the picture, ANKLE=-HIP-KNEE
this allow to keep the foot parralel to the ground in the sagital plane.