在给定时间内插值欧拉角/旋转矩阵

Interpolating euler angles/rotation matrices with a given time

本文关键字:旋转 定时间 插值      更新时间:2023-10-16

如何在给定时间(或速度)的2个欧拉角之间正确插值

例如,我想实现一个简单的眨眼,先向下旋转盖子,然后再向上旋转。眨眼的时间应该在50到500毫秒之间。目前,我只是简单地计算x值(向下):

Eigen::Vector3f rotateLeftLidDown(float step)
{
return Eigen::Vector3f(-step*COMPLETE_CLOSURE,0,0);
}

//INTERPOLATION
float duration =gen_random_float(0.05f,0.5f);
  for(float i=0;i<1;i=i+(duration))
{
 LeftLid.push_back(rotateLeftLidDown(i));
}
 for(float i=1;i>0;i=i-(duration))
  {
    LeftLid.push_back(rotateLeftLidUp(i));
  }

每个计算步骤稍后都会从麻袋中弹出,并以100赫兹的速率应用于节点。。这种方法有快有慢,但似乎并不正确。我不认为眼睑的速度和这里的"插值"真的很脏。。。将euler变换为四元数还是旋转矩阵更好?

像眨眼(500ms)这样的功能,考虑到在70ms内向下280mm/s的峰值速度,并以大约100mm/s的速度打开眼睑,真的会对我有帮助。

我假设这是3d?在这种情况下,使用四元数来表示你在空间中的方向。那么插值就是四元数的简单插值。