读取编码器的计数脉冲转化成ROS的odom数据

本文介绍了如何将移动机器人编码器的计数脉冲转化为ROS的odom数据。详细阐述了从编码器原理到中心点换算,再到base_link到odom坐标系转化的理论模型,并给出了python源代码的主要部分。
摘要由CSDN通过智能技术生成

1,理论模型

1.1 原理

如下图所示,蓝色圆形区域为小车的地盘,左右轮之间的间距为wheel_dist注意算法中的所有的单位,全部是国际标准单位。移动机器人编码器,安装在左右轮上,机器人地底盘的坐标系为base_link坐标系,里程计坐标系为odom。

当移动机器人移动时,假设运动到如下图所示位置。图中的,V为移动小车中心点的运动速度方向,dxy_avg为移动小车中心点的运动距离。

根据编码器的差值,可知前一时刻与当前时刻编码器增量的计数脉冲,已知小车车轮行走一个周长的长度的编码器计数脉冲个数,可以推算出,一个计数脉冲的移动距离。代码实现如下:

# (4096 * 7.5) dright is right boot position
dright = (right_enc - enc_right) * pi * D / (4096 * 7.5)
# dleft is left boot positon
dleft = (left_enc - enc_left) * pi * D / (4096 * 7.5)

其中,dright 为右轮的移动距离,dleft 为左轮的移动距离right_enc - enc_right为右轮编码器脉冲个数的增量,left_enc - enc_left为左轮编码器脉冲个数的增量,参数pi * D / (4096 * 7.5)需要依据自己的小车测量出,编码器一个计数脉冲对应的行走距离(单位m)

1.2 向中心点换算

因为在使用里程计向上层的开发中,往往对于小车模型,通常会考率成中心点的运动模型,即大致认为时一个质点,这是不准确的。算法如下:

 dxy_ave = (dright + dleft) / 2.0
 dth = (dright - dleft) / wheel_track
 vxy = dxy_ave / dt
 vth = dth / dt

其中, dxy_ave为左右轮的移动距离均值,认为是中心点的移动距离;dth 为通过为中心点的转动角度,通过弧长公式 θ = l / R \theta = l/R θ=l/R,中心点速度V=vxy 为位移对时间的微分 v = d x / d t v= dx/dt v=dx/dtvth 为角速度,为转动角度对时间的倒数 v t h = θ / d t vth= \theta/dt

  • 18
    点赞
  • 123
    收藏
    觉得还不错? 一键收藏
  • 11
    评论
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值