空间坐标系以及空间两三维坐标系转换矩阵解释

空间坐标系以及空间两三维坐标系转换矩阵解释

因为工作的原因,需要进行不同坐标系的一个转换,在查阅了众多的网页之后,发现有用的没几个,而且众多都是抄的同一篇文章,而且都是罗列以下旋转的方式,几乎没有解释旋转角的物理意义,也不说这个旋转角怎么得到的。在折腾了一天之后,终于弄清楚了,特意写下来,既能有助于记忆,又能装b,很好很强大。

基础背景

空间三维坐标系转换,大多出现在像我似的搞地图的这群B人里,当然还有搞游戏的大佬们。所以需要对空间三维坐标系做一个小的总结,来防止忘记或者混乱。

具体图形可百度,赖的放图

  • 地心坐标系
    空间三维坐标系,左手系
  • 高斯坐标系
    在搞激光点云的人眼里,基本上就指的是,当前度带(分3度带和6度带)中的高斯直角坐标系,右手系,点云中记录的点坐标大多有经纬度坐标、高斯坐标,两种坐标。
  • 像空间坐标系
    z轴正方向,与主光轴方向重合,x、y轴方向与相平面坐标系平行。右手系
  • 像平面坐标系
    xy轴方向与像素坐标系平行,单位为m,是一个物理坐标系
  • 像素坐标
    单位为像素,在与像平面坐标系进行转换的时候,需要知道每个像素的物理尺寸

三维坐标系转换

为了通用性,前边的空间坐标系只做一个概念上的罗列,这里针对任意两空间直角坐标系的相互转换进行解释。

  • 世界坐标系XYZ:仅仅用于表述,不代表物理意义上世界坐标系
  • 局部坐标系xyz
  • 旋转角:重点需要搞清楚,这个旋转角是从哪个坐标系旋转到哪个坐标系,在地图行业里的多传感器的联合标定中,这个旋转角是由相应的标定文件提供的。

已知条件

  1. 世界坐标系的三个坐标轴:world_x(1,0,0),world_y(0, 1, 0),world_z(0,0,1)
  2. 局部坐标系的三个坐标轴:local_x(g,h,i),local_y(d,e,f)local_z(a,b,c)
    其中,局部坐标系的坐标轴坐标均为世界坐标系下的坐标值,这点非常重要,同时,两空间三维坐标系还有个平移向量,因为只是很简单的坐标值平移,这里就不再赘述,默认两坐标系的原点相同。

旋转原理

这里盗一张图(找了好久,看到的一个良心博客 http://www.skcircle.com/?id=515)
在这里插入图片描述
如上图,P点为局部坐标系的z轴上一点,q为点P在世界坐标系ZOY平面上的投影点,r为点P在经过旋转之后的对应点,如果你去查看了贴的那个网页博客,请不要看他的旋转方式,并不是大佬描述错误,而是不适用空间三维坐标系的相互转换,因为这里涉及到一个很蛋疼的说法,这个旋转矩阵描述的是A坐标系到B坐标系转换方式

世界坐标系到局部坐标系的旋转矩阵R

注意:XYZ与xyz,我都会严格注意,不会写错!(写错老子就改!看其他博客的时候,就深受其害),为了描述方便,世界坐标系的轴或者坐标都会用大写的XYZ来代替,局部坐标用xyz来代替,而且为了防止0与O不好分辨,所有的0都用汉字零来表示

问:如何理解旋转矩阵究竟是描述的A到B,还是B到A?

答:旋转世界坐标系,使得世界坐标系与局部坐标系重合,那么得到的这个旋转矩阵,描述的是,世界坐标系到局部坐标系转换关系,用公式来表达

							 local = R * world 

结合上方图片:(注意理解旋转角)

  1. 逆时针旋转世界坐标系X轴,使得局部坐标系的 z轴 与世界坐标系的 XOZ 平面共面,结合上图(那个椭圆就是为了方便理解,而虚拟出来的点P的旋转轨迹),要想OP出现在XOZ平面上,就需要逆时针旋转X轴,旋转的角度为θ(注意,α为向量夹角,范围0 - 180,如果这个角不会求,要不,再去从小学开始复读一下吧)。但是注意,旋转角是有方向的,图里的例子,如果要逆时针把OZ,旋转到Oq,那么旋转的角度应该是360 - α。

注意:其实顺时针也可以,只需要保证所有的轴都同时为逆时针或者顺时针即可,不过大家都通用逆时针而已,所以,请把顺时针给从脑子里删除

  • 如何来获取旋转角度θ(而非向量夹角)
    就需要用到向量的叉乘,来确定向量的左右侧。这里要将OZ旋转到Oq,那么OZ就是基准,需要知道Oq在OZ的左侧还是右侧,图里是在右侧,与逆时针相反,用叉乘表示: OZ ✖ Oq 得到的向量与X轴的乘积小于零,那么旋转角度就应该是θ = 360 - α,如果在OZ的左侧的话,向量夹角就是旋转角度,θ = α。

    旋转的是X轴,那么矩阵描述应该为Rx
    在这里插入图片描述

  1. 经过步骤1之后,局部坐标系的z轴现在就表现为图里的Or,接着逆时针旋转世界坐标系的Y轴,使得世界坐标系的Z轴与局部坐标系得z轴重合,同理,观察Or在OZ得左侧,那么这一步得旋转角度θ = β。
    旋转的是轴,那么矩阵描述应该为Ry
    在这里插入图片描述
  2. 经过前两步得旋转,此时世界坐标系得Z轴与局部坐标系得z轴已经重合了,那么接着逆时针旋转世界坐标系Z轴,就是一个简单得二维上得旋转了,就会很好理解了,如下图所示
    在这里插入图片描述
    同理,求出旋转角θ,这次旋转的是世界坐标系的Z轴,那么旋转矩阵就是Rz,
    在这里插入图片描述

结束
经过上边的三步旋转,就将世界坐标系,旋转到了局部坐标系上,通过矩阵的左乘,就能得到世界坐标系到局部坐标系的旋转矩阵R
R = Rz * Ry * Rx

完整坐标值形式(加上偏移值)
local = R * world + T
其中T为世界坐标系原点在 局部坐标系中的坐标

局部坐标系到世界坐标系的旋转矩阵

但是现实中,往往是知道局部坐标系原点在世界坐标系中的坐标,因此,基本上都是求得局部坐标系到世界坐标系得旋转矩阵(上边的R,求个逆即可,自己玩去吧您那,赖的写了)
2021.11.12号,补充
还是写清楚吧,方便各位跟我一样的小白。
上边的旋转矩阵R,描述的是world到local的旋转方式,那么将R求逆得到W,同时知道局部坐标系原点在世界坐标系中的坐标O,那么local坐标转到world坐标的方式如下

									world = W * local + O
  • 7
    点赞
  • 67
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值