最近入手玩VEX IQ的机器人套件,打算做一款自平衡小车,目前搭建了一个平衡车底盘,如图
编程主体今天写了个简单版的,只用到了角度环,PID的参数粗粗调试了下,效果还成,但是小车时间稍微长一些以后会朝一个方向偏过去,最后倒地。在网上看到说是需要加入速度环控制,小机器人就能够定点了,于是引入了编码器的PID进入,但是输出叠加之后小车稳定度大大降低,估计是速度环PID的参数没有调试正确。主要的代码如下 - now = time1[T1];
- float TimeCh = (now - lastTime) / 1000.0;
- float Kp = 4.5, Ki = 19.5, Kd = 0.02;
- float Kps = 0.0, Kis = 0.0, Kds = 0.0;
- float SampleTime = 0.01;
- float Setpoint = 0.0;
- if(TimeCh >= SampleTime)
- {
- float Input = f_angle;
- float Inputs = encoder;
- float error = Setpoint - Input;
- float errors = 0-Inputs;
- ITerm+= (Ki * error * TimeCh);
- ITerms+=(Kis*errors*TimeCh);
- float DTerm = Kd * (Input - lastInput) / TimeCh;
- float DTerms = Kds*(Inputs-lastInputs) / TimeCh;
- Outputs = Kps*errors+ITerms-DTerms;
- Output = Kp * error + ITerm - DTerm-Outputs;
- }
复制代码
Kps这些速度环控制的目前重新改成了0。打算重新调试。还有一个问题就是这个电机的最大速度只有127,因此output的值不能超过127,我看很多资料都是将积分项设置一个区域,不知道整体设置限制和积分项设置有何区别。 |