Hi Joel!
A bit late to the party, but I made a short writeup on exactly this issue. Basically the "IncrementalFixedLagSmoother" is a very thin wrapper around iSAM2 and it has this huge pitfall which will easily lock your system in a degenerate state if not properly taken care of at the factor construction level.
When a variable in the smoother leaves the sliding window it is marginalized, but it does something a bit counter-intuitive.
> Marginalization leaves a linear approximation of the marginal in the system,
> and the linearization points of any variables involved in this linear marginal become fixed.
> Fixed variables will include any key involved with the marginalized variables in the
original factors […]
so basically if your to-be-marginalized variable is connected to any other variables in the system at that point in time, they will become fixed too which very quickly makes them useless for computing jacobians that poperly represent the system state.
I suggest that you try rebuilding factors every tick to remove any constraints pointing to the oldest state that will be marginalized, this is what I did in my system and I guess it's also why projects like LIO-SAM and Kimera-VIO work - because they do the data association itself in a sliding window fashion.
Hope that helps to clear things up!
Kind regards,
Roman