RonaldSun/VI-Stereo-DSO

Questions in terms of EnergyFunctional::marginalizeFrame_imu function

Opened this issue · 5 comments

Hi,

I read through your code and I have a question in the EnergyFunctional::marginalizeFrame_imu function (in EnergyFunctional.cpp).

J_all_half is not added to any matrix after calculation. Theoretically it should be added to HM_change_half like how J_all is processed. Maybe it should be something like:
HM_change_half += (J_all_half.transpose()*Weight*J_all_half);

In current implementation HM_change_half is always zero matrix at the end. Is it a mistake or it should actually work this way?

Thank you!

Hi
HM_change_half shouldn't be zero theoretically. In my test, dynamic margin dosen't perform well so I set HM_change_half to zero and put off dynamic magrin. Actually HM_imu_half has no effect

Thanks for your reply.

But I noticed that use_Dmargin is set to true in main_dso_pangolin.cpp. So actually dynamic marginalization is running, but the HM_imu and bM_imu is reset to zeros when dynamic marginalization happens (because the HM_imu_half and bM_imu_half are zeros)? Can I turn on the dynamic marginalization by simply assigning value to HM_change_half as I mentioned above?

Yes, you can try. I set use_Dmargin to False at here
https://github.com/RonaldSun/VI-Stereo-DSO/blob/master/src/OptimizationBackend/EnergyFunctional.cpp#L1330-L1335
You can modify it yourself.

So you turn off use_Dmargin after M_num2>25, but before that dynamic marginalization could still happen. In that case HM_imu and bM_imu are reset to zeros when it happens (essentially removing previous marginalization information)? Does that affect the stability of the system?

Thank you!

It shouldn't have much impact. In my test M_num2 will exceed 25 very soon.