在slam中,经常充斥着坐标变换,坐标系变换等等知识,经常把我们搞得头大。这篇文章稍微记录一些我个人的一些心得体会,给同是困惑的人一些参考。
在我看来,坐标系变换与坐标变换在虽然是听起来差不多的两个名词,但其实表达的是两个基本相反的内容。比如坐标系A到坐标系B的坐标系变换主要还是强调坐标系A如何通过这个变换矩阵变到坐标系B,在这里,转动的是坐标系A 的相关坐标轴,就好像字面意思那样,起始位置在A(就好像把A当做参考系一样)。坐标变换在slam中其实是针对某些具体点来讲的(比如某些静止不动的地图点),我们需要对这些静止不动的点做一些坐标转换,比如将点的坐标从激光雷达坐标系L或者相机坐标系C转换到世界坐标系W中,此时这个坐标转换矩阵就充当了转换的作用。坐标变换跟坐标系变换其实有点相反的意思,比如,从A坐标系到B坐标系的坐标变换,其实等同于坐标系B到坐标系A的坐标系变换。
补充:slam中经常用到的其实是坐标变换而不是坐标系变换,比如,最近在autoware的标定中发现,官方的标定图示表示为cam-> lidar,咋一看以为是从cam坐标系到lidar坐标系的坐标系变换矩阵,后来发现原来不是这样的,他其实说的是从cam到lidar的坐标变换矩阵!!!
放一张高博的图,来表示坐标系变换与坐标变换。
如果我们已知某个点在相机坐标系C下的坐标,现在我们要求该点在世界坐标系W下的坐标,那么此时我们就会有这样一个公式:
这里,或者就是我们所说的坐标变换矩阵,同时他也是从世界坐标系W到相机坐标系C的坐标系变换矩阵。
总结:A frame 到B frame的坐标系变换(或),也表示B frame 在A frame 中的位姿描述,也代表了把一个点从B frame里的坐标 变换成在A frame里坐标的 坐标变换。