最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++利用eigen庫(kù)實(shí)現(xiàn)求歐拉角

 更新時(shí)間:2023年11月01日 10:02:13   作者:Cc  
這篇文章主要為大家詳細(xì)介紹了C++如何利用eigen庫(kù)自帶的matrix.eulerAngles()函數(shù)實(shí)現(xiàn)求歐拉角,文中的示例代碼講解詳細(xì),有需要的小伙伴可以參考下

不同順序歐拉角轉(zhuǎn)旋轉(zhuǎn)矩陣對(duì)照公式

eigen庫(kù)求歐拉角公式

分別試驗(yàn)eigen庫(kù)自帶的matrix.eulerAngles()函數(shù),與根據(jù)上述公式推導(dǎo)的兩種方法求歐拉角
eigen庫(kù)求得歐拉角的范圍一定是x−>roll方向在[0,π]之間,y−>pitch方向在[−π,π]之間,z−>yaw方向在[−π,π]之間,優(yōu)先會(huì)保證x−>roll方向處于[0,π]之間,才回去算別的角度。

以下代碼驗(yàn)證:

#include <iostream>
#include <cmath>
#include <Eigen/Dense>
Quaterniond q(0.704,-0.708,0.05,0.002)//定義一個(gè)四元數(shù);
Matrix3d m = q.toRotationMatrix();//四元數(shù)轉(zhuǎn)旋轉(zhuǎn)矩陣;
cout << q << endl;
cout << m << endl;
Quaterniond q1(m);//旋轉(zhuǎn)矩陣轉(zhuǎn)四元數(shù),驗(yàn)證下四元數(shù)是否和原來(lái)輸入的四元數(shù)一致
cout << q1 << endl;
cout << "XYZ------------" << endl;
Vector3d v=m.eulerAngles(0,1,2);//旋轉(zhuǎn)矩陣轉(zhuǎn)歐拉角,以XYZ為旋轉(zhuǎn)方向
cout << v << endl;
cout << "ZYX------------" << endl;
Vector3d v1=m.eulerAngles(2,1,0);//旋轉(zhuǎn)矩陣轉(zhuǎn)歐拉角,以ZYX為旋轉(zhuǎn)方向
cout << v1 << endl;
Vector3d v2;

輸出的結(jié)果為

-0.708i + 0.05j + 0.002k + 0.704//四元數(shù)
 0.994992 -0.073616  0.067568
-0.067984 -0.002536  0.997064
-0.073232 -0.996664 -0.007528//旋轉(zhuǎn)矩陣
-0.70756i + 0.049969j + 0.00199876k + 0.704437//四元數(shù)
XYZ------------//先轉(zhuǎn)x
 1.56325//x roll
 3.07397//y pitch
-3.06774//z yaw
ZYX------------//先轉(zhuǎn)z
3.07337// z yaw
3.06825//y pitch
1.56324//x roll

可以看到以上兩種旋轉(zhuǎn)順序情況下用eigen庫(kù)自帶的matrix.eulerAngles()函數(shù)會(huì)使得z yaw,y pitch方向上計(jì)算的歐拉角數(shù)值增大,不利于機(jī)器人做角度控制,原本機(jī)器人可能朝反方向轉(zhuǎn)很小的一個(gè)角度,可能現(xiàn)在需要轉(zhuǎn)很大一圈。

用公式推導(dǎo)編寫(xiě)的代碼:

//接著上面代碼段補(bǔ)充運(yùn)行即可
double sy=sqrt(m(0,0) * m(0,0) +  m(0,1) * m(0,1));
        if (sy>0.00001)//判斷萬(wàn)向鎖奇異
        {
            v2(0) = std::atan2(-m(1, 2), m(2, 2));
            v2(1) = std::atan2(m(0, 2), sy);
            v2(2) = std::atan2(-m(0, 1), m(0, 0));
        }
        else//奇異
        {
            v2(0) = 0;
            v2(1) = std::atan2(m(0, 2), sy);
            v2(2) = std::atan2(-m(1, 0), m(2, 0));
        }
cout << "XYZ------------" << endl;
cout << v2 << endl;
        if (sy>0.00001)//判斷萬(wàn)向鎖奇異
        {
            v2(0) = std::atan2(m(2, 1), m(2, 2));
            v2(1) = std::atan2(m(2, 0), sy);
            v2(2) = std::atan2(-m(1, 0), m(0, 0));
        }
        else//奇異
        {
            v2(0) = std::atan2(-m(1, 2), m(1, 1));;
            v2(1) = std::atan2(m(2, 0), sy);
            v2(2) = 0;
        }
cout << "ZYX------------" << endl;
cout << v2 << endl;

輸出結(jié)果:

XYZ------------
 -1.57835//x
0.0676197//y
 0.073852//z
ZYX------------
  -1.57835  //注意這里還是x,與`eigen`庫(kù)自帶的`matrix.eulerAngles()`出來(lái)的順序不一樣
-0.0732686
 0.0682201//注意這里還是z

這里角度明顯小很多,兩種不同的方法的結(jié)果可以通過(guò)加減π得到,但是XYZ、ZYX兩種不同順序下的結(jié)果還不一樣

因此建議直接用公式推導(dǎo)出來(lái)的方法。

到此這篇關(guān)于C++利用eigen庫(kù)實(shí)現(xiàn)求歐拉角的文章就介紹到這了,更多相關(guān)C++求歐拉角內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語(yǔ)言枚舉的使用以及作用

    C語(yǔ)言枚舉的使用以及作用

    這篇文章主要介紹了C語(yǔ)言枚舉的使用以及使用,閱讀下面內(nèi)容我們將掌握枚舉的相關(guān)概念、掌握枚舉的幾種用法、掌握枚舉在實(shí)際產(chǎn)品中的用法,需要的朋友可以參考一下
    2022-03-03
  • C語(yǔ)言/C++如何生成隨機(jī)數(shù)

    C語(yǔ)言/C++如何生成隨機(jī)數(shù)

    這篇文章主要介紹了C語(yǔ)言/C++如何生成隨機(jī)數(shù),C語(yǔ)言/C++產(chǎn)生隨機(jī)數(shù)主要用到的是rand()函數(shù), srand()函數(shù),C語(yǔ)言/C++里沒(méi)有自帶的random(int number)函數(shù),如何解決?感興趣的小伙伴們可以參考一下
    2016-04-04
  • C++ 指向類(lèi)成員的指針

    C++ 指向類(lèi)成員的指針

    指向類(lèi)成員的指針總的來(lái)講可以分為兩大類(lèi)四小類(lèi)(指向數(shù)據(jù)成員還是成員函數(shù),指向普通成員還是靜態(tài)成員)
    2020-03-03
  • C++字符數(shù)組、字符數(shù)組指針和string類(lèi)

    C++字符數(shù)組、字符數(shù)組指針和string類(lèi)

    這篇文章主要介紹了C++字符數(shù)組、字符數(shù)組指針和string類(lèi),string是一個(gè)類(lèi)而不是基本數(shù)據(jù)類(lèi)型,數(shù)組不含有處理函數(shù),下面更多詳細(xì)內(nèi)容,需要的小伙伴可以參考下面文章
    2022-03-03
  • 關(guān)于C語(yǔ)言多線(xiàn)程pthread庫(kù)的相關(guān)函數(shù)說(shuō)明

    關(guān)于C語(yǔ)言多線(xiàn)程pthread庫(kù)的相關(guān)函數(shù)說(shuō)明

    下面小編就為大家?guī)?lái)一篇關(guān)于C語(yǔ)言多線(xiàn)程pthread庫(kù)的相關(guān)函數(shù)說(shuō)明。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-05-05
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易版掃雷游戲

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易版掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)易版掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-05-05
  • 詳解C++ 共享數(shù)據(jù)保護(hù)機(jī)制

    詳解C++ 共享數(shù)據(jù)保護(hù)機(jī)制

    這篇文章主要介紹了詳解C++ 共享數(shù)據(jù)保護(hù)機(jī)制的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用c++,感興趣的朋友可以了解下
    2021-02-02
  • Qt中PaintEvent繪制實(shí)時(shí)波形圖的實(shí)現(xiàn)示例

    Qt中PaintEvent繪制實(shí)時(shí)波形圖的實(shí)現(xiàn)示例

    本文主要介紹了Qt中PaintEvent繪制實(shí)時(shí)波形圖的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的定時(shí)器

    C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的定時(shí)器

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的定時(shí)器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-10-10
  • 基于Windows API分解路徑問(wèn)題的詳解

    基于Windows API分解路徑問(wèn)題的詳解

    本篇文章是對(duì)Windows API分解路徑進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論

安陆市| 通化县| 鹰潭市| 习水县| 博乐市| 邻水| 东源县| 马龙县| 淄博市| 新竹县| 新河县| 大安市| 阿荣旗| 台南县| 金秀| 奉节县| 高阳县| 甘孜县| 志丹县| 修文县| 扎兰屯市| 怀远县| 遂川县| 根河市| 和林格尔县| 七台河市| 长兴县| 墨脱县| 恩施市| 临颍县| 会宁县| 荆州市| 元江| 贞丰县| 行唐县| 隆德县| 滕州市| 东莞市| 汤原县| 海口市| 留坝县|