双足机器人走路模型

来源:互联网 发布:淘宝客推广哪个平台好 编辑:程序博客网 时间:2024/04/28 07:31

双足机器人行走学问很大,本人只是说一下自己的理解,以及根据理解所写的一个走路程序。


先看一下慢速效果: http://pan.baidu.com/s/1geO589H

再看下快速效果: http://pan.baidu.com/s/1miNpIDq

相关ZMP理论论文一大堆, 我就不再说理论的,可以在这里下载: http://download.csdn.net/detail/shaynerain/9804112

简单总结就是腿部舵机一直保持Y轴角度分量偏移总和等于零


/*//times 步数alpha步伐角度theta修正角度//times 一次一步//alpha //theta暂时不加*/void DuWalk(int times,int alpha, int *theta , unsigned short *speed){unsigned short Speed[17];    char flag;        s16 angle[17] = {0,0, 0,0, 0,0,  0,8, 0,0,0,0,-280,280,0,0,0};    int temp_angle = alpha;//alpha 大约15° 舵机角度51//用5微分float delta = 1.0,  left_up = 0, right_up = 0 , left_mid = 0,right_mid = 0;       float LR = 0;    char i = 0;    int white_time = 1;    for(i = 0; i<17;i++)        Speed[i] =  *speed;             RobotAction(MotorZeroAngle,angle,Speed);//前后 2 4 63 5 7 while (times--){        //机器人角度 ,左脚前,右脚后        left_up = temp_angle;        left_mid = temp_angle;        angle[11] = -2*alpha/delta;        while ((LR++) <7)   //7        {            angle[0] = angle[1] =-(s8)LR;            angle[8] = angle[9] =(s8)LR;            RobotAction(MotorZeroAngle,angle,Speed);            delay_ms(8);        }delay_ms(10);while (temp_angle < alpha){temp_angle += delta;                        angle[6] = temp_angle;            angle[2] = temp_angle;            angle[10]+=2;            angle[11]+=2;                                    if ((temp_angle <= -alpha/2)){                left_up += delta * 4;                angle[5] += 5 * delta;                left_mid -= 1* delta;}else if(temp_angle <= 0){left_up += delta * 4;                angle[5] += 5 * delta;                left_mid -= 1* delta;}            else if(temp_angle <= alpha/2)            {                angle[5] -= 3* delta;                left_mid += 3* delta;            }            else if(temp_angle <= alpha)            {                left_up -= 4*delta;                angle[5] -= 7* delta;                left_mid += 3* delta;            }                        angle[3] = (s16)left_mid;            angle[7] = (s16)left_up;            RobotAction(MotorZeroAngle,angle,Speed);            delay_ms(white_time);}         right_up = temp_angle;        right_mid = temp_angle;        angle[10] = 2*alpha/delta;        while ((LR--) > -7)        {            angle[0] = angle[1] =-(s8)LR;            angle[8] = angle[9] =(s8)LR;            RobotAction(MotorZeroAngle,angle,Speed);            delay_ms(8);        }delay_ms(10);        //angle[10] = alpha;while (temp_angle > -alpha){temp_angle -= delta;            angle[7] = temp_angle;            angle[3] = temp_angle;            angle[10]-=2;            angle[11]-=2;                        if ((temp_angle >= alpha/2)){                right_up -= 4*delta;                angle[4] -= 5*delta;                right_mid += 1*delta;                }else if(temp_angle >= 0){right_up -= delta * 4;                angle[4] -= 5*delta;                right_mid += 1*delta;}            else if(temp_angle >= -alpha/2)            {                angle[4] += 3*delta;                right_mid -= 3*delta;            }            else if(temp_angle >= -alpha)            {                                right_up += 4*delta;                                angle[4] += 7*delta;                right_mid -= 3*delta;            }                        angle[2] = (s16)right_mid;            angle[6] = (s16)right_up;                        RobotAction(MotorZeroAngle,angle,Speed);            delay_ms(white_time);}         }}


0 0
原创粉丝点击