最近在看移动机器人的里程计,因此记录下相关知识以及公式的推导过程~
我们都知道移动机器人在行驶过程当中,需要里程计来获取自身的位姿,而通常里程计的数据获取由编码器的脉冲值换算得到。
换算公式:
r:小车轮子半径
x:编码器的采集值
注:STM32编码器功能只有高级定时器TIM1、TIM8以及通用定时器TIM2~TIM5,而且只能用CH1和CH2通道,如果你用了别的通道是不能获取到编码值的!!血和泪的教训!
N:编码器的总脉冲,一圈的脉冲数×减速比
注:我的是一圈脉冲数为11个脉冲,减速比为1:30,而STM32在采集的时候采用上下沿都计数,故为4倍频,因此,电机旋转一圈时,定时器可以计数11×30×4=1320个脉冲。
而移动机器人在移动主要由x轴的速度,y轴的速度,以及自身轴的旋转角决定。根据移动机器人前进的方向为x轴,由右手定理,则可以确定y轴的指向。
我们可以根据正交分解的方法,将各轴的速度量分解至笛卡尔坐标系上。通过乘以运行时间,则可以得到相应的位移~
公式推算:
矩阵形式:
{
double delta_x = (vx * cos(th) - vy * sin(th)) * dt;
double delta_y = (vx * sin(th) + vy * cos(th)) * dt;
x += delta_x;
y += delta_y;
th += delta_th;
}