2. 运动学基础:坐标系定义与刚体运动描述

各位同学,咱们今天聊点实在的。做差速底盘,坐标系这东西绕不开。我刚开始做机器人那会儿,觉得坐标系嘛,不就是画个箭头吗?结果第一次调试,机器人原地转圈,跑出去回不来——坐标系搞反了。从那以后,我每次写代码前,都会先把坐标系画在纸上。

2.1 世界坐标系与机器人坐标系

说白了,世界坐标系就是「大地」的参考系。你站在操场上,东、南、西、北是固定的。机器人坐标系呢?是「机器人自己」的参考系。它朝哪看,哪就是前方。

我习惯这样定义:

  • 世界坐标系:用 XWOWYW 表示。原点固定在地面某点,X轴指向正东,Y轴指向正北。这个坐标系不会动。
  • 机器人坐标系:用 XRORYR 表示。原点在机器人几何中心,X轴指向机器人正前方,Y轴指向左侧。

你想想看,这两个坐标系之间是什么关系?其实就是平移加旋转。机器人在地面上走,它的位置变了(平移),朝向也变了(旋转)。

核心要点:世界坐标系是「绝对」的,机器人坐标系是「相对」的。所有传感器数据,最终都要统一到世界坐标系下处理。

2.2 刚体运动描述

机器人底盘,我们把它看作一个刚体。刚体运动,说白了就是「位置变了 + 姿态变了」。位置用坐标 (x, y) 表示,姿态用角度 θ 表示。

这里有个坑,我踩过。角度定义一定要统一。我见过有人用弧度,有人用度,还有人用四元数。在差速底盘里,我建议统一用弧度,且逆时针为正。

刚体运动的状态向量可以写成:

状态向量 = [x, y, θ]ᵀ

其中:

  • x:世界坐标系下的X坐标(单位:米)
  • y:世界坐标系下的Y坐标(单位:米)
  • θ:机器人朝向与世界坐标系X轴的夹角(单位:弧度)

我的小技巧:写代码时,把角度归一化到 [-π, π] 区间。否则积分久了,角度会漂移,你都不知道机器人到底朝哪。

2.3 速度与角速度概念

速度,就是位置的变化率。角速度,就是角度的变化率。听起来简单,但实际用起来容易乱。

在机器人坐标系下,速度有三个分量:

  • 线速度 v:沿机器人正前方的速度(单位:m/s)
  • 横向速度 vy:沿机器人左侧的速度(单位:m/s)——差速底盘通常为0
  • 角速度 ω:绕机器人中心旋转的速度(单位:rad/s)

为什么差速底盘的横向速度通常为0?因为两个轮子只能产生前后方向的力,不能侧向移动。嗯,这里要注意,实际中轮胎会有侧滑,但运动学模型里我们忽略它。

世界坐标系下的速度与机器人坐标系下的速度,可以通过旋转矩阵转换:

[ẋ]   [cosθ  -sinθ  0] [v]
[ẏ] = [sinθ   cosθ  0] [0]
[θ̇]   [0      0     1] [ω]

这个公式,说白了就是:机器人朝哪个方向跑,世界坐标系下就对应哪个方向的速度分量。

我曾经犯过的错:直接拿机器人坐标系下的速度去更新世界坐标系下的位置,结果机器人跑成了「漂移模式」。记住,一定要先做旋转矩阵变换。

2.4 知识体系结构图

下面这张图,是我自己画的知识结构。你看一遍,心里就有谱了。

差速底盘运动学基础 · 知识体系 世界坐标系 XWOWYW · 固定不动 机器人坐标系 XRORYR · 随体运动 刚体运动描述 位置 (x,y) + 姿态 θ 线速度 v · 横向速度 vy 角速度 ω 状态向量 [x, y, θ]ᵀ 核心公式:旋转矩阵变换 [ẋ, ẏ, θ̇]ᵀ = R(θ) · [v, 0, ω]ᵀ ⚠ 避坑:角度归一化到 [-π, π] · 坐标系转换不能忘

2.5 实际项目中的坐标系选择

我在做AGV小车项目时,遇到过一个问题:激光雷达的数据是在机器人坐标系下的,但地图是在世界坐标系下的。怎么对齐?

我的做法是:

  1. 先确定机器人当前在世界坐标系下的位姿 (x, y, θ)
  2. 把激光雷达的每个点从机器人坐标系转换到世界坐标系
  3. 再与地图匹配,更新位姿估计

这个流程,说白了就是「坐标系变换」的实战应用。你如果理解了前面讲的旋转矩阵,这一步就是套公式的事。

经验之谈:写代码时,把坐标系变换封装成一个函数。我习惯叫它 robotToWorld(robot_pose, point_in_robot)。这样调试起来,一眼就能看出问题在哪。

2.6 本章小结

这一章,我们聊了三个核心概念:

  • 世界坐标系和机器人坐标系——一个是绝对参考,一个是相对参考
  • 刚体运动描述——位置加姿态,三个数搞定
  • 速度与角速度——线速度、横向速度、角速度,别忘了旋转矩阵

嗯,这些基础打牢了,后面讲电机控制、运动学解算,你才不会晕。我当年就是吃了基础不牢的亏,走了不少弯路。希望你们能一步到位。


专注资料整理