Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Termination: NO_CONVERGENCE on my own dataset #46

Open
linwk20 opened this issue Aug 23, 2022 · 5 comments
Open

Termination: NO_CONVERGENCE on my own dataset #46

linwk20 opened this issue Aug 23, 2022 · 5 comments

Comments

@linwk20
Copy link

linwk20 commented Aug 23, 2022

Hi Thanks for your sharing of this excellent work!

I have ssuccessfully run ct icp on my own dataset, however, I have two question, and I hope you can help me!

(1) My dataset is collected using OS1-128 Lidar, shoud I modified any configuration in the code to adapt to the lidar?

(2) The terminal says : Termination: NO_CONVERGENCE, Is it normal? Or did I mistake something? I have post one output below, the loss is about 0.1.

Thanks for your reading!

/* ------------------------------------------------------------------------ */
REGISTRATION OF FRAME number 704 (Fid:704) with CERES solver
Number of points in sub-sampled frame: 6292
Initial ego-motion distance: 0.219946
Ceres Solver Report: Iterations: 2, Initial cost: 1.823143e-01, Final cost: 1.734975e-01, Termination: NO_CONVERGENCE
[CT-ICP]: Rotation diff: 0.25545(deg)
[CT-ICP]: Translation diff: 0.0268903(m)
Ceres Solver Report: Iterations: 2, Initial cost: 1.753664e-01, Final cost: 1.741726e-01, Termination: NO_CONVERGENCE
[CT-ICP]: Rotation diff: 0.126741(deg)
[CT-ICP]: Translation diff: 0.0156516(m)
Ceres Solver Report: Iterations: 2, Initial cost: 1.658873e-01, Final cost: 1.649816e-01, Termination: NO_CONVERGENCE
[CT-ICP]: Rotation diff: 0.064464(deg)
[CT-ICP]: Translation diff: 0.0102195(m)
Ceres Solver Report: Iterations: 2, Initial cost: 1.587869e-01, Final cost: 1.583586e-01, Termination: NO_CONVERGENCE
[CT-ICP]: Rotation diff: 0.0440787(deg)
[CT-ICP]: Translation diff: 0.00744236(m)
Ceres Solver Report: Iterations: 2, Initial cost: 1.574686e-01, Final cost: 1.567192e-01, Termination: NO_CONVERGENCE
[CT-ICP]: Rotation diff: 0.0759043(deg)
[CT-ICP]: Translation diff: 0.00731901(m)
[CT-ICP]: Correction (Optim-Init[end])=0.0200416(m)
[CT-ICP]: Correction (Optim-Init[begin])=0.0105974(m)
[CT-ICP]: Begin Pose:
-0.372328 0.927865 0.0209494 9.44271
-0.927987 -0.372542 0.00730528 54.7062
0.0145828 -0.0167208 0.999754 -0.100985
0 0 0 1
[CT-ICP]: End Pose:
-0.371037 0.928334 0.0229463 9.35357
-0.928504 -0.371265 0.00648589 54.5304
0.0145402 -0.0188992 0.999716 -0.0981214
0 0 0 1
Trajectory correction [begin(t) - end(t-1)]: 0
Final ego-motion distance: 0.197156
Elapsed Time: 63.3284 (ms)
Inserting points in the Map: Skipped Frames [0 / 5] Total Insertions: 704
Cumulative Orientation: 0.117865°
Cumulative Distance: 0.18717m
Ego Orientation: 0.147157°

[RUNNING] Bag Time: 1656034744.789619 Duration: 70.598759 / 114.797567
[CT-ICP] Logged Values:
-- icp_duration_neighborhood: 32.8843
-- icp_duration_solve: 21.011
-- icp_num_iters: 5
-- icp_total_duration: 55.9733
-- odometry_duration_sampling: 0.164952
-- odometry_initialization: 0.720628
-- odometry_initialization(ms): 6.28906
-- odometry_map_update(ms): 37.0534
-- odometry_num_keypoints: 1045
-- odometry_total: 104.93
-- odometry_total_duration(ms): 63.3284
-- odometry_transform(ms): 3.43219
-- odometry_try_register: 57.0291

[RUNNING] Bag Time: 1656034744.839663 Duration: 70.648802 / 114.797567
/* ------------------------------------------------------------------------ */

@pdell-kitware
Copy link
Collaborator

Hi again !

So, the NO_CONVERGENCE should not necessarily be a problem.
We log the ceres optimizer output, so this just means that we did not wait the ceres problem to converge.

Indeed, we limit the number of iterations of the optimizer during the ICP, in order to speed up computations.
This is really a speed tradeof, but can be modified in the parameters (see CTICPOptions::ls_max_iters parameter)
Same for the number of iterations of the ICP (which is probably set to 5 at maximum).

For the optimal parameters of the OS-128, it depends what is your goal accuracy or speed ?
For accuracy, you would want to augment the number of iterations of ct_icp and of the solver, and the number of keypoints.
For speed, what you really want is to reduce the number of keypoints and of iterations of ICP.

I am curious about your results, does it work well with the default parameters or do you have failures ?
(If you want to post a screenshot of your results it would be greatly appreciated ;) )

Note that we do a sampling of the frame and of keypoints in this frame, which should help with the massive data from the os-128.

@linwk20
Copy link
Author

linwk20 commented Aug 26, 2022

Hi. Thanks for your detailed reply!
The result did not failed in my test, but is worse than A-LOAM, and that is why I post the issue. The evaluation metric is the revisit error on my own dataset.
According to your reply, I will try tuning the algorithm for accuracy, and perform further comparison with A-LOAM, Thanks!

@pdell-kitware
Copy link
Collaborator

pdell-kitware commented Aug 26, 2022

For accuracy you should use the config config/nclt_config.yaml as a starting point

Note that the default config is really specialized for driving scenarios, and will not work at all for indoor (whereas nclt_config.yaml should behave better).

@linwk20
Copy link
Author

linwk20 commented Aug 26, 2022

Indeed, my dataset is collected in an underground indoor parking lot.
Thanks, I will try tuning.

@linwk20
Copy link
Author

linwk20 commented Aug 28, 2022

I have tried the OS-128 config and tuned keypoints num and voxel size.
The ICP converged, but the result seems not become better.
Do you have any advice for tuning?

Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants