智能车串级pid的使用

http://t.csdn.cn/uFyXT书接上回,我们的小车已经完成了全部元素,这个时候当你想要提速的时候,你会发现一个单独的pid提速后车子会甩尾,一个单独的pid已经无法满足车速的正常运行,这个时候想要提速就可以用到串级pid了(串级pid一般适用于三轮差速车,四轮舵机车一般适用于模糊pid),今天我们先以之前说的三轮车为例说一下串级pid在智能车方向环的使用,通俗的理解串级pid就是外环(角度环)的输出作为内环(角速度环)的输入,原理很简单,主要是很多人不会使用,不会调参,今天我就用我的经验和大家说一下串级pid在智能车中的使用(个人经验之谈,如有不对的地方请指正谅解),首先串级pid的内外环的要成比例运行,我一般采用外环比内环=3:1的比例即外环每3ms运行一次,内环每1ms运行一次,如下图所示:

time++;	
if(time==3)
{
	Out_dw=dircontrol(TempAngle); //外环
	time=0;
}			
	Out_dn=diranglecontrol(Out_dw);//内环

外环的输入为中线差值,内环的输入为外环的输出。

int dircontrol(int chazhi)//外环
{
	int out_dw;
	static int last_chazhi;
	out_dw=(int)(chazhi*dir_p+(chazhi-last_chazhi)*dir_d);
	last_chazhi=chazhi;
    return out_dw;
}
int diranglecontrol(int out_dw)//内环
{
	int out_dn,error;
	static int last_error;
	error=(out_dw-gyroz1);//内环的偏差是外环输出与陀螺仪z轴的角速度之差
	out_dn=(int)(error*dirn_p+(error-last_error)*dirn_d);
	last_error=error;
	return out_dn;
}

 通过以上串级pid代码可见内环pid最主要加了一个陀螺仪的值,以逐飞icm20602为例,陀螺仪可测xyz三个轴的角速度和角加速度,我们三轮车串级pid仅需要其中一个轴的角速度值(如果是两轮平衡车则需要用到陀螺仪更多轴的值),首先把陀螺仪安装到车子中心线上(如图所示)然后把陀螺仪xyz轴的角速度都显示出来,左右摇晃小车,变化最剧烈的那个值就是我们串级pid方向环需要用到的值(在此我们以z轴的值为例说明),那么串级pid的参数应该怎么调呢,首先从内环调起,调内环时我们不需要外环给内环输入,我们直接给内环一个固定的输入(即固定的角速度),然后把速度环去掉,把方向内环直接给到电机输出上去,这样小车就会以一个固定的角速度原地旋转,这个时候你可以对小车进行拍打干扰它,看它抵抗干扰的响应速度,如果车子一直振荡,说明内环参数不对,如果车子受到干扰后能迅速回归正常,不振荡,那参数就差不多了,内环调好以后就可以把外环加上去然后直接放到赛道上跑了看现象调外环(这个时候电机输出为速度环加减方向内环),外环参数就和原来的单环pid一样的调法(增大p增大打脚,增大d增大响应速度,减小振荡),串级pid的使用大概就是这些了,加上串级pid以后你就可以尽情的提速了!

此外,我们现在已经学会了陀螺仪的使用,这个时候,我们就可以在处理元素时用上陀螺仪积分了,和编码器一样的原理,速度积分得到距离,角速度积分得到角度,这样我们在处理元素时就可以把上一篇文章里面的time换成角度(如有忘记可从文章开头链接回到上一篇文章),让它从固定打脚一段时间到固定打脚一个角度,这样会更加稳定,且陀螺仪积分360度就是一个圆环这会是你后续提速处理圆环的重要参数

bmq_juli+=(ECPULSE1-ECPULSE2);//编码器积分
tly_jifen+=gyroz1;//陀螺仪积分

陀螺仪积分和编码器积分是处理元素的重要工具,大家一定要学好用好,这样不管它赛题如何变化,出现什么样的元素,大家都可以轻松处理, 每个人能的想法都不一样,我只是给大家提供了一个思路,让大家更快的上手智能车,相信各位车友都会创造出自己的处理元素算法,我的智能车入门三部曲也就到此结束了,大家还有啥想要了解的可以底下评论,从17届的多车省三到18届的双车国一,智能车是唯一一个做了就停不下来的比赛,这将是我人生珍贵的一段回忆,感谢相遇,感谢陪伴,我们下次再见!(大家可以去b站看我智能车的视频,与csdn同名哦!)

<think>好的,我现在需要帮用户查找关于智能车辆角速度控制中PID调节的相关信息或实现方法。首先,我得回顾用户提供的引用内容,看看哪些部分提到了PID控制、角速度以及具体的实现步骤。 用户给的引用有5个,其中引用1是关于Arduino BLDC电机角速度PID控制的,提到了使用GY-521模块(MPU-6050)测量角速度和闭PID控制,还有硬件资源利用和算法优化。引用2讲的是机器人通过传感器读取实际速度和角速度,进行PID运算,控制电机转速,形成闭系统。引用3和4是关于智能车PID控制,提到视觉处理和PID的关系,以及速度使用编码器和PWM的问题。引用5则具体问了速度中的编码器和PWM如何协调的问题。 接下来,我需要整合这些信息,按照用户要求的格式,用中文分步骤说明智能车角速度PID控制的实现方法。同时,要符合系统指令,比如行内公式用$...$,独立公式用$$...$$,正确使用LaTeX,生成相关问题,并在引用处添加标识。 首先,应该从系统组成开始,说明需要的传感器(比如陀螺仪、编码器)、控制器(Arduino等)、执行机构(电机驱动)。然后讲传感器数据采集,比如角速度的测量方法,可能用陀螺仪或者MPU-6050。接着是PID算法实现,包括位置式或增量式,公式怎么写,参数调节方法,比如先比例,再积分微分,或者用试凑法、Ziegler-Nichols方法。然后闭控制流程,如何将PID输出转化为电机控制信号,比如PWM占空比。还要提到可能的PID结构,比如外角度、内角速度的组合,如引用3提到的。 需要注意用户提供的引用中的关键点,比如引用1的闭PID和硬件资源利用,引用2的流程步骤,引用3的PID结构,引用5的编码器和PWM问题。可能需要在实现方法中提到如何处理不同数值比例的问题,比如归一化或映射转换。 然后,生成相关问题,可能需要包括参数调节技巧、常见问题处理、传感器选择、PID应用、与其他控制的结合等。 在写作过程中,要确保所有数学公式正确使用LaTeX,比如PID公式中的Kp、Ki、Kd,可能写成$u(t) = K_p e(t) + K_i \int e(t)dt + K_d \frac{de(t)}{dt}$,独立公式用$$。同时引用标识要放在对应的位置,比如提到MPU-6050时引用[^1],闭控制流程引用[^2],PID引用[^3],编码器和PWM的问题引用[^5]。 需要检查是否有遗漏的关键点,比如是否提到了反馈循、参数调节方法、硬件资源利用等。还要确保结构清晰,步骤分明,用户能一步步理解实现方法。最后生成的相关问题要围绕主题,帮助用户进一步深入。</think>根据参考资料,智能车角速度PID控制的实现方法可分为以下步骤: ### 一、系统组成 1. **传感器模块** 使用陀螺仪(如MPU-6050)实时测量车辆角速度,精度需满足控制需求 2. **控制器单元** 采用Arduino/STM32等嵌入式平台,运行PID算法 3. **执行机构** 通过电机驱动器将控制信号转换为车轮转速差 ### 二、控制流程 1. **数据采集** $$ \omega_{\text{actual}} = \text{GYRO\_Read}() $$ 读取陀螺仪Z轴角速度值(单位:rad/s) 2. **误差计算** $$ e(t) = \omega_{\text{target}} - \omega_{\text{actual}} $$ 目标角速度可通过路径规划生成或手动设定 3. **PID运算** 使用位置式PID公式: $$ u(t) = K_p \cdot e(t) + K_i \cdot \int_{0}^{t} e(\tau)d\tau + K_d \cdot \frac{de(t)}{dt} $$ 或增量式PID: $$ \Delta u(k) = K_p[e(k)-e(k-1)] + K_i e(k) + K_d[e(k)-2e(k-1)+e(k-2)] $$ [^4] 4. **控制输出** 将PID输出转换为电机差速指令: $$ \text{PWM\_Left} = \text{BasePWM} + u(t) $$ $$ \text{PWM\_Right} = \text{BasePWM} - u(t) $$ 需处理PWM占空比与编码器计数的比例关系 ### 三、参数整定方法 1. **试凑法步骤**: - 先调$K_p$至系统出现轻微震荡 - 加入$K_d$抑制超调 - 最后加入$K_i$消除稳态误差[^4] 2. **Ziegler-Nichols法**: 通过临界比例度法确定参数基准值 ### 四、进阶优化 1. **PID结构** 外控制转向角度,内控制角速度,提升动态响应 ```python # 伪代码示例 angle_error = target_angle - current_angle angle_pid_output = angle_pid(angle_error) speed_pid_output = speed_pid(angle_pid_output - actual_speed) ``` 2. **抗积分饱和** 增加积分分离或变积分策略 ### 五、调试工具 建议使用Matlab/Simulink进行控制算法仿真,实际调试时通过口实时监控参数变化曲线[^1]
评论 56
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值