本来想使用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]]



