坐标旋转变换格则
坐标系旋转公式
全局(global)—>局部(local)
已知 全局坐标系A
局部坐标系B
局部坐标系B原点在全局坐标系A的位置(x,y)
待转换坐标点在全局坐标系A的位置(x0,y0)
实行坐标系 先平移 再旋转 的规则
局部(local)—> 全局(global)
已知 全局坐标系A
局部坐标系B
局部坐标系B原点在全局坐标系A的位置(x,y)
待转换坐标点在局部坐标系A的位置(x0,y0)
实行坐标系 先旋转 再平移 的规则
当然, 先平移 再旋转 的方法也行,就是相对麻烦些。
① 先将全局坐标系A的原点转换到局部坐标系B下,转换完成后的坐标值(x1,y1)就是我们需要平移的值
② 然后执行全局—>局部的规则 先平移再旋转 套用公式就好。
使用eigen库来进行坐标旋转平移
一些规则
Eigen::Matrix3d A
Eigen::Matrix3d B
Eigen::Matrix3d R_new = A * B
矩阵A * 矩阵B 是先进行B的旋转平移 再进行A的旋转平移
其中各个轴的旋转顺序可以提前定义
Eigen::Matrix3d R_initial = (Eigen::AngleAxisd(init.yaw.getRad(), Eigen::Vector3d::UnitZ()) *
Eigen::AngleAxisd(init.pitch.getRad(), Eigen::Vector3d::UnitY()) *
Eigen::AngleAxisd(init.roll.getRad(), Eigen::Vector3d::UnitX())).matrix();
注意定好旋转顺序后,欧拉角的提取也要按顺序来
Eigen::Matrix3d R_new = A * B
矩阵A*矩阵B是局部坐标系转换到全局坐标系
Eigen::Matrix3d R_new = A .transpose()* B
矩阵A的逆矩阵 乘 矩阵B 则是按A逆变换,即由全局坐标系转换到局部坐标系