I ended up solving my issue.
Turns out, the create_robot package publishes a transform from odom -> base_footprint. I needed to toy around with my transforms so that:
slam-toolbox created map -> odom
create_robot created odom -> base_footprint
On top of those two things, I had an issue with timing where the transform from map -> base_link did not ...
I have a github project that extracts the visual inertial simulator from OpenVins to its own mini project.
I think it fulfills your needs. Gives you access to the ground truth poses, features,feature positions, ... .
If you ignore the inertial data portion then it is also not too hard to create your own. Just generate ...
The most traditional method is to keep looking at the trajectory and see if your current location is close enough to the previously visited place. Once this happens run the ICP. If ICP converged normally, that is your loop closure.
A bit more advanced method is doing a place recognition. Generate a keyframe every few meters and extract a feature descriptor ...
The simplest explanation will be:
In structure from motion, it estimates structure(xyz points), camera locations, camera intrinsic.
In graph optimization, it only estimates camera locations. In the graph SLAM, the structure is just a by-product of a corrected trajectory or graph nodes.
E.g. implementing Bundle adjustment with g2o -> You can do it by ...
Yes, it is possible. That is often called a heterogeneous stereo camera.
Step1: stereo camera calibration.
Find relative camera location to each other (extrinsic).
Find camera lens distortion parameters (intrinsic).
Lens distortion is simply done by usual camera calibration but for the extrinsic finding, you need a bit of coding.
Step2: image rectifying