python中 欧拉角<-->四元数<-->旋转矩阵 相互转化

本来想使用ROS中 tf 进行姿态角表示方式的转换,但是 ubuntu 版本是 16.04,仅支持ROS自带的 python2.7的tf库,然而我需要使用python3.7的程序,折腾了一会儿,没有成功安装双版本的tf,准备直接使用 scipy 来实现 欧拉角<–>四元数<–>旋转矩阵 的相互转化。

conda 切换到目标环境后,安装 scipy

pip install scipy

演示一个小程序

import numpy as np	
from scipy.spatial.transform import Rotation as R

Rmatrix = R.from_euler('zyx',[np.pi/2,0,0])
print(Rmatrix.as_matrix())
print(Rmatrix.as_euler('zyx'))

输出

[[ 2.22044605e-16 -1.00000000e+00  0.00000000e+00]
 [ 1.00000000e+00  2.22044605e-16  0.00000000e+00]
 [ 0.00000000e+00  0.00000000e+00  1.00000000e+00]]

[1.57079633 0.         0.        ]

根据上述程序可以得出以下结论:

  • 程序参数默认是 弧度制,如果想使用角度制,需要设置 degrees = True
  • 欧拉角的输入顺序与 参数 ‘zyx’ 相匹配,第一个角度是绕 z 轴旋转的,第二个角度是绕 y 轴旋转的,第三个角度是绕 x 轴旋转的

四元数->欧拉角

MyEuler = R.from_quat([1, 0, 0, 0]).as_euler('zyx')
print(MyEuler)
# 输出
[0.         0.         3.14159265]

欧拉角->四元数

MyQuat = R.from_euler('zyx',[np.pi/2,0,0]).as_quat()
print(MyQuat)
# 输出
[0.         0.         0.70710678 0.70710678]

欧拉角->旋转矩阵

MyRot = R.from_euler('zyx',[np.pi/2,0,0])
print(MyRot)
# 输出
[[ 2.22044605e-16 -1.00000000e+00  0.00000000e+00]
 [ 1.00000000e+00  2.22044605e-16  0.00000000e+00]
 [ 0.00000000e+00  0.00000000e+00  1.00000000e+00]]

你可能感兴趣的:(轮子仓库,python)