SciPy库spatial.transform模块Rotation类的from_rotvec 函数介绍

embedded/2024/11/24 20:32:56/

SciPy 库的 spatial.transform 模块 Rotation 类 是一个工具类,用于在多种旋转表示形式(例如旋转矩阵、四元数、旋转向量、欧拉角等)之间进行转换,以及执行旋转操作。

示例代码

1. 构造旋转对象
from scipy.spatial.transform import Rotation as scipy_R
import numpy as np# 定义一个旋转向量 (绕 Z 轴旋转 π/2 弧度)
rotvec = np.array([0, 0, np.pi / 2])# 从旋转向量构造旋转对象
rotation = scipy_R.from_rotvec(rotvec)# 输出旋转矩阵
print("Rotation matrix:\n", rotation.as_matrix())

解释:

  • rotvec = [0, 0, π/2] 表示绕 Z-轴旋转 90∘ (π/2 弧度)。
  • as_matrix() 方法将 Rotation 对象转换为 3×3 旋转矩阵。
2. 批量操作
# 一组旋转向量 (分别表示绕 X, Y, Z 轴旋转 π/3)
rotvecs = np.array([[np.pi / 3, 0, 0],  # X-axis[0, np.pi / 3, 0],  # Y-axis[0, 0, np.pi / 3]   # Z-axis
])# 从旋转向量批量构造旋转对象
rotations = scipy_R.from_rotvec(rotvecs)# 转换为旋转矩阵
rotation_matrices = rotations.as_matrix()
print("Batch Rotation matrices:\n", rotation_matrices)

解释:

  • 使用批量旋转向量构造一组旋转对象。
  • as_matrix() 转换每个旋转向量对应的旋转为旋转矩阵。
  • 结果是一个形状为 (3,3,3) 的数组,包含三个旋转矩阵。
3. 反向操作
# 给定一个旋转矩阵
rot_matrix = np.array([[0, -1, 0],[1, 0, 0],[0, 0, 1]
])# 从旋转矩阵构造 Rotation 对象并转换为旋转向量
rotation = scipy_R.from_matrix(rot_matrix)
rotvec = rotation.as_rotvec()
print("Rotation vector:", rotvec)

解释:

  • 给定旋转矩阵 R,从中提取旋转向量 r。
  • 输出的旋转向量会重新编码角度和轴。

from_rotvec函数的应用场景

  1. 机器人学: 处理关节的旋转或末端执行器姿态。
  2. 计算机图形学: 执行刚体变换或相机旋转。
  3. 分子建模: 处理分子的旋转。
  4. 扩散模型: 在 SO(3)SO(3) 上进行采样与噪声扩散。
  5. 姿态估计: 从旋转向量计算旋转矩阵并应用于运动分析。

通过 scipy_R.from_rotvec,可以将紧凑的旋转向量形式高效地转换为其他旋转表示,满足多种科学与工程需求。


http://www.ppmy.cn/embedded/140199.html

相关文章

深度学习day1-Tensor 1

深度学习 一 初识Torch 1基础介绍 PyTorch是一个基于Python的深度学习框架,最初由Facebook开发,广泛用于计算机视觉、自然语言处理、语音识别等领域。用张量(tensor)来表示数据,可以在GPU上加速,处理大规…

Spring Boot OA系统:企业资源规划的新选择

2相关技术 2.1 MYSQL数据库 MySQL是一个真正的多用户、多线程SQL数据库服务器。 是基于SQL的客户/服务器模式的关系数据库管理系统,它的有点有有功能强大、使用简单、管理方便、安全可靠性高、运行速度快、多线程、跨平台性、完全网络化、稳定性等,非常…

Redis的理解

1.Redis使用 C语言开发的。Redis 约定此版本号,为偶数的版本是稳定版(如:2.4版 2.6版),奇数版是非稳定版(如:2.5版 2.7版) 2.Redis 数据库中的所有的数据都存储在内存中,由于内存的速度远远快于硬盘,因此Redis在性能上对比其他基于硬盘存储的数据库有明显优势,在普通一台计算机…

从〇开始深度学习(0)——背景知识与环境配置

从〇开始深度学习(0)——背景知识与环境配置 文章目录 从〇开始深度学习(0)——背景知识与环境配置写在前面1.背景知识1.1.Pytorch1.2.Anaconda1.3.Pycharm1.4.CPU与GPU1.5.整体关系 2.环境配置2.1.准备工作2.1.1.判断有无英伟达显卡2.1.2.清理电脑里的旧环境 2.1.安装Anaconda…

51单片机基础 06 串口通信与串口中断

目录 一、串口通信 二、串口协议 三、原理图 四、串口通信配置参数 1、常用的串行口工作方式1 2、数据发送 3、数据接收 4、波特率计算 5、轮询接收 6、中断接收 一、串口通信 串口通信是一种常见的数据传输方式,广泛用于计算机与外部设备或嵌入式系统之间…

C++设计模式:建造者模式(Builder) 房屋建造案例

什么是建造者模式? 建造者模式是一种创建型设计模式,它用于一步步地构建一个复杂对象,同时将对象的构建过程与它的表示分离开。简单来说: 它将复杂对象的“建造步骤”分成多部分,让我们可以灵活地控制这些步骤。通过…

Let‘s Encrypt SSL证书:acmessl.cn申请免费3个月证书

目录 一、CA机构 二、Lets Encrypt特点 三、申请SSL 一、CA机构 ‌Lets Encrypt‌是一个由非营利组织Internet Security Research Group (ISRG)运营的证书颁发机构(CA),旨在通过自动化和开放的方式为全球网站提供免费、可靠的SSL/TLS证书。…

【C++入门(一)】半小时入门C++开发(深入理解new+List+范围for+可变参数)

目录 一.深入理解new 使用格式 二.List列表 定义一个列表 迭代器 添加元素 删除元素 排序 反转序列 三.范围for 四.可变参数 std::initializer_list 可变参数模板(variadic template) 一.深入理解new 类似于C语言中的malloc、calloc和reallo…