基于Eigen的坐标转换库-TransForms3d
本篇文章属于开源库TransForms系列,该库主要用于C++坐标转换使用,以及一些标定算法的实现和优化,目前还在不断更新中,请持续关注。
开源地址:https://gitee.com/ohhuo/transforms3d_cpp
基础模块:
- 基础坐标转换,四元数、欧拉角和旋转矩阵互相转换和齐次坐标生成-20210504
- 坐标转化组,帮你做那些头疼的关系换算-20210531
拓展模块:
- 坐等更新
- 基于Eigen库实现,对一些常用的变换进行了封装
- 实现欧拉角与旋转矩阵的互相转换,欧拉角到四元数的转换
- 实现四元数与旋转矩阵的互相转换,四元数到欧拉角的转换
- 实现通过齐次矩阵合成与部分转换
- 持续更新中…
Git:仓库地址 | Wiki:函数列表
1.源码引入复制TransForms.cpp和TransForms.h到你的工程即可
2.编译安装git clone https://gitee.com/ohhuo/transforms3d_cpp.git cd transforms3d_cpp mkdir build cd build cmake .. make sudo make install sudo ldconfig二、 函数列表 1.基础部分 1.1 角度转换 角度转弧度
/** * @description: 角度转为弧度 * @param {double} angle 角度值 * @return 返回对应弧度值,一般在-3.14~3.14之间 */ static double Degrees(double angle);弧度转角度
/** * @description: 弧度转为角度 * @param {double} degrees 弧度值 * @return 返回对应的角度值,一般在-180~180之间 */ static double Angle(double degrees);1.2 欧拉角部分 角度制欧拉角转旋转矩阵
/** * @description: 角度制欧拉角转旋转矩阵,此函数默认的旋转顺序是x-y-z. * @param {double} rx 绕x轴的旋转. * @param {double} ry 绕y轴的旋转. * @param {double} rz 绕z轴的旋转. * @return {Matrix3d} 返回3✖3的旋转矩阵. */ static Matrix3d EulerAngle2Mat(double rx, double ry, double rz);欧拉角转旋转矩阵
/** * @description: 欧拉角转旋转矩阵 * @param {Vector3d} eular 欧拉角rx,ry,rz * @return {Matrix3d} 返回3✖3的旋转矩阵. */ static Matrix3d EulerAngle2Mat(Vector3d eular);欧拉角转四元数
/** * @description:欧拉角转四元数 * @param {double} rx 绕x轴的旋转 * @param {double} ry 绕y轴的旋转 * @param {double} rz 绕z轴的旋转 * @return {Quaterniond} 返回对应的四元数 */ static Quaterniond Euler2Quat(double rx, double ry, double rz);角度制欧拉角转四元数
/** * @description: 角度制欧拉角转四元数 * @param {double} rx 绕x轴的旋转 * @param {double} ry 绕y轴的旋转 * @param {double} rz 绕z轴的旋转 * @return {Quaterniond} 返回对应的四元数 */ static Quaterniond EulerAngle2Quat(double rx, double ry, double rz);旋转矩阵转欧拉角(弧度制)
/** * @description: 旋转矩阵转欧拉角(弧度制) * @param {Matrix3d} 3✖3的旋转矩阵 * @return {Vector3d} 欧拉角 */ static Vector3d Mat2Euler(Matrix3d mat);欧拉角转旋转矩阵
/** * @description: 欧拉角转旋转矩阵 * @param {double} rx 绕x轴的旋转 * @param {double} ry 绕y轴的旋转 * @param {double} rz 绕z轴的旋转 * @return {*} */ static Matrix3d Euler2Mat(double rx, double ry, double rz);旋转矩阵转角度制欧拉角
/** * @description: 旋转矩阵转角度制欧拉角(角度制) * @param {Matrix3d} 3✖3的旋转矩阵 * @return {Vector3d} 欧拉角 */ static Vector3d Mat2EulerAngle(Matrix3d mat);1.3 四元数部分 四元数转旋转矩阵
/** * @description: 四元数转旋转矩阵 * @param {Quaterniond} 四元数 * @return {Matrix3d} 对应的旋转矩阵 */ static Matrix3d Quat2Mat(Quaterniond quat);四元数转欧拉角
/** * @description: 四元数转欧拉角 * @param {Quaterniond} 四元数 * @return {Vector3d} 对应的欧拉角 */ static Vector3d Quat2Eular(Quaterniond quat);四元数转弧度制欧拉角(角度制)
/** * @description: 四元数转弧度制欧拉角(角度制) * @param {Quaterniond} 四元数 * @return {Vector3d} 对应的欧拉角 */ static Vector3d Quat2EularAngle(Quaterniond quat);四元数转弧度制欧拉角(角度制)
/** * @description: 旋转矩阵转四元数 * @param {Matrix3d} 3✖3的旋转矩阵 * @return {Quaterniond} 对应的四元数 */ static Quaterniond Mat2Quat(Matrix3d mat);1.4 齐次矩阵部分 通过位置和欧拉角合成一个齐次矩阵
/** * @description: 通过位置和欧拉角合成一个齐次矩阵 * @param {Vector3d} positon 平移位置 * @param {Vector3d} rotEular 旋转变换(欧拉角形式) * @return {*} */ static Matrix4d Compose(Vector3d positon, Vector3d rotEular);通过位置和四元数合成一个齐次矩阵
/** * @description: 通过位置和四元数合成一个齐次矩阵 * @param {Vector3d} positon 平移位置 * @param {Quaterniond} quat 四元数 * @return {Matrix4d} 齐次矩阵 */ static Matrix4d Compose(Vector3d positon, Quaterniond quat);通过三个位置和三个欧拉角合成一个齐次矩阵
/** * @description: 通过三个位置和三个欧拉角合成一个齐次矩阵 * @param {double} x 沿x轴的平移 * @param {double} y 沿y轴的平移 * @param {double} z 沿z轴的平移 * @param {double} rx 绕x轴的旋转 * @param {double} ry 绕y轴的旋转 * @param {double} rz 绕z轴的旋转 * @return {Matrix4d} 返回4✖4的齐次变换矩阵 */ static Matrix4d ComposeEuler(double x, double y, double z, double rx, double ry, double rz);将齐次矩阵转换成平移和欧拉角形式,方便理解
/** * @description: 将齐次矩阵转换成平移和欧拉角形式,方便理解 * @param {Matrix4d} 4✖4的齐次变换矩阵 * @return {VectorXd} x,y,z,rx,ry,rz */ static VectorXd H2EulerAngle(Matrix4d t);三、鸣谢与反馈 1. 贡献
- 作者:桑欣 | Autor:SangXin
- 邮箱 | Email 2876424407@qq.com
- 直接将问题发送至邮箱2876424407@qq.com
- 提出Issuce