智能小车差速系统控制

前言

现在C车已经由原来的一个电机控制车辆速度转为现在的两个电机分别控制两个轮子的转动,那么B车所拥有的机械差速在C车上将不再存在,所以我查了一些资料,总结出一些有关于差速控制的说明。

原理分析

PID

PID是比例积分微分控制算法,再反馈调节的作用西保持系统的稳定,在差速系统中主要运用他来进行两路电机的速度匹配,能够实现直线行驶的稳定。本文章只对PID控制算法做简单说明。

弯道状态分析

本次采用的模型为ackermann 模型,该模型较为理想化,但用在C车上效果还是比较显著的,可以参考后根据需要使用。
请添加图片描述

如图,现假设B为小车后两轮的轮距,L为小车前轮到后轮的距离。假设此处最优为最优路径,此时小车左方与车辆正前方的夹角为α(α有正有负),使转弯半径在左侧与后两轮平行且对其得到半径为R,此时小车后两轮的角速度相等,即小车后轮的
ω_left=ω_right
设小车两后轮中间位置的速度为V,则
V_left/Rin=V_right/Rout=V/R
R=L/tanα Rin=R-B/2 Rout=R+B/2
由此可得小车左右后轮的速度分别为:
参考文章的计算结果:
左轮:V_left=V*(1+Btanα/2L)
右轮:V_right=V
(1-Btanα/2L)
自己的计算结果:
左轮:V_left=V
(1-Btanα/2L)
右轮:V_right=V*(1+Btanα/2L)

代码实现

unsigned int speed_want;//小车行驶的期望速度
float t;//tanα结果
V_left = speed_want * (1 - (B*t) / (2*L));//左轮速度
V_left = speed_want * (1 + (B*t) / (2*L));右轮速度

其他

本文中V为小车行驶的期望速度(也可理解为小车在赛道上行驶的直线速度),文章中计算结果有两个,一个为参考文章所提供的,另一个是我根据公式计算的结果,使用者可以根据不同来选择使用。

两轮差速机器⼈运动学模型 两轮差速底盘 1.1、底盘说明 两轮差速底盘由两个动⼒轮位于底盘左右两侧,两轮独⽴控制速度,通过给定不同速度实现底盘转向控制。⼀般会配有⼀到两个辅助⽀撑的 万向轮。 主要底盘有: 1、Turtlebot; 2、扫地机器⼈; 3、⽆⼈仓AGV⼩车; 4、轮椅; 底盘主要特点: 1、控制简单、⾥程计计算简单。 2、只能给定X⽅向速度、Z轴⽅向⾓速度。 1.2 底盘运动学分析 1.2.1、底盘模型 图1.2.1 常见的两轮差速底盘模型 1.2.2、机器⼈本⾝约束⽅程(物理特性) 图1.2.2 a 左侧是车的两个轮⼦,右侧带箭头的圆圈是运动的⽅向和运动的圆⼼ 图 1.2.2 b 两轮底盘运动解析图 如图1.2.2所⽰:车体速度为V, 左轮速度为VL ,右轮速度为VR , 车体⾃传速度为,转弯半径为R,两轮之间距离为D,两轮到车中⼼的距离为 d,右轮到圆⼼距离为L。 约束⽅程(⾼中知识): 、⾓速度、速度和运动半径之间的物理关系。 、左轮速度分解 、右轮速度分解 、和速度V等于左右轮速度之和的⼀半。 、由 、 得 得 整车⾓速度和两轮速度之间的关系 1.3、运动控制、控制指令分解 控制指令分解指如何通过控制左右两个轮的独⽴速度使整个机器⼈的整体运动既满⾜前向速度等于V,转动的⾓速度等于 图1.2.3 运动控制的输⼊、输出参数说明 如图1.2.3所⽰,运动控制器输⼊参数为整车速度Vx和⾓速度(因为轮⼦不能横着⾛所以Vy⼀直为零),输出参数是左右两轮速度VL 、 VR。转弯半径R则由左右轮速度决定。 由约束⽅程 、 得: 左轮速度为: (d为两轮之间距离的⼀半) 右轮速度为: 1.4、运动轨迹、⾥程计计算 图1.2.4 上电时刻机器⼈坐标系和世界坐标系重合 ⾥程计(odom)计算是指以机器⼈上电时刻为世界坐标系的起点O(0,0)(航向为世界坐标系的X轴指向)累积计算任意时刻机器⼈相对于 世界坐标系的位置及航向。 机器⼈的位置Pose.Xw、Pose.Yw的值可以看成是车体运动⽅向极⼩时间内位置增量分解到X、Y⽅向的积分量。 图1.2.5 机器⼈在世界坐标系的位置 此时分两种⽅式来推算轨迹:速度推算⽅式、编码器推算⽅式 I、速度推算轨迹:(速度积分累积误差较⼤,最终精度在10%左右) 在机器⼈坐标系下,单位时间 t(⼀个控制周期: t = ti+1 - ti,通常为10ms、20ms)以速度V移动的距离为 d = t*V。将此距离分 别分解到世界坐标系的X、Y轴: xw = d * cos(θ)= t * V * cos(θ) yw = d * sin(θ)= t * V * sin(θ) 同时单位时间⾓度变化为 θ = * t。 以此⽅式不断累积,即可实现任意时间的位置解算。 *Xw = Xw + xw = Xw + t * V * cos(θ) Yw = Yw + yw = Yw + t * V * sin(θ) θ = θ + t II、编码器推算轨迹:(直接对距离做分解累积误差相对较⼩,最终精度1%以内,如果做修正,同时航向⾓较准确的情况下精度可以达到 0.1%以内(已经实测)) 编码器每⼀个脉冲对应实际轮⼦⾏⾛的直线距离系数为: rate_encoder = 2 r/sum_encoders 其中r为车轮半径,sum_encoders为轮⼦⾛动⼀圈的编码器的脉冲总数。 单位时间 t内编码的增量为:inc_encoder = encoder_now – encoder_last,(当前编码器值减去上次编码器值) 则单位时间机器⼈移动的距离为 d = inc_encoder * rate_encoder 世界坐标系下x、y⽅向累计⾥程分别为: Xw = Xw + xw = Xw + d * cos(θ) Yw = Yw + yw = Yw + d * sin(θ) 其中航向⾓θ的获取分两种情况: A、底盘带具有稳定航向⾓的IMU,此⽅式可以使得最终解算的位置⼗分准确(电⼦罗盘受电机⼲扰交⼤不可⽤) θ直接等于IMU的航向⾓Yaw。(IMU的Yaw上电为0,刚好和车的航向⾓⼀致) B、依靠底盘两个轮⼦上精确的编码器推算航向⾓。 两轮编码器单位时间内增量分别为 inc_encoder_r、inc_encoder_l 单位时间内两轮扭动的距离差为 lenth_error = (inc_encoder_r- inc_encoder_l) * rate_encoder; 由 得:由距离差得单位时间内⾓度差为 anlge_z_error = lenth_error / 2d; 根据编码器累计的⾓度θ为 anlge_z += anlge_z_error。 此⽅式⾮常依赖编码器精度,有累计误差,效果不如直接使⽤IMU的好。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值