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

78 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

#### 1.银星机器人参数
##### 1.1 基本尺寸参数
银星机器人有两个大齿轮,分别在电机和轮子上,经过尺寸的测量发现两个齿轮大小一样,应该是`1:1`的关系。
| 类别 | 参数 | 数值 |
| -------------- | ------- | -------------- |
| 轮子直径 | `mm` | `240` |
| 轮距 | `mm` | `420` |
| 编码器分辨率 | - | 32(估计值) |
| 电机减速比 | - | `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`本身是一个非负的数值,负值表示其方向作用。
```C
// 如果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个脉冲计数。霍尔编码器原理详情见《霍尔编码器原理》。
```c
// 运动距离 = 编码器数值 / 编码器一圈脉冲计数 / 减速比 * 轮子直径 * PI
dis = (encoder_num / ENCODER_RATIO) / reduction ratio * wheel_diameter / PI;
```
对应的,在`robot.cpp`中可以看到里程计的换算轮子直径原始是mm单位乘以0.001转m
```C++
// 距离 = 编码器的增量 * 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;
```