3. 机器人底盘选型与设计:两轮差速与四轮底盘、运动学模型、电机与编码器选型
底盘是机器人的腿。腿不好,算法再强也白搭。
我见过不少团队,SLAM 算法调得漂漂亮亮,结果一上路,定位飘得亲妈都不认识。查到最后,底盘运动学模型没建对,或者电机响应太慢。所以这一章,咱们把底盘这件事彻底聊透。
3.1 两轮差速 vs 四轮底盘:到底怎么选?
先问自己一个问题:你的机器人主要在什么地面跑?
室内平地,两轮差速就够了。室外坑洼,四轮独立驱动更靠谱。我个人的经验是,80% 的室内服务机器人,两轮差速 + 万向轮是最优解。结构简单,控制容易,成本也低。
来看看具体对比:
| 特性 | 两轮差速 | 四轮底盘 |
|---|---|---|
| 转弯方式 | 差速转向 | 差速 / 阿克曼 |
| 原地旋转 | ✅ 可以 | ❌ 不行(阿克曼) |
| 负载能力 | 中等 | 强 |
| 控制复杂度 | 低 | 高 |
| 典型场景 | 室内巡检、送餐 | 户外物流、割草 |
嗯,这里要注意:四轮底盘如果做差速转向,轮胎磨损会非常快。我曾经帮一个客户改过一台四轮差速车,跑了不到 50 公里,轮胎就磨平了。后来换了阿克曼结构,问题才解决。
3.2 运动学模型:从数学到底盘
运动学模型,说白了就是告诉你:给轮子一个速度,机器人会怎么动。
两轮差速的运动学模型是最经典的。我习惯把它拆成三步:
- 定义坐标系:机器人坐标系原点在底盘中心,X 轴朝前,Y 轴朝左。
- 计算线速度和角速度:
v = (v_right + v_left) / 2
ω = (v_right - v_left) / L
其中 L 是轮距,也就是左右轮之间的距离。
- 积分得到位姿:
x' = x + v * cos(θ) * dt
y' = y + v * sin(θ) * dt
θ' = θ + ω * dt
这就是 ROS 中 odom 话题的核心计算逻辑。你想想看,整个里程计定位,底层就是这三行公式。
四轮阿克曼的运动学模型稍微复杂一点。前轮转向,后轮驱动。转弯半径由前轮转角决定:
R = L_wheelbase / tan(δ)
其中 δ 是前轮转角,L_wheelbase 是轴距。这个模型在 ROS 里对应 ackermann_msgs 包,做路径规划时特别有用。
3.3 电机选型:扭矩、转速、功率怎么算?
电机选型,我见过太多人拍脑袋了。其实算一算很简单。
你需要三个参数:
- 最大速度:你的机器人想跑多快?室内一般 0.5-1.0 m/s,户外可以到 1.5 m/s。
- 最大爬坡角度:室内 5°,户外 10°-15°。
- 总重量:底盘 + 电池 + 负载,估算一个上限。
然后算扭矩:
T = m * g * sin(θ) * r / η
m 是总重,g 是重力加速度,θ 是爬坡角,r 是轮子半径,η 是传动效率(一般取 0.7-0.8)。
举个例子:一台 30kg 的机器人,爬 10° 坡,轮子半径 0.1m,传动效率 0.75:
T = 30 * 9.8 * sin(10°) * 0.1 / 0.75 ≈ 6.8 N·m
所以电机额定扭矩至少要 7 N·m。再留 20% 余量,选 8.5 N·m 以上的。
转速怎么算?很简单:
n = v / (2 * π * r) * 60
还是上面的例子,速度 1 m/s:
n = 1 / (2 * 3.14 * 0.1) * 60 ≈ 95.5 RPM
所以你需要一个额定扭矩 8.5 N·m、额定转速 100 RPM 左右的电机。市面上常见的直流减速电机,比如 37GB 系列,就能满足这个需求。
3.4 编码器选型:精度、分辨率、接口
编码器是机器人的眼睛。没有它,你根本不知道轮子转了多少。
编码器分两种:
- 增量式:输出脉冲,需要初始位置。便宜,常用。
- 式:直接输出角度。贵,但掉电不丢位置。
我个人的习惯是,室内机器人用增量式就够了。户外或者长时间运行的,建议上式。
分辨率怎么选?看一个公式:
分辨率 = 2 * π * r / (P * 4)
P 是编码器每圈脉冲数(PPR),4 是四倍频后的系数。假设轮子半径 0.1m,编码器 500 PPR:
分辨率 = 2 * 3.14 * 0.1 / (500 * 4) ≈ 0.000314 m
也就是 0.314 mm。这个精度对于室内定位来说,绰绰有余。
接口方面,主流的有:
| 接口类型 | 特点 | 适用场景 |
|---|---|---|
| AB 相 | 两路脉冲,可判方向 | 最常用,兼容性好 |
| I²C | 数字信号,抗干扰强 | 短距离,高精度 |
| SSI | 同步串行,速度快 | 式编码器 |
ROS 里最常用的是 AB 相编码器。通过 rosserial 或者 ros_control 读取脉冲数,然后换算成轮子转速。
3.5 底盘设计实战:从选型到装配
好了,理论讲完了。咱们来走一遍实战流程。
假设我们要做一台室内巡检机器人:
- 总重 25 kg
- 最大速度 0.8 m/s
- 爬坡 5°
- 轮子半径 0.08 m
第一步:电机选型
T = 25 * 9.8 * sin(5°) * 0.08 / 0.75 ≈ 2.28 N·m
n = 0.8 / (2 * 3.14 * 0.08) * 60 ≈ 95.5 RPM
选一个 3 N·m、100 RPM 的直流减速电机,带 500 PPR 编码器。
第二步:底盘结构
两轮差速,轮距 0.4 m。前后各加一个万向轮。底盘用铝合金板,厚度 3 mm,激光切割。
第三步:编码器接线
AB 相编码器,接到 Arduino 或 STM32 的中断引脚。ROS 端用 ros_control 的 Encoder 插件读取。
# 示例:编码器脉冲转速度
left_wheel_speed = (left_ticks - last_left_ticks) / dt * (2 * PI * r) / (PPR * 4)
right_wheel_speed = (right_ticks - last_right_ticks) / dt * (2 * PI * r) / (PPR * 4)
第四步:运动学发布
把左右轮速度转成 geometry_msgs/Twist,发布到 /cmd_vel 话题。ROS 的 base_controller 会自动处理。
3.6 知识体系总览
下面这张图,把底盘选型与设计的核心逻辑串起来了。你可以把它当作一个检查清单:
从底盘类型出发,一路走到 ROS 集成。每一步都有对应的选型参数和计算公式。你照着这个流程走,基本不会出大问题。
好了,底盘选型与设计就聊到这里。记住一句话:底盘是机器人的地基,地基稳了,上面的算法才能跑得漂亮。