3. 机器人底盘选型与设计:两轮差速与四轮底盘、运动学模型、电机与编码器选型

底盘是机器人的腿。腿不好,算法再强也白搭。

我见过不少团队,SLAM 算法调得漂漂亮亮,结果一上路,定位飘得亲妈都不认识。查到最后,底盘运动学模型没建对,或者电机响应太慢。所以这一章,咱们把底盘这件事彻底聊透。

3.1 两轮差速 vs 四轮底盘:到底怎么选?

先问自己一个问题:你的机器人主要在什么地面跑?

室内平地,两轮差速就够了。室外坑洼,四轮独立驱动更靠谱。我个人的经验是,80% 的室内服务机器人,两轮差速 + 万向轮是最优解。结构简单,控制容易,成本也低。

核心区别:两轮差速靠左右轮速度差转弯,四轮底盘可以原地转向或阿克曼转向。前者灵活,后者负载大。

来看看具体对比:

特性 两轮差速 四轮底盘
转弯方式 差速转向 差速 / 阿克曼
原地旋转 ✅ 可以 ❌ 不行(阿克曼)
负载能力 中等 强
控制复杂度 低 高
典型场景 室内巡检、送餐 户外物流、割草

嗯,这里要注意:四轮底盘如果做差速转向,轮胎磨损会非常快。我曾经帮一个客户改过一台四轮差速车,跑了不到 50 公里,轮胎就磨平了。后来换了阿克曼结构,问题才解决。

3.2 运动学模型:从数学到底盘

运动学模型,说白了就是告诉你:给轮子一个速度,机器人会怎么动。

两轮差速的运动学模型是最经典的。我习惯把它拆成三步:

  1. 定义坐标系:机器人坐标系原点在底盘中心,X 轴朝前,Y 轴朝左。
  2. 计算线速度和角速度:
v = (v_right + v_left) / 2
ω = (v_right - v_left) / L

其中 L 是轮距,也就是左右轮之间的距离。

  1. 积分得到位姿:
x' = x + v * cos(θ) * dt
y' = y + v * sin(θ) * dt
θ' = θ + ω * dt

这就是 ROS 中 odom 话题的核心计算逻辑。你想想看,整个里程计定位,底层就是这三行公式。

避坑指南:轮距 L 一定要实测,不要看图纸。我曾经被图纸上的 0.5m 坑过,实际量出来是 0.48m,差了 4%,跑 10 米就偏了 40 厘米。

四轮阿克曼的运动学模型稍微复杂一点。前轮转向,后轮驱动。转弯半径由前轮转角决定:

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。这个精度对于室内定位来说,绰绰有余。

经验值:编码器分辨率不要低于 0.5 mm。太低的话,里程计会抖动,影响 SLAM 建图质量。

接口方面,主流的有:

接口类型 特点 适用场景
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 会自动处理。

关键点:编码器数据一定要做滤波。我习惯用滑动窗口平均,窗口大小 5-10 个采样点。不然里程计会高频抖动。

3.6 知识体系总览

下面这张图,把底盘选型与设计的核心逻辑串起来了。你可以把它当作一个检查清单:

机器人底盘选型与设计知识体系 机器人底盘选型与设计知识体系 底盘类型 两轮差速 四轮底盘 运动学模型 运动学模型 电机选型 编码器选型 ROS 集成与里程计 核心:运动学 + 编码器 决定定位精度

从底盘类型出发,一路走到 ROS 集成。每一步都有对应的选型参数和计算公式。你照着这个流程走,基本不会出大问题。

好了,底盘选型与设计就聊到这里。记住一句话:底盘是机器人的地基,地基稳了,上面的算法才能跑得漂亮。