开源库推荐:TransForms3d_Cpp
大家好,我是小智,最近深圳天气很怪,一会晴天一会下雨的,现在到哪都要随身带把伞才行。昨天本来说今天要搞一个使用显卡运行Gazebo的教程的,那么先上个餐前甜点,好菜留在后头。
今天给大家推荐一个开源库,小智目前在用的一个库,个人觉得很好用哈(因为这个库是小智写的,哈哈哈),大家如果是做工程是可以用的到的,小智就将它用到了实际的机器人项目开发当中来,还是很舒服的。
开源地址Gitee:gitee.com/ohhuo/trans…
开源地址Gitee:github.com/aiotrobot/t…
一、介绍与安装
- 基于Eigen库实现,对一些常用的变换进行了封装
- 实现欧拉角与旋转矩阵的互相转换,欧拉角到四元数的转换
- 实现四元数与旋转矩阵的互相转换,四元数到欧拉角的转换
- 实现通过齐次矩阵合成与部分转换
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);
复制代码
文章有点长哈,最重点的部分也没有突出,接下来还会再更新一期,顺便讲一下python版本的,相比长c++复杂的语法,小智还是更喜欢python的简洁明了~
最后欢迎大家关注小智的微信公众号(机智人),小智会持续不断的更新的~
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END