One of the main differences is that fovis_ros supports mono+depth input as well as stereo and viso2_ros supports mono and stereo (but no mono+depth). If you use just a kinect, you will likely get better results using fovis_ros as with viso2_ros you can only use the mono_odometer which has several drawbacks (needs features on the floor and needs to know pitch and height of camera). If you use a stereo camera you can try both algorithms and look which works best for you.
fovis_ros offers a little more introspection which eases the tuning of parameters (compare FovisInfo to VisoInfo). It also has keyframe selection built in. For viso2_ros we hacked a solution to prevent drift on top of the library which is not very well tested.
Long story short:
If you have a kinect, use fovis_ros. If you have a stereo camera, try both and look what works best for you. If you have a mono camera, use viso2_ros.
Hope that helps!
Which works better for you?
I'm getting better results from fovis_ros because it uses both depth and rgb. There are tf issues if you rely on the tf odom->base_link that fovis publishes. Errors arise if the messages are not perfectly in sync...
Please report any bugs regarding fovis_ros here.
I don't think the bug is in fovis_ros necessarily. The time stamp syncing between messages becomes delayed via a main launch file that launches every node for the robot. I believe this is the processor's fault. To compensate, I added a rate.sleep() in the odometer_base.hpp, increased the queue...
...to 10 and changed how fast the WallDuration was requesting synchronization.