其他形式转欧拉角形式

1. 坐标系轴方向问题

3D数学基础中约定使用左手坐标系

  

                         左手坐标系                                                             右手坐标系

左手正方向:+x正向右平移,+y向上平移,+z向前平移.

右手正方向:+x正向左平移,+y向上平移,+z向前平移.

2. 常用的三种坐标系

2.1 世界坐标系

所关心的最大的坐标系,用来描述其他坐标系。

 

 2.2 物体坐标系

以自身为原点,自身的坐标系,相机坐标系就属于物体坐标系。

  即z轴(前进方向)是向里的,其他很多书比如视觉SLAM是右手坐标系是,z轴是向外的。

 2.3 惯性坐标系

前面的世界坐标系和物体坐标系中间有个惯性坐标系。

 物体坐标系到世界坐标系转换的意义:比如手机在你前面3米处(以你为中心的物体坐标系描述),那这个手机在这个房间哪个位置呢?(这个房间就是世界坐标系)

那如何表示旋转呢?下面介绍的三种表示方式:矩阵,欧拉角,四元数。

3. 矩阵

 一个矩阵用来把一个向量从一个坐标系转换到另一个坐标系中进行描述,则该旋转矩阵描述这两个坐标系之间的相对位移。4x4矩阵包含3x3旋转部分和1x3平移部分。

 因为最后一列总是[0,0,0,1]^T,所以去掉,变成4x3矩阵,此矩阵具有旋转和平移功能。

4. 欧拉角

欧拉角表示旋转是把旋转拆分成绕任意三个相互垂直的轴旋转。哪三个轴,什么顺序都可以,但常用的如下。 

朝向倾斜翻滚
3D Math Foundationheadingpitchbank
Vision SLAM 14yawpitchroll
绕物体坐标系旋转轴yxz

    

        heading是绕物体坐标系y轴旋转量              pitch是绕绕物体坐标系x旋转量

      bank是绕绕物体坐标系z轴旋转量

比如,马路上的汽车只有绕物体坐标系的y轴旋转,即只有heading。

5. 四元数

四元数包含一个标量w和一个3D向量v,表示形式为:

[w, v]  或者

[w, (x,y,z)]

举个例子,四元数

 

/
//
// 3D Math Primer for Games and Graphics Development
//
// EulerAngles.h - Declarations for class EulerAngles
//
// Visit gamemath.com for the latest version of this file.
//
// For more details, see EulerAngles.cpp
//
/

#ifndef __EULERANGLES_H_INCLUDED__
#define __EULERANGLES_H_INCLUDED__

// Forward declarations  预声明

class Quaternion;
class Matrix4x3;
class RotationMatrix;

// 以欧拉角形式保存方位
//---------------------------------------------------------------------------
// class EulerAngles
//
// This class represents a heading-pitch-bank Euler angle triple.

class EulerAngles {
public:

// Public data

	// Straightforward representation.  直接的表示方式
    // Store the three angles, in radians 弧度表示

	float	heading;  // heading,pitch,bank (朝向,倾斜,翻滚)
	float	pitch;
	float	bank;

// Public operations

	// 1,Default constructor does nothing

	EulerAngles() {}

	// Construct from three values

	EulerAngles(float h, float p, float b) :
		heading(h), pitch(p), bank(b) {}

	// Set to identity triple (all zeros)
    //2,单位欧拉角
	void	identity() { heading = pitch = bank = 0.0f; }

	// Determine "canonical" Euler angle triple
    //3,声明限制的欧拉角:pitch倾斜限制在-90,90之间
	void	canonize();

	// Convert the quaternion to Euler angle format.  
    // The input quaternion is assumed to perform the rotation from object-to-inertial
	// or inertial-to-object, as indicated.
    // 3, 两个函数功能:四元数转欧拉角形式
	void	fromObjectToInertialQuaternion(const Quaternion &q);  // 输入四元数参数作用:物体坐标转惯性坐标
	void	fromInertialToObjectQuaternion(const Quaternion &q);  // 

	// Convert the transform matrix to Euler angle format.  
    // The input matrix is assumed to perform the transformation from object-to-world, 
    // or world-to-object, as indicated.  
    // The translation portion of the matrix is ignored.  The matrix is assumed to be orthogonal(正交矩阵).
    // 4,两个函数功能:转换矩阵转欧拉角形式
	void	fromObjectToWorldMatrix(const Matrix4x3 &m);  // 输入四元数参数作用:物体坐标转世界坐标
	void	fromWorldToObjectMatrix(const Matrix4x3 &m);

	// Convert a rotation matrix to Euler Angle form.
    // 5,函数功能:旋转矩阵转欧拉角形式
	void	fromRotationMatrix(const RotationMatrix &m);
};

// A global "identity" Euler angle constant
// 全局单位欧拉角常量
extern const EulerAngles kEulerAnglesIdentity;

/
#endif // #ifndef __EULERANGLES_H_INCLUDED__

待续。。。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr.Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值