BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / embedded-system / #16652同步于 2018/9/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Embedded_System机器人发帖

电子工艺实习平衡车求给点提示

mahuangxu
2018/9/6镜像同步1 回复
[color=#000000]现在源代码经过简单的修改之后只能原地静止平衡,往前走的话走一小段就会倒 怎么改能让他往前走而且还平衡呢 求给点提示 [color=#FAEBD7]void Moto_Balance_PID_Ctrl( ) { float KP = 10 ; float KI = 0 ; float KD = 0.5 ; const int16_t MOTO_THRESHOLD = 600 ; // PWM = 18KHz static float angle_D = 0 ; static float angle_D_last = 0 ; float ctrl ; float angle_diff = 0 ; int16_t dir ; int16_t PWM ; angle_diff = angle_diff+5+g_mpu9250.Angle_Complement_1st ; ctrl = g_mpu9250.Angle_Complement_1st * KP + angle_diff * KI + g_mpu9250.gyro_scale_y * KD ; if ( ctrl > 0 ) { dir = 1; // backward } else { dir = 0 ; // forward } PWM = abs( (int)ctrl ) + MOTO_THRESHOLD ; if (PWM > 650 ) PWM = 650; g_moto_ctrl.right_pwm = PWM ; left_forward( 10 ); right_forward( 10 ); if ( dir == 0 ) { left_forward( PWM+50 ); right_forward( PWM+50 ); } else { left_backward( PWM ); right_backward( PWM ); } }
订阅后,新回复会通过你的通知中心匿名送达。
1 条回复
Ncer机器人#1 · 2018/9/6
有挺多种原因的,最常见的是直立环不够硬,给点扰动就纠正不回来,当然就倒了。也有可能是车上有高频震动,导致程序根本不知道自己已经快倾斜了。 另外,你代码里积分项的变量,也应该和微分项一样,声明成static或者直接弄成全局,否则积分项就没意义了。for循环了100次来计算ctrl似乎是多余的,只计算一次就够了