This leads to slightly slower performance but better quality.
Also replaces the VoxelFilter class by free standing functions.
Signed-off-by: Wolfgang Hess <whess@lyft.com>
This changes cartographer_ros to no longer build
Ceres and instead uses libceres-dev for which a
suitable version is provided by ROS for Kinetic.
Related to #1705.
Signed-off-by: Wolfgang Hess <whess@lyft.com>
This is to make it possible to use the proto definitions
from Python where the directory structure otherwise
prevents them from being imported in the usual way.
Signed-off-by: Wolfgang Hess <whess@lyft.com>
This makes cartographer compatible with
`--incompatible_blacklisted_protos_requires_proto_info`.
See https://github.com/bazelbuild/bazel/issues/11694
Signed-off-by: Yannic Bonenberger <contact@yannic-bonenberger.com>
Adds a new field intensities to TimedPointCloudData.
RangeDataCollator now also takes intensities into account.
AddRangeData now takes a point cloud by value instead of
const reference as we would later make a copy of it anyway.
Signed-off-by: Wolfgang Hess <whess@lyft.com>
Adds a new structure IntensityHybridGrid, similar to HybridGrid
but which stores intensities instead of probabilities.
InterpolatedGrid is adapted to handle both types of HybridGrids.
Signed-off-by: Wolfgang Hess <whess@lyft.com>
It's essentially leading to buffering all submaps twice, which
is a high (~2x) peak in memory consumption during deserialization.
Don't convert anymore since this affects _all_ pbstreams and not only
the (probably few) old pbstreams that require the conversion.
Signed-off-by: Michael Grupp <grupp@magazino.eu>
This changes the migration support to:
1. Remove migration from old files from before version 1.0.
If this is still needed by someone, they can use the tool
as it was before this change.
2. Adds migration of maps without submap histograms. These
were so far migrated on-the-fly, but #1710 aims to remove
this.
See also #1709.
This was tested by converting a serialized 3D map and verifying
it can still be used for localization. The file changed a little
bit, but it seems to be good enough.
Signed-off-by: Wolfgang Hess <whess@lyft.com>
This integrates the imu based extrapolator implementation, adds lua configuration and conversions from lua to proto. Note that the parameters of the imu based extrapolator are not tuned yet and the default is still the constant-velocity extrapolator.
Signed-off-by: mschworer <mschworer@lyft.com>
This makes use of the ExtrapolationResult returned by the pose extrapolator. ExtrapolationResult contains poses corresponding to the timestamps of range data measurements to be used for motion compensation. When using the PoseExtrapolator implementation there is no functional difference. This PR prepares the integration of ImuBasedPoseExtrapolator, which requires using ExtrapolationResult returned by ExtrapolatePosesWithGravity to run efficiently.
Signed-off-by: mschworer <mschworer@lyft.com>
This integrates the extrapolator interface into the 3D trajectory builder. The construction is now done within the interface and local trajectory builder 3D just makes use of the interface. No functional changes.
Signed-off-by: mschworer <mschworer@lyft.com>
This adds an alternative implementation for pose extrapolation which uses imu integration as well as past local SLAM results (and odometry data) to predict a pose. This allows to perform motion compensation and initialize scan matching afterwards.
Using imu data for pose extrapolation and motion compensation is more accurate, because it does not make a constant velocity assumption like the PoseExtrapolator implementation. Next steps are the integration into local trajectory builder as well as tuning the parameters for existing datasets.
This PR is quite large but was already reviewed in smaller chunks internally and combines contributions from @danielsievers, @wohe and @schwoere.
Signed-off-by: mschworer <mschworer@lyft.com>
This adds an interface around the extrapolator without further integration into any call sides.
Currently there is only a constant-velocity extrapolator implementation. The next step is to add an extrapolator implementation which integrates imu measurements for pose extrapolation.
Signed-off-by: mschworer <mschworer@lyft.com>
Enable PIC so that shared libraries can use the Cartographer
library.
Fixes the config so that dependent builds can find Abseil.
Signed-off-by: Wolfgang Hess <whess@lyft.com>
This fixes local constraint search in frozen maps built from multiple trajectories.
Local constraint search from a localization trajectory to a set of frozen trajectories
(i.e. the map) is done only among trajectories that are transitively connected in the
same connected component. If we set an initial pose, we create such a connection
to one frozen trajectory, but we were so far not able to do a local constraint search
w.r.t. to other frozen trajectories because they're not connected among each other.
Any constraints between them are not loaded (because they’re frozen).
This PR adds the possibility to use the TolerantLoss function for INS in pose graph optimization. This is currently switched off, and so there's not functional change.
The ceres TolerantLoss function (see [description](http://ceres-solver.org/nnls_modeling.html), and [implementation](https://github.com/ceres-solver/ceres-solver/blob/master/internal/ceres/loss_function.cc)) has the following property
- for large values of x it approaches a quadratic loss ("null loss") with the specified weight (fixed_frame_pose_translation_weight)
- for small values of x it approaches a quadratic loss with a smaller weight
- there's a crossover at some value x_c. The function is convex everywhere.
This fixes the bug that has been faced during localization with an initial pose and a trimmed map (OverlappingSubmapsTrimmer2D has been used). A small test is added that reproduces the problem (an infinite loop) where a trimmed trajectory (MapById instance) is used.
This package's CMakeLists.txt doesn't reference catkin at all, and can
be regarded as a "pure CMake" package. In fact, the package.xml already
states that this package is built using cmake directly, but still
depends on catkin.
This change makes the package buildable without catkin, as would be
desired when building with colcon in ROS 2.
This moves the Cartographer Open House slides to the bottom of
the README as an archive, and clarifies that regular meetings
are currently no longer happening.