欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++之eigen安裝與測試方式

 更新時間:2022年12月15日 10:00:32   作者:后廠村路蔡徐坤  
這篇文章主要介紹了C++之eigen安裝與測試方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

C++eigen安裝與測試

1、eigen庫安裝

1)方法一:源碼安裝(推薦)

官網(wǎng)下載、或git下載eigen源碼

cd eigen
mkdir build
cd build
cmake ..
sudo make install
#安裝后,頭文件安裝在/usr/local/include/eigen3/
#移動頭文件
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include

2)方法二:直接安裝(不推薦)

這種方法安裝eigen庫,比較簡單,但是eigen不一定是最新版本。

sudo apt install libeigen3-dev
//若默認安裝的是/usr/local/include/eigen3/Eigen 下,將Eigen文件夾拷貝一份到/usr/local/include 下
sudo cp -r /usr/local/include/eigen3/Eigen /usr/local/include?
sudo cp -r /usr/local/include/eigen3 /usr/include

2、查看eigen的版本號

pkg-config --modversion eigen3

如果可以正確查看版本號,一般說明eigen庫安裝成功

C++ eigen使用

eigen幾何模塊的使用方法

旋轉(zhuǎn)向量 R

利用Eigen::AngleAxisd(參數(shù):角度,軸)得到

//沿 Z 軸旋轉(zhuǎn) 45 度
Eigen::AngleAxisd rotation_vector ( M_PI/4, Eigen::Vector3d ( 0,0,1 ) );?
//由角軸得到旋轉(zhuǎn)變量
Eigen::Matrix3d R = Eigen::AngleAxisd(M_PI/2, Eigen::Vector3d(0,0,1)).toRotationMatrix()

旋轉(zhuǎn)矩陣 Eigen::Matrix3d

//在這里插入代碼片`旋轉(zhuǎn)向量轉(zhuǎn)換到旋轉(zhuǎn)矩陣
?rotation_vector.toRotationMatrix();?

歐拉角

//( 2,1,0 )表示ZYX順序,即roll pitch yaw順序,將旋轉(zhuǎn)矩陣轉(zhuǎn)換到歐拉角
Eigen::Vector3d rotation_matrix.eulerAngles ( 2,1,0 )

四元數(shù)

//定義四元數(shù)
Eigen::Quaterniond q = Eigen::Quaterniond (rotation_vector);
//旋轉(zhuǎn)矩陣定義四元素
q = Eigen::Quaterniond (rotation_matrix);

歐拉角與四元數(shù)相互轉(zhuǎn)換

// 歐拉角轉(zhuǎn)四元數(shù) R-P-Y
Eigen::Vector3d eulerAngle(yaw,pitch,roll);
Eigen::AngleAxisd rollAngle(AngleAxisd(eulerAngle(2),Vector3d::UnitX()));
Eigen::AngleAxisd pitchAngle(AngleAxisd(eulerAngle(1),Vector3d::UnitY()));
Eigen::AngleAxisd yawAngle(AngleAxisd(eulerAngle(0),Vector3d::UnitZ()));
?
Eigen::Quaterniond quaternion;
quaternion=yawAngle*pitchAngle*rollAngle;

//四元數(shù)轉(zhuǎn)歐拉角 R-P-Y
Eigen::Vector3d eulerAngle=quaternion.matrix().eulerAngles(2,1,0);

四元數(shù)、歐拉角轉(zhuǎn)換實例。

以下代碼在歐拉角出現(xiàn)pi/2時,以及大于pi時會出現(xiàn)問題。

#include <iostream>
#include <cmath>
#include <eigen3/Eigen/Core>
#include <eigen3/Eigen/Geometry>

using namespace std;
int main()
{
? ? Eigen::Vector3d eulerAngle(M_PI/3,M_PI/5,M_PI/4);
? ? cout<<"roll(X) pitch(Y) yaw(Z)=\n"<< eulerAngle.transpose()<<endl<<endl;

? ? Eigen::AngleAxisd rollAngle(Eigen::AngleAxisd(eulerAngle(0),Eigen::Vector3d::UnitX()));
? ? Eigen::AngleAxisd pitchAngle(Eigen::AngleAxisd(eulerAngle(1),Eigen::Vector3d::UnitY()));
? ? Eigen::AngleAxisd yawAngle(Eigen::AngleAxisd(eulerAngle(2),Eigen::Vector3d::UnitZ()));

? ? Eigen::Quaterniond quaternion;
? ? quaternion=rollAngle*pitchAngle*yawAngle;
? ? Eigen::Vector3d eulerAngle_1=quaternion.matrix().eulerAngles(0,1,2);?
? ? cout<<"roll(X) pitch(Y) yaw(Z)=\n"<< eulerAngle_1.transpose()<<endl<<endl;?

?? ?//Eigen::Vector3d eulerAngle(roll,pitch,yaw);
?? ?//Eigen::AngleAxisd rollAngle(AngleAxisd(eulerAngle(0),Vector3d::UnitX()));
?? ?//Eigen::AngleAxisd pitchAngle(AngleAxisd(eulerAngle(1),Vector3d::UnitY()));
?? ?//Eigen::AngleAxisd yawAngle(AngleAxisd(eulerAngle(2),Vector3d::UnitZ()));
?? ?//Eigen::Quaterniond quaternion;
?? ?//quaternion=yawAngle*pitchAngle*rollAngle;
?? ?//Eigen::Vector3d eulerAngle=quaternion.matrix().eulerAngles(2,1,0);
?? ?
? ? Eigen::Quaterniond quaternion2(-0.5,0,0,1);?
? ? Eigen::Vector3d eulerAngle_2=quaternion2.matrix().eulerAngles(2,1,0);
? ? cout<<"yaw(Z) pitch(Y) roll(Z)=\n"<< eulerAngle_2.transpose()<<endl<<endl; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??

? ? return 0;
}

g++ test.cpp

tf 實現(xiàn)四元數(shù)到歐拉角轉(zhuǎn)換接口使用及測試

#include <iostream>
#include <tf/transform_datatypes.h>//轉(zhuǎn)換函數(shù)頭文件
#include <nav_msgs/Odometry.h>//里程計信息格式

using namespace std;
int main ()
{
? ? tf::Quaternion quat(0,0,1,-0.5);
? ? double roll, pitch, yaw;//定義存儲r\p\y的容器

? ? tf::Matrix3x3(quat).getRPY(roll, pitch, yaw);//進行轉(zhuǎn)換
? ? cout << "roll:" << roll << "\npitch:" << pitch << "\nyaw:" << yaw << endl;
? ? return 0;
}

直接編譯命令:

g++ `pkg-config --libs --cflags tf` -ldl tf_test.cpp

歐式變換矩陣(其次坐標包含R,t)

//雖然稱為3d(指3維空間的歐式坐標),實質(zhì)上是4*4的矩陣, 旋轉(zhuǎn)R + 平移T
Eigen::Isometry3d T=Eigen::Isometry3d::Identity();
//按照rotation_vector進行旋轉(zhuǎn)
T.rotate (rotation_vector);
//按四元數(shù)表示的旋轉(zhuǎn)
Eigen::Isometry3d T(q);
//把平移向量設(shè)成(1,3,4)
T.pretranslate (Eigen::Vector3d ( 1,3,4 ));?

Eigen::Map 數(shù)組、向量及矩陣的引用。

double parameters[7] = {0, 0, 0, 1, 0, 0, 0};
//quaterd為parameters的引用
Eigen::Map<const Quaterniond> quaterd(parameters[0]);
//同Eigen::Map<const Quaterniond> quaterd(parameters);
//quaterd為parameters[4]的引用,由于元素地址連續(xù)
Eigen::Map<const Eigen::Vector3d> trans(parameters[0] + 4);
//同Eigen::Map<const Eigen::Vector3d> trans(parameters + 4);

引用:類似于變量的別名,一旦指定,不可改變,與變量值綁定

指針:指針存放變量的地址??筛?/p>

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • C語言編程PAT乙級學習筆記示例分享

    C語言編程PAT乙級學習筆記示例分享

    這篇文章主要為大家介紹了C語言編程PAT乙級學習筆記實現(xiàn)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • C++中perror和fprintf區(qū)別解析

    C++中perror和fprintf區(qū)別解析

    本文主要對比了C語言中的兩個函數(shù)perror和fprintf的區(qū)別,perror主要用于輸出與系統(tǒng)錯誤相關(guān)的消息,根據(jù)全局變量errno的值生成錯誤信息,而fprintf則用于格式化輸出任意類型的信息到指定的文件流
    2024-10-10
  • 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-用棧實現(xiàn)表達式求值的方法詳解

    數(shù)據(jù)結(jié)構(gòu)課程設(shè)計-用棧實現(xiàn)表達式求值的方法詳解

    本篇文章是對在c語言中用棧實現(xiàn)表達式求值的方法進行了詳細的分析介紹,需要的朋友參考下
    2013-05-05
  • C語言struct結(jié)構(gòu)體介紹

    C語言struct結(jié)構(gòu)體介紹

    C語言中,結(jié)構(gòu)體類型屬于一種構(gòu)造類型(其他的構(gòu)造類型還有:數(shù)組類型,聯(lián)合類型),下面這篇文章主要給大家介紹了關(guān)于C語言結(jié)構(gòu)體(struct)的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-09-09
  • 獲取當前系統(tǒng)本地時間,精確到毫秒的實例

    獲取當前系統(tǒng)本地時間,精確到毫秒的實例

    下面小編就為大家?guī)硪黄@取當前系統(tǒng)本地時間,精確到毫秒的實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-11-11
  • VS2019使用Windows桌面應(yīng)用程序模塊創(chuàng)建Win32窗口

    VS2019使用Windows桌面應(yīng)用程序模塊創(chuàng)建Win32窗口

    這篇文章主要介紹了VS2019使用Windows桌面應(yīng)用程序模塊創(chuàng)建Win32窗口,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-04-04
  • C++面試八股文之了解auto關(guān)鍵字

    C++面試八股文之了解auto關(guān)鍵字

    這篇文章主要為大家介紹了C++面試八股文之了解auto關(guān)鍵字問題解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-06-06
  • C++第三方庫jsoncpp超詳細講解

    C++第三方庫jsoncpp超詳細講解

    這篇文章主要介紹了C++第三方庫jsoncpp的相關(guān)資料,JSONcpp是一個在C++中用于處理JSON數(shù)據(jù)的庫,支持JSON格式的序列化和反序列化,通過JSONcpp,可以輕松地將數(shù)據(jù)對象組織成JSON格式的字符串,需要的朋友可以參考下
    2024-10-10
  • C++實現(xiàn)LeetCode(74.搜索一個二維矩陣)

    C++實現(xiàn)LeetCode(74.搜索一個二維矩陣)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(74.搜索一個二維矩陣),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • 用位圖排序無重復(fù)數(shù)據(jù)集實例代碼(C++版)

    用位圖排序無重復(fù)數(shù)據(jù)集實例代碼(C++版)

    本文講解如何用位圖排序無重復(fù)的數(shù)據(jù)集,我們使用C++實現(xiàn)一下這個方法
    2013-11-11

最新評論