STM32 双轮差速里程计计算

本文介绍了如何使用STM32进行双轮差速里程计的计算,通过设置ODOMETER_EST_PULSE_PER_METER参数(如1320或1560)来适应不同电机,结合轮子到中心的距离(R_param)以及左轮(leftcnt)和右轮(rightcnt)的脉冲计数值,实现精确的里程计算。参考了相关博客资源。
摘要由CSDN通过智能技术生成

STM32 双轮差速里程计计算

ODOMETER_EST_PULSE_PER_METER 表示每米距离需要的脉冲数目,参考电机里程计属性设置

#define ODOMETER_EST_PULSE_PER_METER  1320 //通常11线 

#define ODOMETER_EST_PULSE_PER_METER  1560 //通常13线 

R_param 表示两个轮子分别到双轮中心的距离

leftcnt/ rightcnt 表示左轮在固定时间脉冲计数值,前进为正数,后退为负数。

/*
 * 固定一段时间(10ms or 20ms)调用
*/
void odom_cal_trigger(s32 leftcnt, s32 rightcnt)
{
    float dl = 0.0, dr = 0.0;
    float sinval = 0.0, cosval = 0.0;
    dl = leftcnt *  (1000.f / ODOMETER_EST_PULSE_PER_METER); // mm
    dr = rightcnt * (1000.f / ODOMETER_EST_PULSE_PER_METER); // mm
    float d_yaw = (dr - dl) / 2.0f / R_param; //rad
    float displacement = (dl + dr) / 2.0f;
    
    float dx = cos(d_yaw)*displacement; //mm
    float dy = sin(d_yaw)*displacement; //mm
        
    sinval = sin(odom.yaw), cosval = cos(odom.yaw);
    odom.x += (cosval * dx - sinval * dy)/1000.f; //m
   
  • 0
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值