python将四元数变换为旋转矩阵的实例

yipeiwu_com5年前Python基础

如下所示:

import numpy as np
from autolab_core import RigidTransform

# 写上用四元数表示的orientation和xyz表示的position
orientation = {'y': -0.6971278819736084, 'x': -0.716556549511624, 'z': -0.010016582945017661, 'w': 0.02142651612120239}
position = {'y': -0.26022684372145516, 'x': 0.6453529828252734, 'z': 1.179122068068349}

rotation_quaternion = np.asarray([orientation['w'], orientation['x'], orientation['y'], orientation['z']])
translation = np.asarray([position['x'], position['y'], position['z']])
# 这里用的是UC Berkeley的autolab_core,比较方便吧,当然可以自己写一个fuction来计算,计算公式在https://www.cnblogs.com/flyinggod/p/8144100.html
T_qua2rota = RigidTransform(rotation_quaternion, translation)

print(T_qua2rota)
 
# 以下是打印的结果
Tra: [ 0.64535298 -0.26022684 1.17912207]
   Rot: [[ 0.02782477 0.99949234 -0.01551915]
   [ 0.99863386 -0.02710724 0.0446723 ]
   [ 0.04422894 -0.01674094 -0.99888114]]
   Qtn: [-0.02142652 0.71655655 0.69712788 0.01001658]
   from unassigned to world

自己写的话

def quaternion_to_rotation_matrix(quat):
  q = quat.copy()
  n = np.dot(q, q)
  if n < np.finfo(q.dtype).eps:
    return np.identity(4)
  q = q * np.sqrt(2.0 / n)
  q = np.outer(q, q)
  rot_matrix = np.array(
    [[1.0 - q[2, 2] - q[3, 3], q[1, 2] + q[3, 0], q[1, 3] - q[2, 0], 0.0],
     [q[1, 2] - q[3, 0], 1.0 - q[1, 1] - q[3, 3], q[2, 3] + q[1, 0], 0.0],
     [q[1, 3] + q[2, 0], q[2, 3] - q[1, 0], 1.0 - q[1, 1] - q[2, 2], 0.0],
     [0.0, 0.0, 0.0, 1.0]],
    dtype=q.dtype)
  return rot_matrix

描述有两种方式,即XYZABC和XYZ+quaternion:

https://doc.rc-visard.com/latest/de/pose_formats.html?highlight=format

以上这篇python将四元数变换为旋转矩阵的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持【听图阁-专注于Python设计】。

相关文章

浅谈python之高阶函数和匿名函数

map() map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。 def func(x)...

python3实现表白神器

本文实例为大家分享了使用python3制作的表白神器,供大家参考,具体内容如下 使用python3制作的小玩意,哪里需要改造的,望各位评论一下! #coding=utf-8 #第一个...

Python用Bottle轻量级框架进行Web开发

Python用Bottle轻量级框架进行Web开发

当前Python Web开发中的框架算Django最为流行了,但是本文介绍的是一个较为轻量级的Web框架:Bottle框架。理论性的东西就不讲了,直接上实例代码。 1.问题描述 &nbs...

python删除列表元素的三种方法(remove,pop,del)

remove 删除单个元素,删除首个符合条件的元素,按值删除,返回值为空 List_remove = [1, 2, 2, 2, 3, 4] print(List_remove.re...

python远程邮件控制电脑升级版

由于前边Python3.4实现远程控制电脑开关机写的远程操控电脑,使用的POP登陆有使用频率限制,导致非常被动,有时候邮件无法读取,下面改用POST网易邮箱的方法,获取邮件 impo...