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

欧拉角转为旋转矩阵

外旋是固定坐标系,内旋是动态坐标系。外旋和内旋具有等价性。

固定坐标系依次绕xyz轴旋转,旋转矩阵

 动态坐标系依次绕zyx轴旋转,旋转矩阵

numpy和scipy计算对比

import numpy as np
from numpy import sin, cos, pi	# 抑制科学计数法,小数点后保留后4位
np.set_printoptions(precision=4, suppress=True)
def euler_to_rotation_matrix(roll=0, pitch=0, yaw=0):"""欧拉角转为旋转矩阵动态坐标系,内旋矩阵依次zyx旋转固定坐标系,外旋顺序依次是xyzroll, pitch, yaw,绕xyz轴旋转的弧度"""gamma, beta, alpha = roll , pitch, yawsin_gamma = sin(gamma)sin_beta = sin(beta)sin_alpha = sin(alpha)cos_gamma = cos(gamma)cos_beta = cos(beta)cos_alpha = cos(alpha)r11 = cos_alpha * cos_betar12 = cos_alpha * sin_beta * sin_gamma - sin_alpha * cos_gamma r13 = cos_alpha * sin_beta *  cos_gamma + sin_alpha * sin_gammar21 = sin_alpha * cos_betar22 = sin_alpha * sin_beta * sin_gamma + cos_alpha * cos_gammar23 = sin_alpha * sin_beta * cos_gamma - cos_alpha * sin_gammar31 = -sin_betar32 = cos_beta * sin_gammar33 = cos_beta * cos_gammamatrix =  np.array([[r11, r12, r13],[r21, r22, r23],[r31, r32, r33]])return matrixfrom scipy.spatial.transform import Rotation as R
def test1():roll = pi / 2pitch = 2 * pi / 3yaw = pi / 4print(f"roll: {roll}, pitch: {pitch}, yaw: {yaw}")print("-----------Custom method-------------")rmat = euler_to_rotation_matrix(roll, pitch, yaw)print(f"rmat: \n{rmat}")print("-----------scipy method1--------------")rot = R.from_euler('xyz', [roll, pitch, yaw], degrees=False) # xyz小写是外旋print(f"rot: \n{rot.as_matrix()}")   print( np.allclose(rmat, rot.as_matrix(), atol=1e-4) )print("-----------scipy method2--------------")rot2 = R.from_euler('ZYX', [yaw, pitch, roll], degrees=False)  # ZYX大写是内旋print(f"rot2: \n{rot2.as_matrix()}")print( np.allclose(rmat, rot2.as_matrix(), atol=1e-4) )   # Truetest1()
roll: 1.5707963267948966, pitch: 2.0943951023931953, yaw: 0.7853981633974483
-----------Custom method------------- 
rmat: 
[[-0.3536  0.6124  0.7071][-0.3536  0.6124 -0.7071][-0.866  -0.5    -0.    ]]
-----------scipy method1--------------
rot: 
[[-0.3536  0.6124  0.7071][-0.3536  0.6124 -0.7071][-0.866  -0.5    -0.    ]]
True
-----------scipy method2--------------
rot2: 
[[-0.3536  0.6124  0.7071][-0.3536  0.6124 -0.7071][-0.866  -0.5    -0.    ]]
True

http://www.xdnf.cn/news/686665.html

相关文章:

  • X-plore v4.43.05 强大的安卓文件管理器-MOD解锁高级版 手机平板/电视TV通用
  • 欢乐熊大话蓝牙知识12:用 BLE 打造家庭 IoT 网络的三种方式
  • 基于深度学习的三维图像生成项目开发方案
  • 论文阅读笔记——In-Context Edit
  • macOS 风格番茄计时器:设计与实现详解
  • Spring Boot项目中实现单点登录(SSO)完整指南
  • Opera Neon发布该公司首款“AI代理”浏览器
  • 性能指标 P99(99th Percentile)​​
  • Vue内置指令与自定义指令
  • 模型微调参数入门:核心概念与全局视角
  • SpringBoot实战:高效获取视频资源
  • 浏览器之禁止打开控制台【F12】
  • Linux中基础IO(下)
  • 怎么快速判断一款MCU能否跑RTOS系统
  • FeignClient发送https请求时的证书验证原理分析
  • 初识 Pytest:测试世界的智能助手
  • 互联网大厂Java求职面试实战:Spring Boot微服务架构及Kafka消息处理示例解析
  • 《异常链与统一异常处理机制设计:让 Java 项目更清晰可靠》
  • AI 赋能数据可视化:漏斗图制作的创新攻略
  • ABAQUS三维功能梯度多孔结构材料FGM轴压模拟
  • Spring AI 整合聊天模型之智谱AI
  • CloudCompare|点测量功能源码分析
  • 如何手搓一个查询天气的mcp server
  • 嵌入式学习笔记 - 新版Keil软件模拟时钟Xtal灰色不可更改的问题
  • Spring AI 官方文档 AIGC入门到实战 (1) 认识Spring AI
  • Docker 环境搭建与三大数据库(MySQL/Redis/MongoDB)部署教程
  • 探索C++标准模板库(STL):String接口实践+底层的模拟实现(中篇)
  • 0527漏洞原理:XSS笔记
  • 《深入解析UART协议及其硬件实现》-- 第二篇:UART硬件架构设计与FPGA实现
  • pikachu靶场通关笔记05 XSS关卡01-反射型GET