開源庫推薦:C++座標轉換庫TransForms3d_Cpp

開源庫推薦:TransForms3d_Cpp

你們好,我是小智,最近深圳天氣很怪,一會晴天一會下雨的,如今到哪都要隨身帶把傘才行。昨天原本說今天要搞一個使用顯卡運行Gazebo的教程的,那麼先上個餐前甜點,好菜留在後頭。python

今天給你們推薦一個開源庫,小智目前在用的一個庫,我的以爲很好用哈(由於這個庫是小智寫的,哈哈哈),你們若是是作工程是能夠用的到的,小智就將它用到了實際的機器人項目開發當中來,仍是很舒服的。c++

開源地址Gitee:gitee.com/ohhuo/trans…
開源地址Gitee:github.com/aiotrobot/t…git

1、介紹與安裝

  • 基於Eigen庫實現,對一些經常使用的變換進行了封裝
  • 實現歐拉角與旋轉矩陣的互相轉換,歐拉角到四元數的轉換
  • 實現四元數與旋轉矩陣的互相轉換,四元數到歐拉角的轉換
  • 實現經過齊次矩陣合成與部分轉換

1.源碼引入

複製TransForms.cpp和TransForms.h到你的工程便可github

2.編譯安裝

git clone https://gitee.com/ohhuo/transforms3d_cpp.git
cd transforms3d_cpp
mkdir build 
cd build
cmake ..
make
sudo make install
sudo ldconfig
複製代碼

2、 函數列表

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的簡潔明瞭~微信

最後歡迎你們關注小智的微信公衆號(機智人),小智會持續不斷的更新的~markdown

相關文章
相關標籤/搜索