当前位置: 首页 > 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

相关文章:

  • 二叉树的锯齿形层序遍历——灵活跳跃的层次结构解析
  • w~视觉~合集6
  • 自我觉察是成长的第一步,如何构建内心的平静
  • 【线程与进程区别】
  • Spring AI框架快速入门
  • 华为OD机试真题——最佳的出牌方法(2025A卷:200分)Java/python/JavaScript/C/C++/GO最佳实现
  • SAR ADC 比较器的offset 校正
  • 加密协议知多少
  • STP(生成树协议)原理与配置
  • AD-PCB--元件库介绍及电阻电容模型的创建 DAY4
  • SQLiteStudio - 免费开源、轻量高效,跨平台的 SQLite 数据库管理工具,代替 Navicat for SQLite
  • 数据结构与算法:数位dp
  • ORB-SLAM2学习笔记:ComputeKeyPointsOctTree分析过程记录
  • Vision + Robot New Style
  • IP证书的作用与申请全解析:从安全验证到部署实践
  • day39 pythonCNN网络
  • DeepSeek实战:打造智能数据分析与可视化系统
  • QT 5.15.2 程序中文乱码
  • 如何处理 Python 入门难以进步的现象
  • 小样本学习
  • 网站建设主要做什么/创建一个网站
  • 建设局建筑电工证查询网站/网红营销
  • 移动端网页设计图片/seo顾问阿亮
  • magento官方网站/谷歌推广哪家公司好
  • 给别人做网站/深圳在线制作网站
  • 品牌网站建设多少钱/宁波网站推广公司有哪些