当前位置: 首页 > article >正文

【学习笔记】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 深入探索高级功能。

相关文章:

【学习笔记】Sophus (Python) 使用文档

以下是一份针对 Sophus 库的 Python 使用文档,涵盖基础概念、安装方法、核心功能及代码示例。内容围绕 SO3(3D旋转群)和 SE3(3D刚体变换群)展开,适合机器人学、SLAM、三维几何等领域。 Sophus (Python) 使用…...

常见算法题目2 - 给定一个字符串,找出其中最长的不重复子串

算法题目2 - 给定一个字符串,找出其中最长的不重复子串 1. 问题描述 给定一个字符串,输出其最长的不重复子串,例如: String str "ababc"; 输出: abc以下根据两种搜索算法。 2. 算法解决 2.1 暴力循环法…...

如何配置jmeter做分布式压测

问:为何需要做分布式 答:当我们本地机器jmeter进行压测时,单台JMeter机器通常无法稳定生成2000 QPS(受限于CPU、内存、网络带宽),本地端口耗尽:操作系统可用的临时端口(Ephemeral P…...

Django 中的 ORM 基础语法

深入剖析 Django 中的 ORM 语法:从基础到实战进阶 在 Django 开发领域,ORM(对象关系映射)是开发者高效操作数据库的得力工具。它以简洁直观的 Python 代码,替代繁琐的 SQL 语句,极大提升了开发效率。本文将…...

C#对象初始化语句:优雅创建对象的黑科技

📌 核心概念速览 对象初始化语句(Object Initializer)是C#中一种简洁高效的语法糖,允许在创建对象时直接初始化其公有字段或属性,无需依赖构造函数的重载。它的本质是对构造过程的扩展,尤其适合需要灵活设…...

【计算机网络】TCP如何保障传输可靠性_笔记

文章目录 一、传输可靠性的6方面保障二、分段机制三、超时重传机制四、流量控制五、拥塞控制 提示:以下是本篇文章正文内容,下面案例可供参考 源网站 按TCP/IP 4层体系,TCP位于传输层,为应用层提供服务 一、传输可靠性的6方面保障…...

Robust Kernel Estimation with Outliers Handling for Image Deblurring论文阅读

Robust Kernel Estimation with Outliers Handling for Image Deblurring 1. 论文的研究目标与实际问题意义1.1 研究目标1.2 实际问题与产业意义2. 论文的创新方法、模型与优势2.1 核心思路2.2 关键公式与技术细节2.2.1 非线性模糊模型与能量函数2.2.2 中间潜像更新与IRLS2.2.3…...

Android Studio 开发环境兼容性检索(AGP / Gradle / Kotlin / JDK)

本表检索了 Android 项目中常用构建工具的兼容性关系,包括: AGP(Android Gradle Plugin)Gradle(构建工具)KGP(Kotlin Gradle Plugin)JDK(Java Development Kit&#xff…...

html主题切换小demo

主题切换功能为网页和应用程序提供了多样化的视觉风格与使用体验。实现多主题切换的技术方案丰富多样&#xff0c;其中 CSS 变量和 JavaScript 样式控制是较为常见的实现方式。 以下是一个简洁的多主题切换示例&#xff0c;愿它能为您的编程之旅增添一份趣味。 代码展示 <…...

AI架构职责分配——支持AI模块的职责边界设计

职责分配——支持AI模块的职责边界设计 在传统系统中&#xff0c;职责分配通常围绕“控制层处理逻辑、服务层执行业务、数据层持久化”进行划分。这种分工逻辑在纯业务系统中足以支撑高效协作与系统演进。然而&#xff0c;随着AI模块的引入&#xff0c;系统中新增了如模型推理…...

git@gitee.com: Permission denied (publickey). fatal: 无法读取远程仓库

错误信息&#xff1a; gitgitee.com: Permission denied (publickey). fatal: 无法读取远程仓库。 &#xfffc; &#xfffc;说明 Git 无法通过 SSH 密钥成功连接到 Gitee&#xff08;码云&#xff09;仓库。这通常是由于 SSH 密钥未正确配置或未添加到 Gitee 账户所致。 &am…...

CARIS HIPS and SIPS 12.1是专业的多波束水深数据和声呐图像处理软件

CARIS HIPS 和 SIPS 是一套综合水文处理软件&#xff0c;主要用于海洋水道处理和测量领域‌。该软件集成了测深、水柱和海底图像处理功能&#xff0c;能够提高业务处理的精确度和效率‌。 主要功能和应用场景 ‌测深数据处理‌&#xff1a;HIPS主要用于处理大型测深数据。 ‌…...

Docker端口映射与容器互联

Docker端口映射与容器互联 1. 端口映射实现容器访问 1.1 从外部访问容器应用 # 基础端口映射语法 docker run -d -p [宿主机端口]:[容器端口] [镜像名称]# 示例&#xff1a;容器80端口→宿主机8080 docker run -d -p 8080:80 nginx1.2 高级映射配置 映射类型命令示例说明文档…...

在 Ubuntu 24.04 LTS 上 Docker 部署 DB-GPT

一、DB-GPT 简介 DB-GPT 是一个开源的AI原生数据应用开发框架(AI Native Data App Development framework with AWEL(Agentic Workflow Expression Language) and Agents)。目的是构建大模型领域的基础设施&#xff0c;通过开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及…...

使用 Docker 搭建 PyWPS 2.0 服务全流程详解

使用 Docker 搭建 PyWPS 2.0 服务全流程详解 近年来&#xff0c;随着地理信息系统&#xff08;GIS&#xff09;和在线空间分析服务的兴起&#xff0c;OGC标准下的Web Processing Service&#xff08;WPS&#xff09;逐渐成为地理数据服务的重要组件。PyWPS 是一个基于 Python …...

Axure高保真CRM客户关系管理系统原型

一套出色的CRM&#xff08;客户关系管理&#xff09;系统&#xff0c;无疑是企业管理者掌控客户动态、提升销售业绩的得力助手。今天&#xff0c;就为大家介绍一款精心打造的Axure高保真CRM客户关系管理系统原型模板&#xff0c;助你轻松开启高效客户管理之旅。 这款CRM原型模…...

自学嵌入式 day 23 - 数据结构 树状结构 哈希表

一、树状结构 1.特征&#xff1a;在任意一个非空树中&#xff0c; &#xff08;1&#xff09;&#xff0c;有且仅有一个特定的根结点 &#xff08;2&#xff09;&#xff0c;当n>1 时&#xff0c;其余结点可分为m个互不相交的有限集合T1,T2,T3.。。。。Tm&…...

JavaScript进阶(十二)

第三部分:JavaScript进阶 目录 第三部分:JavaScript进阶 十二、深浅拷贝 12.1 浅拷贝 12.2 深拷贝 1. 通过递归实现深拷贝 2. js库lodash里面cloneDeep内部实现了深拷贝 3. 通过JSON.stringify()实现 十三、异常处理 13.1 throw抛异常 13.2 try /catch捕获异常 1…...

Honeywell CV-DINA-DI1624-2A 数字输入模块

概述 型号&#xff1a;CV-DINA-DI1624-2A 类型&#xff1a;数字输入模块&#xff08;16通道&#xff0c;24V DC&#xff09; 制造商&#xff1a;霍尼韦尔&#xff08;Honeywell&#xff09;&#xff0c;属于其工业自动化或楼宇控制系统产品线。 主要功能&#xff1a; 采集16路数…...

中文域名25周年,取得哪些里程碑式的进展?

二十五载中文域名路 第八届中文域名创新应用论坛在北京举办。与会领导专家回顾了中文域名发展历史&#xff0c;深入探讨了当下面临的机遇与挑战&#xff0c;并展望了未来的发展。 自2000年中国推出全球首个中文域名试验系统以来&#xff0c;中文域名已走过25年历程&#xff0c…...

HTTP协议接口三种测试方法之-postman

HTTP协议作为现代Web开发的基石,其接口测试是开发过程中不可或缺的环节。Postman作为最流行的API测试工具之一,能够极大提升我们的测试效率。本文将详细介绍如何使用Postman进行HTTP接口测试。 一、HTTP协议基础回顾 在开始使用Postman之前,我们先简单回顾下HTTP协议的基本…...

【Linux cmd】查看 CPU 使用率的几个命令

1、查看 CPU 使用情况 dstat -c usr 用户sys 系统idl 空闲 2、查看最占 CPU 的进程 dstat --top-cpu...

架空线路监控系统是针对高压架空输电线路设计的一种安全监测解决方案

一、系统介绍 架空线路监控系统是在传统电网线路传输结构的基础上&#xff0c;增设的线路传输无线监控装置。它能够对高压传输线路自身危险点进行监控&#xff0c;也可以对线路闪络、线路舞动、线路二次回流、高压漏电等电力传输故障进行综合检验&#xff0c;是现代电力传输安…...

Kotlin Compose Button 实现长按监听并实现动画效果

想要实现长按按钮开始录音&#xff0c;松开发送的功能。发现 Button 这个控件如果去监听这些按下&#xff0c;松开&#xff0c;长按等事件&#xff0c;发现是不会触发的&#xff0c;究其原因是 Button 已经提前消耗了这些事件所以导致&#xff0c;这些监听无法被触发。因此为了…...

应对进行性核上性麻痹,健康护理铸就温暖防线

进行性核上性麻痹&#xff08;PSP&#xff09;是一种罕见的神经退行性疾病&#xff0c;主要影响患者的运动、平衡及吞咽等功能。针对这类患者&#xff0c;有效的健康护理对提升其生活质量、延缓病情发展至关重要。 在日常生活护理方面&#xff0c;由于患者存在平衡障碍和肌肉僵…...

python邮件地址检验 2024年信息素养大赛复赛/决赛真题 小学组/初中组 python编程挑战赛 真题详细解析

python邮件地址检验 2024全国青少年信息素养大赛Python编程挑战赛复赛真题解析 博主推荐 所有考级比赛学习相关资料合集【推荐收藏】 1、Python比赛 信息素养大赛Python编程挑战赛 蓝桥杯python选拔赛真题详解 蓝桥杯python省赛真题详解 蓝桥杯python国赛真题详解 2、…...

CAD球体功能梯度材料3D插件

插件介绍 CAD球体功能梯度材料3D插件可在AutoCAD内建立大小呈现梯度分布的球体及长方体孔隙三维模型。 功能梯度材料&#xff08;FGM&#xff09;模型包含大小梯度变化的球体及与之适配的长方体部件&#xff0c;可用于球体材料的梯度分布或梯度多孔结构材料建模。 插件支持…...

自制操作系统day9内存管理(cache、位图、列表管理、内存的释放)(ai辅助整理)

day9内存管理 整理源文件&#xff08;harib06a&#xff09; 残留问题&#xff1a;鼠标指针的叠加处理不太顺利&#xff0c;以后处理 先介绍cache&#xff08;高速缓存&#xff09; 每次访问内存&#xff0c;都将所访问的地址和内容存入高速缓存&#xff0c; 往内存里写入数据…...

JavaWebsocket-demo

Websocket客户端 pom依赖 <dependency><groupId>org.java-websocket</groupId><artifactId>Java-WebSocket</artifactId><version>1.4.0</version></dependency>客户端代码片段 Component Slf4j public class PositionAlarmL…...

特征学习:赋予机器学习 “慧眼” 的核心技术

一、特征学习&#xff1a;从人工设计到智能发现的范式革新 1.1 核心定义与价值 特征学习的本质是让机器模仿人类大脑的认知过程 —— 例如&#xff0c;人类视觉系统通过视网膜→视神经→大脑皮层的层级处理&#xff0c;从像素中识别物体&#xff1b;特征学习则通过神经网络的卷…...