forked from logzhan/RobotHardware-UESTC
78 lines
4.2 KiB
Markdown
78 lines
4.2 KiB
Markdown
#### 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;
|
||
```
|
||
|