Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Release Candidate March 2018
This branch currently requires a special dependencies branch:
maplab_dependencies/#167
Please note that this is a release candidate and needs further testing. If you would like to give it a try, please do so, but read the release notes carefully. This version does not yet conform to the descriptions, tutorials and reported performance in the wiki! We are happy for any feedback you can provide regarding the localization and map merging performance, as well as the compatibility with your ARM devices.
How to update
There is a new submodule in dependencies, please do the following:
TODOs
Changes
Gridded Feature Detector
Multithreaded and more evenly distributed feature detection. It is enabled by default, but can be disabled using this flag:
--feature_tracking_gridded_detector_use_gridded=false
Credits: @floriantschopp
Refactoring of the SensorManager
The SensorManager now also owns all the sensors, including the NCamera.
Credits: @mbuerki
Optional Sensor/Camera Resources
While the camera images that are used for visual odometry can be associated clearly with one vertex of the pose graph, some resources (images, point clouds, GPS measurements) cannot. These resources might originate from a sensor that is not triggered at the same time as the primary camera setup (e.g. RGB-D camera, color cameras, lidars, GPS). These sensors or cameras can now be stored in the SensorManager and their data attached to a specific mission and timestamp.
Credits: @mfehr, @mbuerki
Resource Importer
This tool allows you to attach optional resources such as images, depth maps or point clouds to an existing VIMap. The main application we had in mind is to attach the point cloud or depth maps of an RGB-D sensor (e.g. ZR300) to the VIMap, such that they can be used to create a dense 3D reconstruction with the tools described here. Instructions how to use it can be found here.
Credits: @mfehr
maplab now builds on ARM
We added experimental support for ARM devices such as the Nvidia Jetson TX2. Even though we currently do not have a ARM build server, we have tested this for ARMv7-A and ARMv8-A (list of ARM architectures). See these issues for more details: Build maplab on ARMv7-A (32bit) #7 Failure to compile in Nvidia TX2 (ARM) #12 Failure to compile in Nvidia TX2 (Aarch64) #18
Credits: @fabianbl, @Alabate
Function to artifically disturb VIMap
We introduced a new feature to artificially disturb the VIMap. This function is used mostly for unit testing, but is very useful to develop and debug bundle adjustment and loop closure algorithms.
In file:
algorithms/vi-map-helpers/include/vi-map-helpers/vi-map-manipulation.h
Credits: @eggerk
Changes from previous release candidate (January 2018)
ROVIOLI - Localization using Structure Constraints:
Previous Version:
The localization, represented by
T_G_M
(the transformation from mission/odometry to global frame), was estimated by ROVIO as part of its state based on updates sent by the feature-based localization. These updates contained a 6-DoF global pose estimate (T_G_I
) with a constant, hard-coded covariance.Update:
This release introduces structure localization. ROVIO no longer receives localization updates as the 6-DoF global pose (
T_G_I
), but receives 2D-3D matches and updates the state using reprojection errors. These 2D-3D matches denote the correspondences between localization map landmarks and keypoints in the frame we are trying to localize. Assuming a constant, isotropic covariance of the localization landmark positions yields a better performance than assuming a constant covariance of the 6dof pose constraint. Furthermore we integrated a reset logic that resets the localization state when a large change is detected, i.e. when re-localizing after leaving the localization map for some time.Effects:
T_M_I
) is now more stable and is not affected anymore by jumps in the localization. This is crucial for robot control, which is usually performed on the locally consistent, but more stableT_M_I
rather than the globally consistent, but potentially discontinuousT_G_I
..
Credits: @schneith, @dymczykm
ROVIOLI - Health checker:
New Feature:
ROVIOLI now comes with a health checker that monitors the current state of the odometry and if it detects a divergence, resets the state to what it assumes to be the last stable state. Currently the following health criterion are implemented:
Since an unexpected VIO reset can cause considerable damage, e.g. on a flying platform, we disabled this feature by default. However, we highly recommend that you give it a try and enable it with:
--rovioli_enable_health_checking
Effects:
.
Credits: @dymczykm
maplab/ROVIOLI - Rotation invariant descriptors
Update:
This feature was basically already there in the initial release, however by default it was always disabled, as the rotation invariance lead to a slightly lower overall descriptor matching performance if the camera orientation is static. However to make ROVIOLI applicable to the general use-case, e.g. down facing aerial cameras or end-effector cameras on robotic arms we now enabled this option by default. It can be switched on/off using the following flag:
--rovioli_descriptor_rotation_invariance
Effects:
--feature_tracking_descriptor_rotation_invariance
..
ROVIOLI - Unified maplab and rovio sigmas
Previous version:
Due to a difference in the convention of the IMU parameters, two separate IMU parameter files for ROVIO and maplab had to be passed to ROVIOLI.
Update:
We unified the parameters and it now suffices to simply pass the maplab IMU parameters to ROVIOLI.
Effects:
--imu_parameters_maplab=$IMU_PARAMETERS_MAPLAB
--external_imu_parameters_rovio=$IMU_PARAMETERS_ROVIO
.
ROVIOLI - Intel Realsense ZR300 ROS publisher and parameters
New feature:
Even though the ZR300 has been discontinued, it is still one of the most capable, affordable and publicly available visual-inertial sensors. We therefore added a template calibration for camera and IMU to facilitate the integration of ROVIOLI on this sensor. The files can be found in
maplab/applications/rovioli/share
.Furthermore, to improve the support of this sensor on Ubuntu 14.04 and 16.04 we provide a dedicated ROS sensor node here: maplab_realsense We also re-organized the calibration files to correspond to the three sensor we provide calibration templates for, the ZR300, the Skybotix VI-sensor and the Google Tango Yellowstone tablet.
Credits: @mfehr
ROVIOLI - Improve latency of pose estimation
Previous version:
The ROVIO filter update is triggered by the
RovioInterface
object. We have discovered that the update was triggered unnecessarily late, only after the next camera frame was feeded to ROVIO. For instance, for a framerate of 10Hz it resulted in an additional 100ms delay of the pose output. This behavior can lead to issues if someone wants to directly control an agile robot (e.g. an MAV) using the pose output of ROVIOLI.Update:
The logic of updating the ROVIO filter has been changed and the updates are processed as soon as they leave the update queue. The filter is no longer waiting for the next image to start processing the previous updates.
Effects:
ROVIOLI pose estimates are published with a smaller latency. This is particularly important for real-time systems and control purposes.
Credits: @dymczykm