标准布局为矩形,四个轮子呈对称分布,对角线轮子的排布一致,分为X型和O型,分布方式如字面意思,四个轮子的小滚轮方向组成X则车辆为X型布局,小滚轮方向组成O型则车辆为O型布局,两种布局的左右轮子相反安装。


基础运动 | 各轮旋转关系 |
|---|---|
前进 | 四轮同速正向旋转 → |
后退 | 四轮同速反向旋转 ← |
右平移 | A轮正转,B轮反转 →← |
左平移 | B轮正转,A轮反转 ←→ |
原地顺转 | 左侧轮反转,右侧轮正转 ↻ |
原地逆转 | 右侧轮反转,左侧轮正转 ↺ |
通过矢量合成实现任意方向移动:
Vx(X轴速度) = (前右轮 + 后左轮) - (前左轮 + 后右轮) = 2 * (B - A)
Vy(Y轴速度) = (前左轮 + 前右轮) - (后左轮 + 后右轮)
ω(旋转量) = 四轮差速控制import math
class MecanumKinematics:
def __init__(self, wheel_radius=0.05, lx=0.15, ly=0.15):
"""
参数:
wheel_radius: 轮子半径 (米)
lx: 轮子到中心在x方向的距离 (米)
ly: 轮子到中心在y方向的距离 (米)
"""
self.R = wheel_radius
self.lx = lx # 通常为底盘长的一半
self.ly = ly # 通常为底盘宽的一半
def chassis_to_wheel(self, vx, vy, omega):
"""
将底盘速度转换为四个轮子的转速
参数:
vx: x方向速度 (米/秒,向右为正)
vy: y方向速度 (米/秒,向前为正)
omega: 角速度 (弧度/秒,逆时针为正)
返回:
w1, w2, w3, w4: 四个轮子的转速 (弧度/秒)
"""
# 核心运动学公式
w1 = (1/self.R) * (vx - vy - (self.lx + self.ly) * omega) # 右前
w2 = (1/self.R) * (vx + vy + (self.lx + self.ly) * omega) # 左前
w3 = (1/self.R) * (vx + vy - (self.lx + self.ly) * omega) # 右后
w4 = (1/self.R) * (vx - vy + (self.lx + self.ly) * omega) # 左后
return w1, w2, w3, w4
def wheel_to_chassis(self, w1, w2, w3, w4):
"""
将四个轮子的转速转换为底盘速度(正运动学)
"""
vx = (self.R/4) * (w1 + w2 + w3 + w4)
vy = (self.R/4) * (-w1 + w2 + w3 - w4)
omega = (self.R/(4*(self.lx + self.ly))) * (-w1 + w2 - w3 + w4)
return vx, vy, omega