麦克纳姆轮PID控制原理

目录

前言

一、什么是麦克纳姆轮

二、运动原理

三、pid控制 

一、什么是pid?

 二、什么是串级PID?

三、麦克娜姆轮的控制思想

总结




前言

目前很多大学生比赛里面经常都会出现麦克娜姆轮,并且麦克娜姆轮在工业上也应用挺广泛,例如物流搬小车。下面是我玩麦克娜姆轮的一些经验总结,分享给大家。


一、什么是麦克纳姆轮

麦克纳姆轮是一种可以全向移动的全向轮,又叫麦轮,由轮毂和围绕轮毂的辊子组成,麦轮辊子轴线和轮毂轴线夹角成45度。在轮毂的轮缘上斜向分布着许多小轮子,即辊子,故轮子可以横向滑移。辊子是一种没有动力的小滚子,小滚子的母线很特殊,当轮子绕着固定的轮心轴转动时,各个小滚子的包络线为圆柱面,所以该轮子能够连续的向前滚动。由四个这种轮加以组合,可以使机构实现全方位移动的功能。麦克纳姆轮根据镜像关系分为A轮和B轮。


二、运动原理

1、四个轮子的正确组合如下图 。(顺便给四个轮子编个号)


 麦克娜姆轮的运动可以看做三个基本运动的叠加。下面我们做个假设。单个轮子的合速度为V,左右平移速度记作Va,前进后退记作Vb,旋转记作Vc。(取向上为正方向)

下面红色箭头代表车轮的正反转(取向上为正方向)

2、向前运动

1、2、3、4轮都正转。小车前进,反之则正转

V1=V1a; V2=V2a; V3=V3a; V4=V4a;

3、向右运动

1、3轮正转,2、4轮反转小车向右运动,反之则向左运动。

V1=V1b; V2=-V2b; V3=V3b; V4=-V4b;

 

4、顺时针旋转

1、2轮正转,3、4轮反转小车顺时针原地旋转,反之则逆时针原地旋转。

V1=V1c; V2=V2c; V3=-V3c; V4=-V4c;

 

根据上面的叠加可得下面公式:

V1=V1a+V1b+V1c; V2=V2a-V2b+V2c; V3=V3a+V3b-V3c; V4=V4a-V4b-V4c;

三、pid控制 

一、什么是pid?

PID,就是“比例、积分、微分”,是一种常见的控制算法。在工程实际中,应用最为广泛的调节器控制规律为比例、积分、微分控制,简称PID控制。它以其结构简单、稳定性好、工作可靠、调整方便而成为工业控制的主要技术之一。

 下面我们只介绍增量式PID(还有位置式pid)

公式如下:

 参数介绍:

Kp:比例系数,反应调节速度。Kp越大,系统响应速度越快,Kp越小,响应速度越慢。Kp过大会产生震荡,使系统不稳定。

Ki:积分控制,消除系统余差。只有偏差不存在时,积分才会停止。

Kd:微分控制,减小系统震荡。

en:输入量。

en-i:上一次的输入量。

en-2:上上次的输入量。

调试方法:先调P,再调I,最后调D。最好结合波形图来调,下面推荐一个波形显示上位:https://blog.csdn.net/qq_53022278/article/details/120584545

 二、什么是串级PID?

顾名思义就是两个PID串起来。一个pid的输出作为另一个PID的输入。 

串级pid调试方法:先调内环,再调外环。先调P再调I,最后再调D.

三、麦克娜姆轮的控制思想

一、我们采用串级pid,位置作为外环,速度作为内环。通过外环PID算出四个轮子需要达到的速度,然后将速度作为内环的输入,使小车达到所需的速度。

下面是电磁循迹麦克娜姆轮部分控制代码

外环:

int direction_PD(int left_inductance,int right_inductance)
{
    int new_direction,PWM_out;


    //归一化
    left_inductance=100*(left_inductance-left_min)/(left_max-left_min);
    right_inductance=100*(right_inductance-right_min)/(right_max-right_min);

    //位置函数,差比和算法
    new_direction=100*(left_inductance-right_inductance)/(left_inductance+right_inductance);
    //PD算法
    PWM_out=kp_direction*new_direction+kd_direction*(new_direction-old_direction);
    old_direction=new_direction;
    return PWM_out;
}

 内环:

int speed1_PI(int encoder,int Target_Speed)
{
    static int iError,lastError,PrevError,PWM;
    iError=Target_Speed-encoder;
    PWM+=kp_speed*(iError-lastError)+ki_speed*iError+kd_speed*(iError-2*lastError+PrevError);
    PrevError=lastError;
    lastError=iError;
    return PWM;
}

 

 


总结

以上就我自己的学习总结,个人对pid调试的建议,PID调试需要多实践,多琢磨,调试多了自然就会了。

物联沃分享整理
物联沃-IOTWORD物联网 » 麦克纳姆轮PID控制原理

发表评论