forked from logzhan/RobotHardware-UESTC
4f26f0ddae | ||
---|---|---|
.. | ||
PiRobot-YH_Firmware v1.0 | ||
README.md |
README.md
1.银星机器人参数
1.1 基本尺寸参数
银星机器人有两个大齿轮,分别在电机和轮子上,经过尺寸的测量发现两个齿轮大小一样,应该是1:1
的关系。
类别 | 参数 | 数值 |
---|---|---|
轮子直径 | mm |
240 |
轮距 | mm |
420 |
编码器分辨率 | - | 未知 |
电机减速比 | - | 1:90 |
减速箱默认转速 | RPM |
54 |
电机默认转速 | r/min |
4200 |
电机默认方向 | CCW |
逆时针方向旋转 |
额定电压 | 伏特 | 24 |
额定电流 | 安培 | 1.6 |
额定功率 | 瓦特 | 22 |
1.2 接线方式
在Pibot
开发板定义中,对于二轮差分模型。Motor1
和Motor2
分别对应的是左轮和右轮,关系如下表所示:
项目 | 类别 | Pibot 端口 \ Gebot 端口 |
说明 |
---|---|---|---|
MOTOR1 |
左轮 | U5 \ PL(Port Left) |
连接端口 |
MOTOR2 |
右轮 | U4 \ PR(Port Right) |
连接端口 |
LEN |
左轮PWM (橙色线) |
PA3 |
速度控IO |
LP |
左轮方向 (绿色线) | PB13 |
方向控制IO |
REN |
右轮PWM (灰色线) |
PA2 |
速度控IO |
RP |
右轮方向 (紫色线) | PB14 |
方向控制IO |
1.3 默认方向
Pibot
在运动学解算的时候,是按照每个轮子单独考虑的。默认情况下,轮子轴的方向指向左侧的y
轴,轮子的前进方向前方的x
轴方向。所以按照运动学解算,小车在前进的时候,左轮是需要“反向”旋转的。
为了更好理解,我们假设电机上面有标注默认的正负号,假设电机默认是顺时针旋转(轴心朝前)。当我们把电机安装在左轮的时候,给默认的电压方向,那么左轮是倒退的,所以我们需要给"负值"的PWM
,即是让轮子反方向旋转。当然,PWM
本身是一个非负的数值,负值表示其方向作用。
// 如果PWM为正值
if (pwm_value > 5) {
// 控制电机运动方向
GPIO_SetBits(GPIOB, GPIO_Pin_13);
// 设置电机速度
PB_Set_PWM(TIM2, 4, (uint16_t)pwm_value);
// 如果PWM为负值
}else if (pwm_value < -5) {
// 控制电机运动方向
GPIO_ResetBits(GPIOB, GPIO_Pin_13);
// 设置电机速度
PB_Set_PWM(TIM2, 4, (uint16_t)-pwm_value);
}
类别 | 方向 | 数值 | 说明 |
---|---|---|---|
左电机 | 小车前进 | 负值 | 小车在给前进命令时PWM 实际是负值。 |
左编码器 | 小车前进 | 负值 | 小车给前进命令时,小车编码器总值负增长。 |
右电机 | 小车前进 | 正值 | 小车在给前进命令时PWM 实际是正值。 |
右编码器 | 小车前进 | 正值 | 小车给前进命令时,小车编码器总值正增长。 |
1.4 编码器到速度的换算
目前银星机器人采用的是霍尔编码器,但是其磁环的参数是未知的。常见的磁环的有22个极性。那么电机转动一圈下来就会产生44个脉冲计数。霍尔编码器原理详情见《霍尔编码器原理》。
// 运动距离 = 编码器数值 / 编码器一圈脉冲计数 / 减速比 * 轮子直径 * PI
dis = (encoder_num / ENCODER_RATIO) / reduction ratio * wheel_diameter / PI;
对应的,在robot.cpp
中,可以看到里程计的换算,轮子直径原始是mm单位乘以0.001转m:
// 距离 = 编码器的增量 * PI * 轮子直径/ 编码器一圈脉冲计数 / 电机减速比
dis[i] = encoder[i]->get_increment_count_for_odom()*__PI*DataHolder::get()->parameter.params.wheel_diameter*0.001/DataHolder::get()->parameter.params.encoder_resolution/DataHolder::get()->parameter.params.motor_ratio;