1)Introduction
Recently, we have developed a mini desktop robot dog-PuppyPi. And our top priority is to make this robot walk and run, which lays the foundation for designing more interesting robot games, such as stair negotiating, object recognition and face recognition. How to make PuppyPi run involves gait planning of quadruped robot. To realize gait planning, the first step is to analyze the common gait patterns of quadruped robot so as to obtain the duration of swing phase and support phase. Next plan the trajectory of each foot and the motion sequence of each leg.
2)Analysis
Take dog for example, and its gait patterns are as pictures show.
Compared with other complicated gaits, walk, amble and trot are more suitable to apply in this mini desktop robot dog. And the subsequent analysis is mainly based on these three gaits. For better explanation, number the dog’s legs first as follow.
NO.1 is the right front leg
NO.2 is the left front leg
NO.3 is the right hind leg
NO.4 is the left hind leg
The analysis of gait planing is divided into two parts.
The first part: the motion trajectory of each foot, which contains foot lifting off and touching the ground in cycle. The speed of the dog’s movement depends on the time spent on lifting off and touching the ground.
The second part: the movement of 4 legs i.e. the motion sequence of 4 legs, which is a cyclic process. The sequence and time allocation of 4 legs’ movement determines the gait patterns of the dog.
To simplify the analysis, the picture below is used to depict the time of motion trajectory and phase of 4 legs.
Numbers at left indicate dog’s legs.
t1: represented by a rising slash and a falling slash. It refers to the time the legs are hovering over the ground containing lifting off and touching the ground, which is called swing_time.
t2: the interval between the moment the legs at the diagonal opposite ends of the body are just lifted, which is considered as clearance_time. No.1 and No.4 legs are the first diagonal pair, and No.2 and No.3 legs are the second diagonal pair.
t3: the time taken for all 4 legs to touch the ground. It is called overlap_time.
T:the time taken for each leg to complete one cycle of movement. It is equal to the result of (t1 + t2 + t3) * 2.
In the above figure, we can find that the motion cycle of each leg, the time each leg is in the air and on the ground, are the same. The only difference lies in the moment when each leg is lifted, that is, the phase is different.
Walk, amble and trot mainly follows the rule that the first diagonal pair of legs step out first in a certain rhythm, and then the second pair goes in the same rhythm. Hence we just need to change the time allocation between t1, t2 and t3 to generate diverse gaits.
2.PuppyPi Gait Realization1.WalkWalk belongs to static gait in which three legs are in contact with the ground at least and one leg lifts off at most. In other words, three legs are in support phase at least and one leg is in swing phase at most. Only when t2 ≥ t1 and t3 ≥ 0, can this effect be reached, as the picture shown.
Set the gait mode as Walk.
gait = 'Walk'
According to the features of Walk, adjust the following parameters.
overlap_time: the time all 4 legs touch the ground in second
swing_time:the time each leg lifts off in second
clearance_time:the phase interval between the legs at the diagonal opposite ends of the body in second
z_clearance:the height that the toes should be raised when walking, in cm
elif gait == 'Walk':
GaitConfig = {'overlap_time':0.1, 'swing_time':0.2, 'clearance_time':0.3, 'z_clearance':5}
PuppyPose['x_shift'] = -0.65
Then publish the adjusted parameters to the corresponding service to adjust the gait.
PuppyGaitConfigPub.publish(overlap_time = GaitConfig['overlap_time'], swing_time =
GaitConfig['swing_time'], clearance_time = GaitConfig['clearance_time'], z_clearance =
GaitConfig['z_clearance'])
2. TrotTrot is a dynamic gait, that is, each diagonal pair of legs lift off and touch the ground simultaneously. When the condition that t2 = 0 and t3 ≥ 0 is satisfied, trot can be generated.
Set the gait mode as Trot.
gait = 'Trot'
Based on the characteristics of Trot, adjust the following parameters.
overlap_time: the time all 4 legs touch the ground in second
swing_time:the time each leg lifts off in second
clearance_time:the phase interval between the legs at the diagonal opposite ends of the body in second
z_clearance:the height that the toes should be raised when walking, in cm
elif gait == 'Trot':
GaitConfig = {'overlap_time':0.2, 'swing_time':0.3, 'clearance_time':0.0, 'z_clearance':5}
PuppyPose['x_shift'] = -0.6
Then publish the modified parameters to the corresponding service to adjust the gait.
PuppyGaitConfigPub.publish(overlap_time = GaitConfig['overlap_time'], swing_time =
GaitConfig['swing_time'], clearance_time = GaitConfig['clearance_time'], z_clearance =
GaitConfig['z_clearance'])
3. AmbleAmble is a gait lingering between walk and trot, also seen as the transition movement between the walk and trot, in which one leg or sometimes two is suspended from the ground.
Amble is formed under the condition of 0 < t2 < t1 and t3 ≥ 0, as follow.
It is a relaxed gait that most enthusiasts and developer of quadruped robot employ for practical application.
Set the gait mode asamble。 Set the gait as Amble.
gait = 'amble'
Adjust the parameters below in the light of the features of Amble.
Based on the characteristics of Trot, adjust the following parameters.
overlap_time: the time all 4 legs touch the ground in second
swing_time:the time each leg lifts off in second
clearance_time:the phase interval between the legs at the diagonal opposite ends of the body in second
z_clearance:the height that the toes should be raised when walking, in cm
elif gait == 'Amble':
GaitConfig = {'overlap_time':0.1, 'swing_time':0.2, 'clearance_time':0.1, 'z_clearance':5}
PuppyPose['x_shift'] = -0.9
After adjustment, publish these parameters to the corresponding service to adjust the gait.
PuppyGaitConfigPub.publish(overlap_time = GaitConfig['overlap_time'], swing_time =
GaitConfig['swing_time'], clearance_time = GaitConfig['clearance_time'], z_clearance =
GaitConfig['z_clearance'])
Comments