通过四元数计算机器人重力投影:从世界坐标系到机体坐标系
一、什么是重力投影
“机体重力投影”这个词,简单说就是:
看看重力在机器人自己身体坐标系里,朝哪个方向。
我们都知道,现实里重力永远是竖直向下的。
但是机器人会转身、前倾、侧倾,所以虽然重力在世界里一直向下,在机器人自己看来,重力方向会变。
所以:
- 机器人站直时,重力在它眼里就是“正下方”
- 机器人前倾时,重力在它眼里就会“有点朝前下方”
- 机器人左歪时,重力在它眼里就会“有点朝左下方”
这就是“机体重力投影”。
二、为什么强化学习里要用它
因为机器人要学会保持平衡、走路、跑步、跳跃,就必须知道自己有没有歪。
而“机体重力投影”正好能告诉它:
- 我是不是前倾了
- 我是不是后仰了
- 我是不是左歪了
- 我是不是右歪了
- 我是不是快翻了
所以这个量本质上就是:
一种表示机器人姿态是否倾斜的观测量。
三、先分清两个坐标系
1. 世界坐标系
这是固定不动的坐标系。比如:
- :前后
- :左右
- :上下
在世界坐标系里,重力永远是:
或者也有人写成:
区别只是一个是单位方向,一个是真实加速度大小。
2. 机体坐标系
这是绑在机器人身上的坐标系。通常可以理解成:
- :机器人前方
- :机器人左/右方
- :机器人上方
因为机器人会动,所以机体坐标系也会跟着转。
四、四元数是什么
四元数你可以先把它理解成:
一种专门用来描述三维旋转的数学工具。
通常写成:
其中:
- :实部
- :虚部
它的作用就是描述机器人当前“朝向什么方向”。
比如机器人:
- 有没有转身
- 有没有前倾
- 有没有侧倾
这些姿态信息都可以用四元数表示。
五、四元数乘法是什么
四元数乘法就是两个四元数之间的一种特殊乘法,记作:
注意:
四元数乘法不是普通乘法,而且一般不满足交换律。
也就是说:
这一点很重要,因为旋转的先后顺序不同,结果通常也不同。
1. 四元数乘法公式
设两个四元数分别为:
那么它们的乘法结果是:
这个公式看起来有点长,但你先不用硬背,只要知道:
它是四元数做旋转运算时最基本的运算规则。
2. 四元数乘法的直观理解
你可以把它理解成:
把两个旋转“接起来”
例如:
- :表示先转一次
- :表示再转一次
那 表示一种组合后的旋转。
所以四元数乘法本质上是在做:
旋转的叠加
3. 为什么这里一定会用到四元数乘法
因为我们想把“世界系里的重力向量”变成“机体系里的重力向量”,本质上就是在做旋转变换。
而四元数进行旋转时,标准形式就是:
或者:
所以只要你看到“用四元数旋转一个向量”,就一定会遇到四元数乘法。
六、为什么向量也能参与四元数乘法
普通三维向量不能直接和四元数算乘法,所以要先把它写成“纯虚四元数”。
例如向量:
要写成:
也就是说:
- 前面的 是实部
- 后面三个数才是向量本身
比如世界系重力:
要先写成:
这样它才能参与四元数乘法。
七、四元数的逆是什么
四元数旋转里常用到逆四元数:
如果 是单位四元数,那么它的逆很简单:
也就是:
实部不变,虚部变号。
这个操作也叫四元数共轭。
八、机体重力投影到底要算什么
我们本来知道的是:
这是世界坐标系里的重力方向。
但强化学习更想知道的是:
也就是:
重力在机器人自己身体坐标系里的表达。
这个 就叫“机体重力投影”。
九、四元数下,重力投影怎么计算
如果四元数 表示的是:
机体坐标系 世界坐标系
那么机体重力投影的公式就是:
这里的 其实是写成纯虚四元数后的形式。
这句话怎么理解
你可以直接记住:
已知重力在世界系里的方向,要变成机体系里的方向,就要做一次逆旋转。
因为:
- 现在已知的是世界里的重力
- 想得到的是机体里的重力
- 所以要从“世界”转回“机体”
这就是为什么要用:
十、这个公式每一部分是什么意思
含义如下:
- :世界系里的重力
- :机器人姿态四元数
- :四元数的逆,用来做反向旋转
- :四元数乘法
最终得到的:
表示:
- :重力在机器人前后方向上的分量
- :重力在机器人左右方向上的分量
- :重力在机器人上下方向上的分量
十一、最直观的理解方法
你可以把这个过程想成:
世界里看
重力永远向下。
机器人自己看
如果自己歪了,那么“向下”这个方向在自己眼里就不再是纯粹的身体负 方向了。
比如:
1. 机器人站得很正
那么:
表示重力就是朝机器人身体正下方。
2. 机器人向前倾
那么:
表示重力在机体前方也有一点分量。
也就是说,机器人“感觉自己前倾了”。
3. 机器人向左歪
那么:
表示重力在左右方向上也有分量。
也就是说,机器人“感觉自己侧倾了”。