坐标系与运动学基础

各位同学,咱们今天聊点硬核的。坐标系和运动学,说白了就是给底盘一个「世界观」。我刚开始做底盘控制时,觉得这东西太理论了,不就是几个坐标轴嘛。直到有一次实车调试,车死活跑不直,查了三天才发现是坐标系定义反了……嗯,从那以后我再也不敢小看这章内容了。

世界坐标系与车体坐标系

先搞清楚两个坐标系的关系。世界坐标系是固定的,你可以想象成地图上的经纬度。车体坐标系是跟着车跑的,原点在车辆质心,x轴朝前,y轴朝左,z轴朝上(右手系)。

我个人习惯把世界坐标系叫「全局视角」,车体坐标系叫「自我视角」。你想想看,GPS给的是世界坐标,但底盘控制需要的是车体坐标——这中间就得做坐标变换。

关键点: 车体坐标系的原点通常选在后轴中心,而不是车辆几何中心。为什么?因为阿克曼转向的旋转中心在后轴延长线上,这样算运动学最方便。

坐标变换:从世界到车体

坐标变换其实就三步:平移 + 旋转。假设世界坐标系下有个点 P_w,车体坐标系原点在世界系下的位置是 O_v,车体朝向角是 θ。那么:

P_v = R(θ) * (P_w - O_v)

其中旋转矩阵 R(θ) = [cosθ  sinθ  0;
                     -sinθ cosθ  0;
                     0     0     1]

我在项目中遇到过一个问题:IMU安装偏了5度,结果所有坐标变换都错了。后来加了个标定步骤,用最小二乘法拟合出安装角度偏差。嗯,这里要注意——传感器安装误差是工程里最常见的坑。

我的经验: 写代码时把坐标变换封装成独立函数,别到处写矩阵乘法。我见过一个项目,同一个旋转矩阵在五个地方写了五遍,改一个漏三个,调试到崩溃。

刚体运动学:线速度与角速度

底盘是个刚体,它的运动可以分解为平动和转动。平动用线速度 v 描述,转动用角速度 ω 描述。这两者之间有个重要关系:

v = ω × r

其中 r 是旋转半径。这个公式太重要了,阿克曼转向和差速转向都靠它推导。

我记得有一次做路径跟踪,控制量是 v 和 ω,但执行器只能控制轮速和转向角。怎么映射?就是靠这个公式反推。说白了,运动学就是搭了一座桥,把「想要的速度」变成「能执行的指令」。

物理量 符号 单位 说明
线速度 v m/s 车辆质心沿前进方向的速度
角速度 ω rad/s 车辆绕垂直轴的旋转速度
转弯半径 R m v / ω,注意 ω=0 时 R 无穷大

阿克曼转向几何

阿克曼转向是汽车最经典的转向方式。它的核心思想是:所有车轮的转向中心交于一点(后轴延长线上)。这样车轮才能纯滚动,不产生侧滑。

内轮转角 δ_i 和外轮转角 δ_o 的关系:

cot(δ_o) - cot(δ_i) = L / B

其中 L 是轴距,B 是轮距

你想想看,如果内外轮转角一样,转弯时内侧轮就会打滑。我在做低速泊车时遇到过这个问题——轮胎吱吱响,就是阿克曼几何没调好。

避坑指南: 我曾经以为阿克曼几何是固定的,后来发现轮胎侧偏特性会影响实际转角。高速时轮胎变形大,需要补偿。别死磕理论值,实车标定才是王道。

差速转向模型

差速转向常见于履带车、AGV、双轮平衡车。它没有转向机构,靠左右轮的速度差实现转向。

模型很简单:

v = (v_r + v_l) / 2
ω = (v_r - v_l) / B

其中 v_r 是右轮速度,v_l 是左轮速度,B 是轮距

这个模型有个隐含条件:车轮与地面无滑动。实际上,差速转向必然伴随滑动,尤其是原地旋转时。我做过一个AGV项目,原地转圈时定位误差累积很快,后来加了滑动补偿才解决。

两种转向对比:
  • 阿克曼转向:适合高速、低滑移,但机械结构复杂
  • 差速转向:结构简单、可原地旋转,但轮胎磨损大

知识体系总览

下面这张图是我自己画的,把本章的核心逻辑串起来了。你看一遍应该能明白坐标系、运动学、转向模型之间的关系。

坐标系与运动学知识体系 世界坐标系 全局固定参考系 车体坐标系 随车移动参考系 坐标变换 平移 + 旋转矩阵 R(θ) 刚体运动学 线速度 v + 角速度 ω 阿克曼转向几何 cot(δ_o) - cot(δ_i) = L/B 差速转向模型 v = (v_r+v_l)/2, ω = (v_r-v_l)/B 核心逻辑:世界坐标 → 车体坐标 → 运动学分解 → 转向模型映射
学习建议: 别死记公式。找个开源底盘代码,把坐标变换和运动学模型跑一遍。我当年就是对着ROS的tf包和base_controller代码,一行一行看,才真正理解这些概念。

好了,坐标系和运动学就聊到这儿。这些东西看着简单,但工程里处处是坑。你写代码时多想想「这个坐标是在哪个系下的」「这个速度是线速度还是角速度」,能省不少调试时间。


专注资料整理