RobotHardware-UESTC/Hardware/银星机器人底盘/README.md

3.7 KiB
Raw Blame History

1.银星机器人参数

1.1 基本尺寸参数

银星机器人有两个大齿轮,分别在电机和轮子上,经过尺寸的测量发现两个齿轮大小一样,应该是1:1的关系。

类别 参数 数值
轮子直径 mm 240
轮距 mm 420
编码器分辨率 - 未知
电机减速比 - 1:90
减速箱默认转速 RPM 54
电机默认转速 r/min 4200
电机默认方向 CCW 逆时针方向旋转
额定电压 伏特 24
额定电流 安培 1.6
额定功率 瓦特 22
1.2 接线方式

Pibot开发板定义中,对于二轮差分模型。Motor1Motor2分别对应的是左轮和右轮,关系如下表所示:

项目 类别 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个脉冲计数。霍尔编码器原理详情见《霍尔编码器原理》。

// 运动距离 = (编码器数值 / 编码器一圈脉冲计数) * 减速比 * 轮子直径 / 2 * PI
dis = (encoder_num / ENCODER_RATIO) * reduction ratio * wheel_diameter / 2 * PI;