從零開始學習Slam-旋轉矩陣旋轉向量四元組(二)

本文參考:計算機視覺life 僅作筆記用
書接上回,上回不清不楚的介紹了旋轉矩陣&旋轉向量和四元組
現在回顧一下重點:
本著繞誰誰不變的變則
假設繞z軸旋轉θ,旋轉矩陣為:
在這里插入圖片描述
再回顧一下旋轉向量的表示以及這個基本記不住的羅德里格斯公式,記不住也沒事:
在這里插入圖片描述

一個例子

已知旋轉矩陣定義是沿著Z軸旋轉45°。請按照該定義初始化旋轉向量、旋轉矩陣、四元數、歐拉角。請編程實現:

1、以上四種表達方式的相互轉換關系并輸出,并參考給出的結果驗證是否正確。

2、假設平移向量為(1,2,3),請輸出旋轉矩陣和該平移矩陣構成的歐式變換矩陣,并根據歐式變換矩陣提取旋轉向量及平移向量。

#include <iostream>
#include <Eigen/Dense>using namespace Eigen;int main() {// 初始化旋轉參數double angle = M_PI/4; // 45°轉換為弧度Vector3d axis = Vector3d::UnitZ(); // Z軸// 初始化旋轉向量Vector3d rotation_vector = angle * axis;// 初始化旋轉矩陣Matrix3d rotation_matrix;// AngleAxisd(angle, axis) 創建了一個表示繞著給定軸 axis 旋轉 angle 弧度的旋轉向量。//在Eigen庫中,AngleAxisd 類表示一個旋轉向量,它由一個旋轉軸和一個旋轉角度組成。//它的構造函數可以接受旋轉角度和旋轉軸作為參數,也可以接受一個旋轉矩陣作為參數,并從中提取旋轉軸和旋轉角度。//調用 toRotationMatrix() 方法將該旋轉向量轉換為對應的旋轉矩陣。rotation_matrix = AngleAxisd(angle, axis).toRotationMatrix();// 初始化四元數Quaterniond quaternion(rotation_matrix);// 初始化歐拉角Vector3d euler_angles = rotation_matrix.eulerAngles(2, 1, 0); // ZYX順序// 輸出四種表達方式 // 旋轉向量std::cout << "Rotation Vector: " << rotation_vector.transpose() << std::endl;  // .transpose()方法被用于將向量和矩陣輸出成為行向量的形式,以方便顯示在控制臺上。// 旋轉矩陣std::cout << "Rotation Matrix:\n" << rotation_matrix << std::endl;// coeffs()方法用于獲取四元數對象的系數,返回一個四維向量。std::cout << "Quaternion: " << quaternion.coeffs()<< std::endl;// 歐拉角std::cout << "Euler Angles (ZYX): " << euler_angles.transpose() << std::endl;// 假設平移向量為(1,2,3)Vector3d translation_vector(1, 2, 3);// 構造歐式變換矩陣Matrix4d euclidean_transform_matrix = Matrix4d::Identity();  // 創建一個4x4的單位矩陣的靜態方法// 將旋轉矩陣賦值給歐幾里德變換矩陣的左上角的3x3子矩陣,即旋轉部分euclidean_transform_matrix.block<3,3>(0,0) = rotation_matrix;// 將平移向量賦值給歐幾里德變換矩陣的右上角的3x1子矩陣,即平移部分euclidean_transform_matrix.block<3,1>(0,3) = translation_vector;/* 在Eigen庫中,AngleAxisd()是用于創建一個旋轉向量(Angle-Axis)的構造函數。Angle-Axis旋轉表示通過一個旋轉軸和一個旋轉角度來描述旋轉。具體來說,AngleAxisd()的使用方法如下Eigen::AngleAxisd angle_axis(angle, axis);在這段代碼中,AngleAxisd(rotation_matrix)創建了一個AngleAxisd類型的對象,該對象代表了由旋轉矩陣rotation_matrix表示的旋轉。然后,.axis()方法用于獲取該旋轉向量的旋轉軸,而.angle()方法用于獲取旋轉角度。接著,AngleAxisd(rotation_matrix).axis() * AngleAxisd(rotation_matrix).angle()部分將旋轉向量的軸乘以旋轉角度,這將得到一個旋轉向量,其方向由旋轉軸決定,大小由旋轉角度決定。這個旋轉向量被賦值給了extracted_rotation_vector。*/// 從歐式變換矩陣分解出旋轉向量和平移向量Vector3d extracted_rotation_vector = AngleAxisd(rotation_matrix).axis() * AngleAxisd(rotation_matrix).angle();/* block<3,1>(0,3)是Eigen庫中的一個函數,用于從矩陣中提取特定的塊。在這里,block<3,1>(0,3)表示提取了從第0行開始,第3列開始的一個3x1的塊,即歐氏變換矩陣的前三個元素(0, 1, 2行,3列),這通常是表示平移向量的部分。*/ Vector3d extracted_translation_vector = euclidean_transform_matrix.block<3,1>(0,3);// 輸出歐式變換矩陣、提取的旋轉向量和平移向量// 歐式變換矩陣std::cout << "\nEuclidean Transformation Matrix:\n" << euclidean_transform_matrix << std::endl;// 旋轉向量std::cout << "Extracted Rotation Vector: " << extracted_rotation_vector.transpose() << std::endl;// 平移向量std::cout << "Extracted Translation Vector: " << extracted_translation_vector.transpose() << std::endl;return 0;
}

多看幾遍代碼,俺就算基本入第一道門了。。。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/19738.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/19738.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/19738.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringCloud如何實現SSO單點登錄?

目錄 一、SpringCloud框架介紹 二、什么是SSO單點登錄 三、單點登錄的必要性 四、SpringCloud如何實現SSO單點登錄 一、SpringCloud框架介紹 Spring Cloud是一個基于Spring Boot的微服務架構開發工具集&#xff0c;它整合了多種微服務解決方案&#xff0c;如服務發現、配置…

SpringSecurity6從入門到實戰之Filter過濾器回顧

SpringSecurity6從入門到實戰之Filter過濾器回顧 如果沒有SpringSecurity這個框架,我們應該通過什么去實現客戶端向服務端發送請求時,先檢查用戶是否登錄,登錄了才能訪問.否則重定向到登錄頁面 流程圖如下 官方文檔&#xff1a;https://docs.spring.io/spring-security/referen…

Ubuntu (18.04) _Mysql (8.0.X)設置密碼強度

首先 查看是否有密碼強度插件&#xff1a; SHOW PLUGINS; 如果沒有&#xff0c;則安裝 install plugin validate_password soname validate_password.so; 再次查看,會看到密碼強度插件已開 其次 查看密碼強度具體配置 show variables like validate_password%; validate…

【C++】【VScode】常用快捷鍵

在Visual Studio Code (VSCode) 中&#xff0c;有幾個快捷鍵可以幫助你更高效地編寫C代碼&#xff0c;特別是與代碼提示、自動完成等功能相關的快捷鍵。這些功能大多數依賴于安裝和配置好的C/C擴展&#xff08;通常是由Microsoft提供的&#xff09;。以下是幾個有助于代碼提示和…

echart擴展插件詞云echarts-wordcloud

echart擴展插件詞云echarts-wordcloud 一、效果圖二、主要代碼 一、效果圖 二、主要代碼 // 安裝插件 npm i echarts-wordcloud -Simport * as echarts from echarts; import echarts-wordcloud; //下載插件echarts-wordcloud import wordcloudBg from /components/wordcloudB…

uniapp實現圖片上傳——支持APP、微信小程序

uniapp實現圖片、視頻上傳 文章目錄 uniapp實現圖片、視頻上傳效果圖組件templatejs 使用 相關文檔&#xff1a; 結合 uView 插件 uni.uploadFile 實現 u-upload uploadfile 效果圖 組件 簡單封裝&#xff0c;還有很多屬性…&#xff0c;自定義樣式等…根據個人所需調整 te…

Nginx在Docker中的應用:容器化部署與擴展

在當今的云計算和微服務時代&#xff0c;Docker容器技術因其輕量級、可移植性和可擴展性而受到廣泛關注。Nginx&#xff0c;作為一個高性能的HTTP和反向代理服務器&#xff0c;也在Docker中找到了其廣泛的應用場景。本文將探討Nginx在Docker中的容器化部署和擴展策略&#xff0…

16:00面試,16:08就出來了,問的問題有點變態。。。

從小廠出來&#xff0c;沒想到在另一家公司又寄了。 到這家公司開始上班&#xff0c;加班是每天必不可少的&#xff0c;看在錢給的比較多的份上&#xff0c;就不太計較了。沒想到8月一紙通知&#xff0c;所有人不準加班&#xff0c;加班費不僅沒有了&#xff0c;薪資還要降40%…

【C語言】常見的動態內存的錯誤

前言 在動態內存函數的使用過程中我們可能會遇到一些錯誤&#xff0c;這里將常見的錯誤進行總結。 對NULL解引用 請看以下代碼&#xff1a; 可以看到&#xff0c;這時我們的malloc開辟是失敗的&#xff0c;所以返回的是空指針NULL&#xff0c;而我們卻沒有進行檢查&#xff0…

推薦:4本易發表的優質SSCI期刊,含期刊官網!

01、Risk Management and Healthcare Policy 開源四區&#xff0c;國人發表占比25%&#xff0c;發表量前三的國家分別是中國、埃塞俄比亞和美國。 該期刊對國人友好&#xff0c;年度發文量400多&#xff0c;影響因子3.6。 主要刊發公共衛生相關的文章。 研究者可以圍繞居民…

【C++ C#】 C++ 和C# 的混合項目,C++ 文件中有多個 函數和變量 定義了未使用,會影響程序正常執速度嗎?

文章目錄 1 未使用的函數和變量 是否會影響速度分析1.1 C 未使用的函數和變量&#xff1a;1.2 C# 未使用的函數和變量&#xff1a; 2 影響程序執行速度的其他因素3 如何處理未使用的代碼 一個 C 和C# 的混合項目&#xff0c;C 文件中有多個 函數和變量 定義了未使用&#xff0c…

推薦系統三十六式學習筆記:01|你真的需要個性化推薦系統嗎?

目錄 什么是推薦系統你需要推薦系統嗎總結 什么是推薦系統 讓我們來換一個角度回答三個問題&#xff0c;從而重新定義什么是推薦系統: 1、它能做什么&#xff1f; 2、它需要什么&#xff1f; 3、它怎么做。 對于第一個問題“它能做什么”&#xff0c;我的回答是&#xff1a;推…

2020年CSP-J入門級第一輪初賽真題

一、選擇題 在內存儲器中每個存儲單元都被賦予一個唯一的序號&#xff0c;稱為&#xff08;&#xff09;。 A.地址 B. 序號 C. 下標 D. 編號 答案&#xff1a;A. 地址 在內存儲器中&#xff0c;每個存儲單元都有一個唯一的標識&#xff0c;用于區分和訪問不同的存儲單元。這個唯…

說說你對單例模式的理解?如何實現?

一、是什么 單例模式&#xff08;Singleton Pattern&#xff09;&#xff1a;創建型模式&#xff0c;提供了一種創建對象的最佳方式&#xff0c;這種模式涉及到一個單一的類&#xff0c;該類負責創建自己的對象&#xff0c;同時確保只有單個對象被創建 在應用程序運行期間&am…

day23--單元測試-反射-注解-動態代理

day23-單元測試、反射 恭喜同學們&#xff0c;Java主要的知識我們其實已經學習得差不多了。今天同學們再把單元測試、反射、注解、動態代理學習完。Java的基礎知識就算全齊活了。 首先&#xff0c;我們進入單元測試的學習。 一、單元測試 1.1 單元測試快速入門 所謂單元測…

北斗消防系統實現林海無信號應急通信,高效防災救災開拓應急救援新通道

最近&#xff0c;貴州多地爆發的重大山火&#xff0c;火勢 21日這12天里&#xff0c;貴州發生森林火情221起&#xff0c;當地包括武警、消防、專業救援隊伍等在內的9千多人連續撲救&#xff0c;1.5萬名基層黨員干部、民兵、群眾及志愿者協助救火。目前&#xff0c;貴州全省火災…

OSPF狀態機+SPF算法

OSPF狀態機 1.點到點網絡類型 down-->init-->(前提為可以建立鄰接)exstart——>exchange-->若查看鄰接的DBD 目錄后發現不用進行LSA 直接進入ful。若查看后需要進行查詢、應答先進入loading&#xff0c;在查詢應答完后再進入 fuIl: 2.MA網絡類型 down --&g…

【計算機網絡】——概述(圖文并茂)

概述 一.信息時代的計算機網絡二.互聯網概述1.網絡&#xff0c;互連網&#xff0c;互聯網&#xff08;因特網&#xff09;1.網絡2.互連網3.互聯網&#xff08;因特網&#xff09; 2.互聯網簡介1.互聯網發展的三個階段2.互聯網服務提供者&#xff08;ISP&#xff09;3.互聯網的組…

HTTP/超文本傳輸協議(Hypertext Transfer Protocol)及HTTP協議通信步驟介紹和請求、響應階段詳解;

目錄 一、HTTP/超文本傳輸協議 特點和功能 請求-響應模型 版本和擴展 安全性和加密 二、HTTP協議通信步驟介紹 三、請求、響應階段詳解 HTTP請求 HTTP響應 示例 一、HTTP/超文本傳輸協議 HTTP/超文本傳輸協議&#xff08;Hypertext Transfer Protocol&#xff09;是…

淺談人機交互

人機交互&#xff08;Human-Computer Interaction&#xff0c;HCI&#xff09;&#xff0c;是指關于設計、評價和實現供人們使用的交互式計算機系統&#xff0c;并圍繞相關的主要現象進行研究。 狹義的講&#xff0c;人機交互技術主要是研究人與計算機之間的信息交換&#xff0…