Unity中左右手系转换

在unity上整了一个机器人位姿正解,unity的左手系带来了一定的麻烦。

坐标系设置:为了减少对Unity内坐标系的更改,DH参数正解时直接将y轴和z轴对调,就成了右手系,可以应用各种右手系的参数,后续要将计算结果转为Unity内左手系的话,对调回来就行。

位移和Scale这样操作是没有任何问题的,右手系的(1,0,1)放到unity里面就是(1,1,0),(a,b,c)转换下就是(a,c,b)。但是要表达旋转就比较麻烦,用欧拉角涉及到一个顺序的问题,相当麻烦,用四元数稍微好点,但是四元数在左右手系下也有所不同。

目前采用的方法如下:

首先在右手系下,把旋转矩阵转换为四元数表达:

 其中ε0123在右手系四元数里分别对应xyzw。这样计算出xyzw之后,再将其转为左手系:

 也就是只需要把z和y对调,然后w取相反数就行,从直觉上很好理解,由于左右手系角度的增量方向相反,左手系顺时针为正,右手系逆时针为正(轴垂直纸面向外),而w一定程度表示了旋转的角度,二者反一下就行了。实际上取(-x,-z,-y,w)也是一样的效果。

但是四元数存在一个没法表达绝对值≥180°的问题,超过180的好弄,减360就行,但等于180度也会出问题。好在工程上不要求什么绝对的等于,设置一个角度绝对值上限为179.99999就可以了。

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值