UMich-BipedLab / extrinsic_lidar_camera_calibration

This is a package for extrinsic calibration between a 3D LiDAR and a camera, described in paper: Improvements to Target-Based 3D LiDAR to Camera Calibration. This package is used for Cassie Blue's 3D LiDAR semantic mapping and automation.
https://ieeexplore.ieee.org/document/9145571
GNU Affero General Public License v3.0
361 stars 70 forks source link

Some questions about formulas #7

Closed yanliang-wang closed 4 years ago

yanliang-wang commented 4 years ago

Hi, this work is really good.

I have been paying attention to it since the first version of this work was released. When your second edition was released, I carefully read your paper and code. I have some questions about formulas that I would like to ask for you.

  1. In formula 4 of the second version of your paper, I think the formula H_LT should be H_TL( i.e. target to lidar transformation) consistent with your code.

  2. I wonder why the Refinement of the LiDAR Target Vertices is removed in the second version of your paper. I think that part is very reasonable and practical.

  3. In the code of the refinement process, I think the calculation of X_at_lidar_frame is not right, which should be X_at_lidar_frame = inv(H_LT) * inv(H_LC) * X; because L_X_transformed = H_LC * X , X_at_lidar_frame = inv(H_LT) * inv(H_LC) * L_X_transformed, namely, X_at_lidar_frame = inv(H_LT) * X; I don’t think that’s what you want in formula 16 of your v1 paper.

Regarding these questions, I want to know your opinions.

brucejk commented 4 years ago

Hi,

Thank you for your compliment and for paying attention closely to the paper and code!

  1. In eq(4) in the second version of the paper, it says H_T^L, which stands for the target to the LiDAR.
  2. The refinement step still exists on another branch v1-2019. I also feel like it makes sense and reasonable. However, we were running out of space in the paper and even though the refinement step makes sense in practice, it still needs more verification and justification. We are working on that and will have a journal version of the paper soon.
  3. Could you tell me what you think X_at_lidar_frame should be? What you wrote is exactly the same in the code. To be more clear, a) L_X_transformed are the updated LiDAR vertices. b) C_X_transformed uses the original projection map to project back to the image plane and computes the first term of PnP cost. c) The latter term is the regularizer between point cloud vs camera. In other words, it is a confidence ratio between the point cloud vs the camera.
yanliang-wang commented 4 years ago

Thanks for your reply!

  1. I am very sorry that my first question was wrongly described. I want to say that H_LT should be H_TL( i.e. lidar to target transformation) because PC in eq(4) is the points at LiDAR frame and I think that your eq(4) wants to compute the cost sum of each point at the target frame.

  2. Thanks for your reply to my curiosity!

  3. As the picture below shows, I think X_at_lidar_frame should be the blue part which is in eq(16) in the first version. X_at_lidar_frame I think if X_at_lidar_frame = inv(H_LT) * X, the yellow part in the picture below will be a constant, which won't change with theta_x, theta_y, theta_z and T. image

brucejk commented 4 years ago

Hi,

  1. Don't be sorry! Your description is correct but I think we might have different notation. To be clear, what we seek is the transformation from the physical tag to the LiDAR-ideal frame. Your LiDAR (target measured in LiDAR frame) to target (the ideal target frame at the LiDAR origin) should be the same as mine: the physical tag (measured in LiDAR frame) to the LiDAR-ideal frame (the ideal target frame at the LiDAR origin). In the paper, the H_T^L stands for from the physical tag to the LiDAR-ideal frame, which is correct! However, indeed, it is a bit confusing. I will think about it more. Thanks for pointing out!!

  2. Check!

  3. It is not a constant because it contains \delta H, which represents a slight correct on the optimized vertices. Back to the code, in the X_at_lidar_frame, please notice that, L_X_transformed includes the correction from the H. Please let me know if you think it is reasonable!

yanliang-wang commented 4 years ago

Hi,

  1. OK! I also think we might have different notation.

  2. OK!

  3. I don't think X_at_lidar_frame contain \delta H. I noticed that L_X_transformed includes the correction from the H. In your code, you denote \delta H by H_LC, right? I notice that X_at_lidar_frame = inv(H_LT) * inv(H_LC) * L_X_transformed;, and L_X_transformed = H_LC * X; ,namely X_at_lidar_frame = inv(H_LT) * X;. So I don't think I don't think X_at_lidar_frame contain \delta H.

brucejk commented 4 years ago

Hi,

I have been pretty busy these days, sorry for the delay!

For #3, I think you are right and thanks for the correction! The code should simply be X_at_lidar_frame = inv(H_LT) * L_X_transformed;

I will update the repo in a bit; please let me know if you have other concerns!

yanliang-wang commented 4 years ago

Hi,

I sent my reply and new questions to your Gmail email, hope you can reply to me!

brucejk commented 4 years ago

Hi,

I do not get any emails from you tho. Which email address did you send to? Did you send to brucejkh@gmail.com? If so, could you send it again?

yanliang-wang commented 4 years ago

Yes, that's the email. Okay, I'll send it again