zxl19 / Hand_Eye_Extrinsic_Calibration

MATLAB code for LiDAR-Camera-GNSS/INS extrinsic calibration based on hand-eye calibration method.
MIT License
37 stars 7 forks source link

A little confuse about the lidar coordinate system and odomtery coordinate system #3

Closed AdamPengG closed 2 years ago

AdamPengG commented 2 years ago

Hi Zhang, thanks for your previously generous help. I have confuse about the lidar coordinate system and odomtery coordinate system. My lidar coordinate system is x(back),y(left),z(up). Is the topic, /aft_mapped_to_init, coordinate system is the same x(back),y(left),z(up)? Emm, take a example, I assume your lidar corrdinate system is x(front),y(right),z(up) and my lidar coordinate system is x(back),y(left),z(up) 。After the process of loam,we get same odomtery /aft_mapped_to_init. I put the Lidar odomtery CSV and INS CSV. The matlab will give a transformation matrix base on my lidar coordinate system ,x(back),y(left),z(up), right?

zxl19 commented 2 years ago

Yes, you are right. The LiDAR coordinate system is essentially the same as odometry coordinate system. Because the points in a LiDAR scan is in the LiDAR coordinate system. And LiDAR odometry estimates the poses of LiDAR coordinate system based on the input points. However in certain algorithms (e.g. LeGO-LOAM) they are not the same because the input points are transformed before pose estimation.

AdamPengG commented 2 years ago

You mean that ,in the lego-loam, there is a rotation between LIDAR coordinate system and LIDAR Odometry coordinate system. If I used lego-loam to output the odometry, the transformation matrix from matlab shows relation between LIDAR Odomety and INS . Then I want to get the transformation between Lidar and INS, I should use Matlab transformation matrix * Lego-loam Lidar&Lidar Odometry's rotation matrix. However, A-LOAM will directly output the transfromation between the Lidar and INS.

zxl19 commented 2 years ago

LeGO-LOAM transformed the point cloud during the process:

point.x = segmentedCloud->points[i].y;
point.y = segmentedCloud->points[i].z;
point.z = segmentedCloud->points[i].x;

You can refer to featureAssociation.cpp#L500 for more details.

AdamPengG commented 2 years ago

It works. Thank you very much ,Zhang.