ros中的电机速度控制_ROS机器人底盘(21)-关于运动控制方向的补充

本文介绍了ROS中针对电机速度控制的问题,包括电机接口参数、电机与编码器的次序关系以及PID调速。详细讲解了如何通过调整电机接口函数输入参数、电机索引和编码器值正负关系来解决运动控制问题。同时,文章还提供了验证电机方向和编码器正确性的测试方法,并提到了固件程序中的宏定义用于电机和编码器方向的反转调整。
摘要由CSDN通过智能技术生成

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值