标签: euler-angles

四元数达到万向节锁定

为了避免在执行旋转时发生角度锁定,我尝试切换到四元数。不知何故,我仍然设法达到云台锁定。

我不确定是否是由于实施的数学方法或设计错误引起的,所以请指出是否应该更改对象坐标的方法。

我的每个对象都有一个X,Y,Z值和一个俯仰,偏航,横滚值。当我更改旋转值时,对象将根据以上信息重新计算其顶点。此逻辑如下:

    // vertex array
    vertices[x] -= /*Offset by origin point*/;

    // Quat.'s representing rotation around xyz axes
    Quaternion q1 = Quaternion(glm::vec3(1,0,0),pitch);
    Quaternion q2 = Quaternion(glm::vec3(0,1,0),yaw); 
    Quaternion q3 = Quaternion(glm::vec3(0,0,1),roll); 

    // total rotation
    Quaternion TotalRot = ( (q3 * q2) * (q1) ); 

    // conversion of original coordinates to quaternion
    Quaternion Point1 = Quaternion(0, vertices[x].x(), vertices[x].y(), vertices[x].z()); 

    // resulting rotated point
    Quaternion Point2 = Quaternion( (TotalRot * Point1) * TotalRot.inverse() );

    // placing new point back into vertices array …
Run Code Online (Sandbox Code Playgroud)

c++ transformation rotation quaternions euler-angles

4
推荐指数
2
解决办法
2825
查看次数

在 ARKit 中获取设备围绕世界原点 y 轴的旋转

当我在 ARKit 中围绕 y 轴旋转我的设备时,我试图计算它的旋转。为了澄清起见,ARKit 中的 y 轴是垂直于地面指向上方的轴。

我使用 eulerangles 来获得相机的旋转,如下所示:

var alpha = sceneView.pointOfView?.eulerAngles.y
Run Code Online (Sandbox Code Playgroud)

这大约在 时有效0=<alpha<pi/2 and when -pi/2<alpha<=0,但是对于应该是其他角度的内容,我得到了错误的读数。我怀疑这与万向节锁定有关,并且我必须以某种方式使用四元数才能获得正确的角度,而不管象限如何。任何帮助深表感谢!

math 3d euler-angles ios arkit

4
推荐指数
1
解决办法
815
查看次数

C# 如何将四元数转换为欧拉角 (XYZ)

我见过很多关于欧拉角和四元数之间转换的问题,但我从未找到任何可行的解决方案。也许你可以帮助我为什么这没有返回正确的值。我需要四元数(XYZ)到欧拉角之间的转换,这是我当前使用的代码:

        public static Vector3 Q2E(Quaternion q) // Returns the XYZ in ZXY
        {
            Vector3 angles;

            angles.X = (float)Math.Atan2(2 * (q.W * q.X + q.Y * q.Z), 1 - 2 * (q.X * q.X + q.Y * q.Y));
            if (Math.Abs(2 * (q.W * q.Y - q.Z * q.X)) >= 1) angles.Y = (float)Math.CopySign(Math.PI / 2, 2 * (q.W * q.Y - q.Z * q.X));
            else angles.Y = (float)Math.Asin(2 * (q.W * q.Y - q.Z * q.X));
            angles.Z = (float)Math.Atan2(2 * (q.W …
Run Code Online (Sandbox Code Playgroud)

c# math quaternions euler-angles

4
推荐指数
1
解决办法
6420
查看次数

在Matlab中从四元数中获取欧拉角

我有一个四元数的X,Y,Z和W分量随着时间的推移,在4个分离的向量中.

  QW             1x346             2768  double       
  QX             1x346             2768  double
  QY             1x346             2768  double
  QZ             1x346             2768  double              
Run Code Online (Sandbox Code Playgroud)

我想转换为欧拉角,以便在三个不同的子图中绘制3个欧拉组件,因此我需要有3个这样的矢量.

  heading(t)          1x346 
  attitude(t)         1x346 
  bank(t)             1x346 
Run Code Online (Sandbox Code Playgroud)

在matlab中是否有一种中间方式来获取它(我的意思是输入我的4个向量并输出上面3个向量的函数)或者我是否必须编写一些代码来为每个时间步进行转换?提前致谢.

matlab quaternions euler-angles

3
推荐指数
1
解决办法
5958
查看次数

Unity3D中的旋转

这是我正在尝试做的简化代码:

var angle = 1.57;
if ( this.transform.rotation.y > angle ){
  this.transform.rotation.y--;
} else if ( this.transform.rotation.y < angle ){
  this.transform.rotation.y++;
}
Run Code Online (Sandbox Code Playgroud)

我习惯在AS3中编写代码,如果我在flash中执行代码,它可以很好地工作,虽然在Unity3D中却没有,但是我很难弄清楚原因,或者我怎么能得到这种效果.

有谁能够帮我?谢谢!

编辑:

我的目标是一辆刚性车,有2个胶囊碰撞器在"颠簸"的地板上行驶,而且在某些时候他只是失去方向精度,我认为这是因为它的循环旋转系统.

(感谢kay为transform.eulerAngles提示)

transform rotation euler-angles unity-game-engine

3
推荐指数
1
解决办法
4万
查看次数

找到两个法向量之间的x,y,z旋转

我在3D空间中有两个正方形.我想找到它们之间的x,y,z角度.我开始找到两个正方形的法线向量,我试图弄清楚如何获得它们之间的角度.

我正在使用XNA(C#)Vector3对象.

我计算了法线向量如下:

        Vector3 normal1 = (Vector3.Cross(sq1.corners[0] - sq1.corners[1], sq1.corners[0] - sq1.corners[2]));
        Vector3 normal2 = (Vector3.Cross(sq2.corners[0] - sq2.corners[1], sq2.corners[0] - sq2.corners[2]));
Run Code Online (Sandbox Code Playgroud)

我想找到将使normal1面向normal2的euler旋转

c# math xna euler-angles

3
推荐指数
1
解决办法
6652
查看次数

Euler <=> Quaternion之间的转换就像在Unity3d引擎中一样

我已经使用了两个例子(也来自这个网站),但结果与Unity说的结果不一样.

Quaternion.Euler和.eulerAngles是Unity函数.FromQ不执行奇点检查,FromQ2确实如此.

结果:

eulers = (100,55,-11):
Quaternion.Euler(eulers) == (0.6, 0.4, -0.4, 0.5)
ToQ(eulers)); == (0.5, -0.4, 0.2, 0.7) // 0.5, -0.4 right but in wrong order

FromQ(ToQ(eulers)) == (55.0, 100.0, -11.0)
FromQ2(ToQ(eulers)) == (-55.5, -6.3, 71.0) // something right

Quaternion.Euler(eulers).eulerAngles == (80.0, 235.0, 169.0)
FromQ2(Quaternion.Euler(eulers)) == (65.8, 1.9, 99.8)
ToQ(eulers).eulerAngles == (70.0, 286.9, 341.4)
FromQ(Quaternion.Euler(eulers)) == (-65.8, 76.0, 4.6)

It must be:
FromQ() = FromQ2() = .eulerAngles,
ToQ() = Quaternion.Euler()
Run Code Online (Sandbox Code Playgroud)

代码在这里:http://pastebin.ru/eAlTHdYf

任何人都可以更正此代码?我需要的代码将返回与Unity函数返回的值相同的值.

UPDATE

这是固定代码:http://pastebin.com/riRLRvch …

c# math quaternions euler-angles unity-game-engine

3
推荐指数
1
解决办法
2万
查看次数

3D相对角度和计算

我有一个四元数形式的旋转r1的3D对象.我用当地的欧拉角旋转它:

transform.Rotate(new Vector3(0f, 15f, 0f), relativeTo: Space.Self); // right
transform.Rotate(new Vector3(-10f, -5f, 0f), relativeTo: Space.Self); // left up
transform.Rotate(new Vector3(0f, 0f, 90f), relativeTo: Space.Self); // 90 clockwise
Run Code Online (Sandbox Code Playgroud)

现在我有旋转r2.如果我不知道应用了哪些角度,如何检索局部Y旋转和15-5 + 0 = 10?可能无法获得完全相同的价值(10),但你已经有了我的想法.也许我可以在当地的r2空间获得Y diff ?

c# math euler-angles unity-game-engine

3
推荐指数
1
解决办法
703
查看次数

如何计算两个物体之间的相对位姿并将它们放入变换矩阵中

我有两个物体的姿势。它们以 x、y、z 以及横滚、俯仰和偏航的形式表示(我将它们转换为四元数,然后将它们转换为横滚、俯仰、偏航)。我需要做的是记录两个物体之间的相对姿势,记录它们,因此,当其中一个物体旋转时,另一个物体以完全相同的方式平移和旋转。我从物体的质心获取姿势。

该视频将说明我打算做什么。

https://drive.google.com/file/d/1NKtS9fv-FasloVwCKqYIAV1Uc2i9_PN0/view

我访问了以下网站寻求帮助:

http://planning.cs.uiuc.edu/node102.html

请帮助我,我被困了很长时间,我需要一个方向,我是机器人技术的新手,而且我没有任何计算机视觉背景。

@Vik,所以我已经按照你想要的方式实现了,但它不能正常工作。我正在 python 的 ROS 环境中工作,但我已经给出了代码的逻辑部分。如果您能看一下,那将会非常有帮助。我从这里得到了我的矩阵:http ://planning.cs.uiuc.edu/node104.html

#This is object2
p = PoseStamped()
p.header.frame_id = robot.get_planning_frame()
p.pose.position.x = 0.90
p.pose.position.y = 0.30
p.pose.position.z = 1.2
p.pose.orientation.x=0.0
p.pose.orientation.y=0.0
p.pose.orientation.z=0.0
p.pose.orientation.w=1.0
scene.add_box("object2", p, (0.1, 0.1, 0.2))

rospy.sleep(2)

quaternion1 =   (p.pose.orientation.x,p.pose.orientation.y,p.pose.orientation.z,p.pose.orientation.w)
euler = tf.transformations.euler_from_quaternion(quaternion1, axes='sxyz') # will provide result in x, y,z sequence
roll=euler[0]
pitch=euler[1]
yaw=euler[2]

C00=math.cos(yaw)*math.cos(pitch)
C01=math.cos(yaw)*math.sin(pitch)*math.sin(roll) - math.sin(yaw)*math.sin(roll)
C02=math.cos(yaw)*math.sin(pitch)*math.cos(roll) + math.sin(yaw)*math.sin(roll)
C03=p.pose.position.x
C10=math.sin(yaw)*math.cos(pitch)
C11=math.sin(yaw)*math.sin(pitch)*math.sin(roll) + math.cos(yaw)*math.cos(roll)
C12=math.sin(yaw)*math.sin(pitch)*math.cos(roll) -math.cos(yaw)*math.sin(roll)
C13=p.pose.position.y
C20= -math.sin(pitch)
C21=math.cos(pitch)*math.sin(roll)
C22=math.cos(pitch)*math.cos(roll) …
Run Code Online (Sandbox Code Playgroud)

python transformation euler-angles ros

2
推荐指数
1
解决办法
1万
查看次数

尝试在 Three.js 中将 Go Pro GYRO 数据转换为旋转

我正在尝试将 Go Pro 陀螺仪数据转换为 Three.js 坐标,以便我可以将素材投影到球体内部,旋转球体并具有 3D 稳定性。

在此处输入图片说明

相机是这样定向的,坐标的顺序是 Z,X,Y

我正在尝试应用这个向量来旋转球体,就像这样

    this._nextVec3.set(this._next[0],this._next[1],this._next[2])
    this.el.object3D.rotation.setFromVector3(this._nextVec3) 
Run Code Online (Sandbox Code Playgroud)

但是我无法让旋转与相机的旋转相匹配,我认为这与左/右手配置有关?

任何人都可以帮忙吗?

javascript rotation euler-angles three.js gopro

2
推荐指数
1
解决办法
84
查看次数