-
Notifications
You must be signed in to change notification settings - Fork 788
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
OpenVINS Update #1107
OpenVINS Update #1107
Conversation
7800282
to
b9ce238
Compare
Is it still a draft or ready to be reviewed/merged? |
I'm still working on this. |
b9ce238
to
c880ab9
Compare
Hi @matlabbe , |
computeTransform() is called for every image and imu frames. I assume that we would receive IMU with stamp always equal or newer before receiving the next image (which would have always a stamp older or equal to last IMU processed). computeTransform() can return a valid transform with only IMU data if the underlaying library does so, however, we explicitly return null on upper level if it is not an image update: rtabmap/corelib/src/Odometry.cpp Lines 700 to 703 in 78c029d
This makes sure that poses returned are sync with input images and their timestamps. Returning an IMU update with future timestamps before an image update may cause issues with the how rtabmap is requiring to receive odometry poses increasing in time. I don't know how OpenVINS exactly works under the hood, for an image update, assuming it already processed newer IMU data, does it publish the pose of that image at the image stamp, or with the latest received imu stamp? where the pose would be not the pose at the image stamp, but the now corrected IMU pose and latest imu stamp received. rtabmap is expecting the pose of the image stamp when receiving an image, not a future predicted imu pose. |
Thanks for the explanation. Then we don't need to add fast_state_propagate() for IMU-only input. The ROS version of OpenVINS currently provides odometer output at the same frequency as IMU data in this manner. This is useful for AR/VR applications, but for robotics applications such high-frequency odometry output is generally not required. So let's keep it simple. OpenVINS will update state->_timestamp to the imaging time after camera input. interpolate_data() is used in select_imu_readings(). |
Big thanks to make it work with a real camera (not just euroc dataset)! So openvins would provide rtabmap/corelib/src/Odometry.cpp Lines 700 to 703 in 78c029d
upstream (maybe by posting an UEvent that can captured by the ros node) before setting the transform to null... But yeah, for VSLAM, I am only interested to pose at the image frame anyway. |
Now this can be used with stereo camera or rgbd camera (mono mode). The implementation of OpenVINS looks better than msckf_vio. Now this is ready for review and test. The dynamic initialization part is not enabled yet. Some updates will be added later.