你們好,我是小智,最近深圳天氣很怪,一會晴天一會下雨的,如今到哪都要隨身帶把傘才行。昨天原本說今天要搞一個使用顯卡運行Gazebo的教程的,那麼先上個餐前甜點,好菜留在後頭。python
今天給你們推薦一個開源庫,小智目前在用的一個庫,我的以爲很好用哈(由於這個庫是小智寫的,哈哈哈),你們若是是作工程是能夠用的到的,小智就將它用到了實際的機器人項目開發當中來,仍是很舒服的。c++
開源地址Gitee:gitee.com/ohhuo/trans…
開源地址Gitee:github.com/aiotrobot/t…git
複製TransForms.cpp和TransForms.h到你的工程便可github
git clone https://gitee.com/ohhuo/transforms3d_cpp.git
cd transforms3d_cpp
mkdir build
cd build
cmake ..
make
sudo make install
sudo ldconfig
複製代碼
/**
* @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);
複製代碼
/**
* @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);
複製代碼
/**
* @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);
複製代碼
/**
* @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的簡潔明瞭~微信
最後歡迎你們關注小智的微信公衆號(機智人),小智會持續不斷的更新的~markdown