【學習筆記】Sophus (Python) 使用文檔

以下是一份針對 Sophus 庫的 Python 使用文檔,涵蓋基礎概念、安裝方法、核心功能及代碼示例。內容圍繞 SO3(3D旋轉群)和 SE3(3D剛體變換群)展開,適合機器人學、SLAM、三維幾何等領域。


Sophus (Python) 使用文檔

目錄

  1. Sophus 簡介
  2. 安裝方法
  3. 核心對象與操作
    • SO3:3D旋轉群
    • SE3:3D剛體變換群
  4. 常用功能與示例
    • 創建旋轉/變換對象
    • 轉換不同表示形式
    • 位姿插值(Slerp/Lerp)
    • 李代數與指數映射
    • 逆變換與組合變換
  5. 注意事項
  6. 完整代碼示例

1. Sophus 簡介

Sophus 是一個用于處理 李群(Lie Groups) 的C++/Python庫,支持 SO2/SE2(2D旋轉/變換)和 SO3/SE3(3D旋轉/變換)。

  • 核心功能
    • 旋轉與變換的表示(四元數、旋轉矩陣、軸角、李代數等)
    • 李群與李代數的相互轉換(指數/對數映射)
    • 位姿插值(Slerp)、逆變換、組合變換
  • 適用場景:機器人運動學、SLAM、三維重建、姿態估計等。

2. 安裝方法

通過 pip 安裝 Sophus 的 Python 綁定(需提前安裝 Eigen 庫):

pip install sophus

3. 核心對象與操作

3.1 SO3 (3D旋轉群)

表示三維空間中的旋轉,支持四元數、旋轉矩陣、軸角等表示形式。

創建 SO3對象
from sophus.so3 import SO3
import numpy as np# 從四元數創建 (w, x, y, z 順序)
q = np.array([0.707, 0.0, 0.707, 0.0])  # 繞x軸旋轉90度
so3_quat = SO3(q)# 從旋轉矩陣創建
R = np.eye(3)
so3_rotmat = SO3.from_matrix(R)# 從軸角創建 (旋轉向量,模長為旋轉角度)
axis_angle = np.array([0, 0, np.pi/2])  # 繞z軸旋轉90度
so3_axis_angle = SO3.exp(axis_angle)
轉換表示形式
# 轉為四元數 [w, x, y, z]
q = so3_axis_angle.quaternion()# 轉為旋轉矩陣 (3x3)
R = so3_axis_angle.matrix()# 轉為軸角(李代數)
log = so3_axis_angle.log()  # 返回旋轉向量

3.2 SE3 (3D剛體變換群)

表示三維空間中的剛體變換(旋轉 + 平移),由 SO3 和 平移向量組成。

創建 SE3 對象
from sophus.se3 import SE3# 從旋轉矩陣 + 平移向量創建
R = np.eye(3)
t = np.array([1.0, 2.0, 3.0])
se3_rotmat = SE3(R, t)# 從四元數 + 平移向量創建
q = np.array([0.707, 0.0, 0.707, 0.0])  # 繞x軸旋轉90度
se3_quat = SE3(SO3(q), t)# 從變換矩陣 (4x4) 創建
T = np.eye(4)
T[:3, :3] = R
T[:3, 3] = t
se3_matrix = SE3.from_matrix(T)
轉換表示形式
# 獲取旋轉部分 (SO3)
so3_part = se3_matrix.so3()# 獲取平移部分 (3x1)
t_part = se3_matrix.translation()# 轉為變換矩陣 (4x4)
T = se3_matrix.matrix()

4. 常用功能與示例

4.1 位姿插值(Slerp + Lerp)

SE3 中插值旋轉(Slerp)和平移(Lerp):

def interpolate_se3(pose1, pose2, t):""" SE3 插值:旋轉用 Slerp,平移用 Lerp """se3_1 = SE3.from_matrix(pose1)se3_2 = SE3.from_matrix(pose2)# 旋轉插值 (SO3)so3_interp = SO3.slerp(se3_1.so3(), se3_2.so3(), t)# 平移插值 (Lerp)t_interp = (1 - t) * se3_1.translation() + t * se3_2.translation()return SE3(so3_interp, t_interp).matrix()# 示例:從 pose1 到 pose2 的中間位姿
pose_mid = interpolate_se3(pose1, pose2, 0.5)

4.2 李代數與指數映射

# 從李代數生成 SE3
se3 = SE3.exp(np.array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6]))  # 前3維平移,后3維旋轉# 從 SE3 提取李代數
lie_alg = se3.log()  # 6維向量 [t_x, t_y, t_z, ω_x, ω_y, ω_z]

4.3 逆變換與組合變換

# 逆變換
se3_inv = se3.inverse()# 組合變換:se3_new = se3_a * se3_b
se3_new = se3_a * se3_b

5. 注意事項

  1. 四元數順序:Sophus 使用 [w, x, y, z] 順序,與其他庫(如PyTorch3D的xyzw)可能不同。
  2. 版本兼容性:Python 版 Sophus 功能可能比 C++ 版少,建議參考官方文檔。
  3. 性能問題:Python 接口適合原型設計,性能關鍵場景建議使用 C++。

6. 完整代碼示例

import numpy as np
from sophus.so3 import SO3
from sophus.se3 import SE3# 創建兩個 SE3 位姿
pose1 = SE3(SO3.exp([0, 0, 0]), np.array([1, 2, 3]))
pose2 = SE3(SO3.exp([0, 0, np.pi/2]), np.array([4, 5, 6]))# 插值
pose_mid = interpolate_se3(pose1.matrix(), pose2.matrix(), 0.5)
print("插值后的變換矩陣:\n", pose_mid)# 計算相對變換
relative_pose = pose1.inverse() * pose2
print("相對變換的李代數:\n", relative_pose.log())

通過本文檔,您可快速掌握 Sophus 庫的核心功能,實現三維空間中的旋轉、變換及插值操作。建議結合 Sophus 官方 GitHub 深入探索高級功能。

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

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

相關文章

計算機圖形學:(三)MVP變換擴展

Three.js WebGL允許把JavaScript和OpenGL 結合在一起運用,但使用WebGL原生的API來寫3D程序非常的復雜,同時需要相對較多的數學知識,對于前端開發者來說學習成本非常高。 Three.js是基于webGL的封裝的一個易于使用且輕量級的3D庫,T…

MySQL數據庫操作合集

一、SQL通用語法 ①SQL語句可以單行或多行書寫,以分號結尾。 ②SQL語句可以使用空格/縮進來增強語句可讀性。 ③MySQL數據庫的SQL語句不區分大小寫,關鍵字建議使用大寫。 ④注釋: 單行注釋: -- 注釋內容 或 # 注釋內容&#…

傳統工程項目管理與業財一體化管理的區別?

在工程項目管理領域,傳統管理模式與新興的業財一體化管理模式正在形成鮮明對比。隨著數字化轉型的加速,工程行業對高效、透明、協同的管理需求日益迫切。傳統工程項目管理依賴人工操作、分散系統和分模塊管理,難以應對復雜項目的全生命周期需…

敦煌網測評從環境搭建到風控應對,精細化運營打造安全測評體系

自養號測評,搶占流量為快速提升產品權重和銷量,很多賣家常采用自己養號補單測評的方式,技術搭建需要很多要素 一、硬件參數的關聯性 在我們使用設備進行注冊或操作賬號的過程中,系統會記錄下大量的系統與網絡參數,其中…

redis Pub/Sub 簡介 -16 (PUBLISH、SUBSCRIBE、PSUBSCRIBE)

Redis Pub/Sub 簡介:PUBLISH、SUBSCRIBE、PSUBSCRIBE Redis Pub/Sub 是一種強大的消息傳遞范例,可在應用程序的不同部分之間實現實時通信。它是構建可擴展和響應式系統的基石,允許組件在沒有直接依賴的情況下進行交互。本章將全面介紹 Redis…

JavaSE核心知識點03高級特性03-01(集合框架)

🤟致敬讀者 🟩感謝閱讀🟦笑口常開🟪生日快樂?早點睡覺 📘博主相關 🟧博主信息🟨博客首頁🟫專欄推薦🟥活動信息 文章目錄 JavaSE核心知識點03高級特性03-01&#xff0…

日志分析-IIS日志分析

環境準備 https://xj.edisec.net/challenges/115 題目要求 windows系統中才有的IIS服務 既然是windows平臺,當然需要rdp登錄,在ssh登錄失敗 解題過程 phpstudy--2018站點日志.(.log文件)所在路徑,提供絕對路徑 Windows服務的日志一般有固定…

一、web安全基礎入門

1、Windows命令 文件和目錄操作 dir:列出當前目錄下的文件和子目錄。cd:切換目錄,例如 cd C:\Users 切換到C盤的Users目錄。md 或 mkdir:創建新目錄,如 md testdir。rd 或 rmdir:刪除空目錄,例…

動態規劃應用場景 + 代表題目清單(模板加上套路加上題單)

1. 序列型DP(Sequence DP) ? 應用場景 單個或多個序列(數組/字符串),求最優子結構。 常見問題:最長遞增子序列、最長公共子序列、回文子序列。 🧠 套路總結 單序列:dp[i] max(…

Linux iSCSI存儲共享實驗指南

實驗介紹 1、在Linux平臺上通過iSCSI協議實現IP-SAN存儲共享 2、掌握存儲導出(export)和存儲導入(import)的配置方法 3、學習iSCSI存儲的發現、連接、斷開和管理操作 1、實驗環境 兩臺同網段的Linux虛擬機(無需物理交換機) 操作系統:Lin…

從 Docker 到 runC

從 Docker 到 runC:容器底層原理詳解 目錄 1. Docker 與 runC 的關系 2. Docker 的核心組件 3. runC 的核心功能 4. 實戰示例:從 Docker 到 runC 4.1 示例場景:運行一個簡單容器 4.2 Docker 底層調用 runC 的流程 4.3 查看 runC 的調用 4.4 直接調用 runC 創建容器 …

使用Python在PowerPoint中插入形狀(Shape)

在進行演示文稿設計時,形狀(Shape)不僅可以增強視覺效果,還可以用于展示流程圖、標注、數據圖示等。借助Python,我們可以通過代碼快速批量地在PPT中添加各種形狀,提升設計效率。本文將介紹如何使用Python向…

Windows系統下MySQL 8.4.5壓縮包安裝詳細教程

一、MySQL 8.4.5新特性概覽 相較于舊版本,MySQL 8.4.5在性能與功能上實現了顯著提升: 性能優化:官方測試顯示,在高并發場景下,其讀寫性能較5.7版本提升近2倍,尤其在處理熱點數據競爭問題時表現更為出色。…

深度解析Vue項目Webpack打包分包策略 從基礎配置到高級優化,全面掌握性能優化核心技巧

深度解析Vue項目Webpack打包分包策略 從基礎配置到高級優化,全面掌握性能優化核心技巧 一、分包核心價值與基本原理 1.1 為什么需要分包 首屏加載優化:減少主包體積,提升TTI(Time to Interactive)緩存利用率提升&am…

【昇騰開發者訓練營:Dify大模型部署實戰】MindIE + Dify + DeepSeek + Embedding模型 + Rerank模型

文章目錄 部署 Dify1. Dify 適配 ARM2. 安裝 docker3. 啟動 Dify MindIEDify 實操手冊1. 基礎環境搭建1.1 環境檢查1.2 下載模型權重1.3 獲取MindIE鏡像 2. 啟動容器3. 純模型推理測試3.1 純模型對話測試3.2 性能測試 4. 服務化部署4.1 MindIE 配置4.2 MindIE 服務化4.3 發起測…

塔能高溫冰蓄冷技術:工廠能耗精準節能的創新之路

在工廠的能耗構成中,制冷系統是重要的耗能環節。傳統的水蓄冷和冰蓄冷技術在實際應用中存在一些局限性,難以滿足工廠對節能和成本控制的更高要求。塔能科技的高溫冰蓄冷技術,憑借其獨特的優勢,為工廠能耗精準節能提供了創新的解決…

通過現代數學語言重構《道德經》核心概念體系,形成一個兼具形式化與啟發性的理論框架

以下是對《道德經》的數學轉述嘗試,通過現代數學語言重構其核心概念,形成一個兼具形式化與啟發性的理論框架: 0. 基礎公理體系 定義: 《道德經》是一個動態宇宙模型 U(D,V,Φ),其中: D 為“道”的無限維…

SQLMesh Typed Macros:讓SQL宏更強大、更安全、更易維護

在SQL開發中,宏(Macros)是一種強大的工具,可以封裝重復邏輯,提高代碼復用性。然而,傳統的SQL宏往往缺乏類型安全,容易導致運行時錯誤,且難以維護。SQLMesh 引入了 Typed Macros&…

5月23日day34打卡

GPU訓練及類的call方法 知識點回歸: CPU性能的查看:看架構代際、核心數、線程數GPU性能的查看:看顯存、看級別、看架構代際GPU訓練的方法:數據和模型移動到GPU device上類的call方法:為什么定義前向傳播時可以直接寫作…

集群、容器云與裸金屬服務器的全面對比分析

文章目錄 引言 集群 2.1 定義 2.2 特點 2.3 應用場景 容器云 3.1 定義 3.2 核心功能 3.3 應用場景 裸金屬 4.1 定義 4.2 特點 4.3 應用場景 三者的區別 5.1 架構與性能 5.2 管理與運維 5.3 成本與靈活性 總結 1. 引言 在云計算和數據中心領域,50…