1.概述
使用PIBOT提供的小车已经完成了程序和硬件的调试,如果需要移植到自己的小车,可能会遇到PID调速不正常,解算得到运动结果不一致,反解得到里程有问题等,原因就是电机上的电机接线次序、编码器AB相次序,以及控制板输出口跟电机次序、,这里需要注意下面几点即可
a. 给定电机接口函数的输入参数正负与电机方向的关系
b.电机索引关系
c.电机转向得到编码器值正负关系
2.PIBOT运动解算和PID
void Robot::do_kinmatics(){
if (!do_kinmatics_flag){
for(int i=0;i
pid[i]->clear();
encoder[i]->get_increment_count_for_dopid();
}
return;
}
static unsigned long last_millis=0;
if (Board::get()->get_tick_count()-last_millis>=Data_holder::get()->parameter.do_pid_interval){
last_millis = Board::get()->get_tick_count();
for(int i=0;i
feedback[i] = encoder[i]->get_increment_count_for_dopid();
}
#if PID_DEBUG_OUTPUT
#if MOTOR_COUNT==2
printf("input=%ld %ld feedback=%ld %ld\r\n", long(input[0]*1000), long(input[1]*1000),
long(feedback[0]), long(feedback[1]));
#endif
#if MOTOR_COUNT==3
printf("input=%ld %ld %ld feedback=%ld %ld %ld\r\n", long(input[0]*1000), long(input[1]*1000), long(input[2]*1000),
long(feedback[0]), long(feedback[1]), long(feedback[2]));
#endif
#if MOTOR_COUN