本文目录一览:
Unity-万向节死锁(Gimbal Lock)问题总结
Unity API中对 Transform .eulerAngles的定义是,本身是Vector3,即三维矢量,含有x、y、z三个参数。
1.以欧拉角为单位的旋转;
2.x、y、z角度分别表示先围绕z轴旋转z度,再围绕x轴旋转x度,最后围绕y轴旋转y度;
3.仅使用此变量读取角度并将其设置为固定值。不要增加它们,因为当角度超过360度时会失败。应使用Transform.Rotate来执行旋转操作。
◆此处“角度超过360度时会失败”的理解是,Unity内部使用四元数去执行旋转,不会存储欧拉角的累计值,欧拉角只代表了等值的旋转变化结果,当旋转角度X超过360度时,存储的角度为X-360,例如,361度等同于1度,722度等同于2度。
同时,Unity API提醒我们不要单独设置一个欧拉角的参数(例如,Eulerangles.x=10;),这将导致错误的旋转,应当同时对x、y、z三个参数进行设置。
欧拉旋转中,总是沿着初始的固定轴向在进行按z、x、y顺序的旋转。例如,指定欧拉旋转(90,90,90),它会先绕Z轴旋转90度,再绕X轴旋转90度,再绕Y轴旋转90度,但是绕Z旋转后,再绕X轴旋转时,依然是绕着初始的X轴旋转,绕Y轴旋转时同理。
正是由于欧拉旋转沿Z、X、Y顺规执行和旋转轴轴向的定义,导致了“万向节死锁”的发生。
万向节,也叫平衡环架(Gimbal),具有枢纽的装置,使得一物体能以单一轴旋转。由彼此垂直的枢纽轴所组成的一组三只平衡环架,则可使架在最内的环架的物体维持旋转轴不变。常常应用于船上的陀螺仪、罗盘、饮料杯架等。
在飞行器的航行中,进行XYZ三个方向旋转的旋转有专业的术语,见下图:
沿着机身右方轴(Unity中的+X)进行旋转,称为 pitch ,中文叫 俯仰 。
沿着机头上方轴(Unity中的+Y)进行旋转,称为 Yaw ,中文叫 偏航 。
沿着机头前方轴(Unity中的+Z)进行旋转,称为 Roll ,中文叫 桶滚 。
当飞行器或者船体发生桶滚、俯仰和偏航时,陀螺仪中的转子和旋转轴具有较大的惯性,会保持原来的姿态,而其余的环则会发生旋转,最终保证轩子和旋转轴的平衡,如图所示:
当飞行器和船体仰起90度时,陀螺仪状态如下:
此时沿蓝色轴转动,则转子和旋转轴将无法保持平衡。
现在,
红色连接头:提供一个相对俯仰的自由度。
绿色连接头:提供一个相对偏航的自由度。
蓝色连接头:提供一个相对偏航的自由度。
3个连接头只提供了两个自由度,桶滚的自由度丢失了,这种现象被称为“万向节死锁”。
更加进一步地分析原因,欧拉角的X轴转动造成最后的变化结果,受到到了预先执行的Z轴转动的影响,它仍然会造成某个相对自身的轴向的变化,但是结果不唯一;同样,欧拉角的Y轴转动,则受到了Z轴和X轴的影响,结果更加不唯一。
由于沿XYZ轴的转动遵循Unity中欧拉旋转的顺规和轴向定义,有些情况下会造成某个轴向自由度的丢失。
再追究其本质,从欧拉角到旋转是一个多对一的映射(即不同的欧拉角可以表示同一个旋转方向),而且并不是每一个旋转变化都可以用欧拉角来表示。
利用四元数(Quaternion)来进行旋转。
四元数本质上是一种高阶复数,它的虚部包含了三个虚数单位,i、j、k,即一个四元数可以表示为x = a + bi + cj + dk。Unity中,Transform.rotation存储四元数信息,我们可以使用一个四元数来执行一个旋转。
举例说,把点P(1, 0, 1)绕旋转轴u = (0, 1, 0)旋转90°,求旋转后的顶点坐标。首先将P扩充到四元数,即p = (P, 0)。而q = (u*sin45°, cos45°)。求p′=qpq−1的值。最后的结果p'= ((1, 0, -1), 0),即旋转后的顶点位置是(1, 0, -1)。
Unity内部使用四元数表示所有旋转。Unity API中并未对四元数进行详细的定义,仅是提供了常见的若干四元数函数,比如Quaternion.LookRotation, Quaternion.Angle,Quaternion.Eule,Quaternion.Slerp, Quaternion.FromToRotation和Quaternion.identity等。
在Unity中,使用四元数进行旋转,比欧拉旋转更强大,能够进行增量旋转,能够避免万向锁,还能进行球面差值。
使用四元数来实现一定角度的平滑旋转的简单示例如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public class rotate : MonoBehaviour
{
[SerializeField]
float rotateSpeed = 2f;
bool isClick = false;
Quaternion targetAngles;
private void Start()
{
// Quaternion.Slerp()第二个参数需要的是四元数,所以这里需要将目标的角度转成四元数去计算
targetAngles = Quaternion.Euler(0, 90f, 0);
}
// Update is called once per frame
void Update()
{
// 用 slerp 进行插值平滑的旋转
transform.rotation = Quaternion.Slerp(transform.rotation, targetAngles, rotateSpeed * Time.deltaTime);
// 当初始角度跟目标角度小于1,将目标角度赋值给初始角度,让旋转角度是我们需要的角度
if (Quaternion.Angle(targetAngles, transform.rotation) 1)
{
transform.rotation = targetAngles;
}
}
}
参考文章:
万向节的组成及功用
万向节有主动叉.从动叉.万向轴承组成。万向节的功用是保证不在同一轴线上的两轴之间可靠地传递动力。万向节按其刚度的大小分为刚性万向节和挠性万向节。前者是靠刚性铰链式零件传递动力,其弹性较小;而后者则是靠弹性元件传递动力,其弹性较大,且具有缓冲减振作用,汽车上普遍采用刚性万向节。根据其输出轴和输入轴轴线夹角大于零时传动的瞬时角速度是否相等,刚性万向节又分为不等速万向节、准等速万向节和等速万向节等。
方向盘有异响
一、如果是车内的声音
1、转向灯后回弹卡子发出的声音
如果打了转向开关后打方向盘才会有这个声音的,那就是转向灯自动回位机构的回弹卡子发出的声音,这个声音是正常的。你顺打方向盘就会疙瘩一声响,方向盘转一圈它就会出现三声音疙瘩声,因为方向柱一圈有三格自动回位卡位,所以才会出现这个声音。只要你关了转向灯这个声音就会消失。
2.方向柱防尘套发出的响声
不管你原地或是行车只要打方向盘就会听到声音是从方向盘下面传来的,就要检查一下方向柱防尘套,一但方向柱防尘套缺少润滑就会产生干摩擦的声音,你只要在防尘套内涂些黄油这个声音就会消失。
3.气囊游丝干涉发出的声音
在打方向时,声音是从方向盘里面发出来的,这个问题多数是方向盘里面的气囊游丝干涉造成的,拆下方向盘气囊游丝涂些黄油看还响不响,如果还响就更换气囊游丝了,因为气囊游丝损坏了。
二、如果是车外的声音
1.减震器平面轴承发出的声音
打方向盘听到声音是多车外发出的,这个有可能是减震器的平面轴承缺油发出的声音的,你只要打开车头盖听一下声音是不是从减震器顶座的位置发出,这样就知道是不是减震器的平面轴承发出的声音了,减震器的平面轴承发响,你可以在平面轴承上涂些黄油,如果涂后还是响,就只能更换了。
2.平衡杆胶松动发出的声音
声音不是从减震器的平面轴承发出的,就要检查一下平衡杆胶有没有出现松动或损坏的现像,平衡杆胶松动、损坏不但会在打方向时响,在过不平路面时也会发出响声,平衡杆胶松动是可以通过加垫片的方式来解决的,如果损坏就只能更换了。
总结:对于异响的问题,只有找出声音来源,确定响声音的部位,才能会有解决的方法。
请问汽车的传动轴用手去转有一点间隙正常吗
汽车的传动轴用手去转有一点间隙正常,传动轴间隙,会导致加快减速时传动轴响声、车体发怠等常见故障,没法调节,是生产加工精密度的难题。
传动轴连接或装配各项配件,而又可移动或转动的圆形物体配件,一般均使用轻而抗扭性佳的合金钢管制成。对前置引擎后轮驱动的车来说是把变速器的转动传到主减速器的轴,它可以是好几节由万向节连接。它是一个高转速、少支承的旋转体,因此它的动平衡是至关重要的。一般传动轴在出厂前都要进行动平衡试验,并在平衡机上进行了调整。
传动轴是汽车传动系中传递动力的重要部件,它的作用是与变速箱、驱动桥一起将发动机的动力传递给车轮,使汽车产生驱动力。
扩展资料
在发动机前置后轮驱动(或全轮驱动)的汽车上,由于汽车在运动过程中悬架变形,驱动轴主减速器输入轴与变速器(或分动箱)输出轴间经常有相对运动,此外,为有效避开某些机构或装置(无法实现直线传递),必须有一种装置来实现动力的正常传递,于是就出现了万向节传动。必须具备以下特点:
a 、保证所连接两轴的相对位置在预计范围内变动时,能可靠地传递动力;
b 、保证所连接两轴能均匀运转。由于万向节夹角而产生的附加载荷、振动和噪声应在允许范围内;
c 、传动效率要高,使用寿命长,结构简单,制造方便,维修容易。对汽车而言,由于一个十字轴万向节的输 出轴相对于输入轴(有一定的夹角)是不等速旋转的。
为此必须采用双万向节(或多万向节)传动,并把同传动轴相连的两个万向节叉布置在同一平面,且使两万向节的夹角相等。这一点是十分重要的。在设计时应尽量减小万向节的夹角。