As @ojura reported and explained in #940, there is a critical issue with the new changes introduced in the mentioned PR, which significantly slows down the offline node.
- The reason of this problem was that In order to count the number of processed messages the `std::distance` function was used which is computationally expensive(O(n)).
- Instead, the former `log_counter_` and now `message_counter_` class variable which was used to print a message every X seconds is also employed to count the number of the processed (and also skipped) messages.
We have already a cloned source space in the base image, which can be
buggy according to: https://github.com/vcstools/wstool/issues/77
This should unblock Travis and fix local builds.
Set the visibility in he constructor, otherwise the setting won't have
an effect on newly created submap slices unless it's toggled again.
Somehow this got lost in #1012, sorry for that.
...and use `LoadStateFromFile` from `MapBuilderStub`. The `LoadState` stub
that's used in `Node::LoadState` streams the state file instead, which can now
be used by explicitly setting the `--upload_load_state_file` flag.
Solves problems with the gRPC message size limit when loading large state files.
The roslaunch API throws an exception if setting the argument but not using it.
This now forces any including launch files to provide an argument for it, even if it might not be used in the `no_rviz` case.
- default to false in gRPC node (unsupported in `MapBuilderStub`)
- default to true in classic ROS nodes (as it was before)
- add as parameter to `write_state`
googlecartographer/cartographer#1286 modified Submap::ToProto such that grids for unfinished submaps are no longer serialized. This commit fixes the breakage this introduced in the pbstream exporting binaries.
This is useful for tuning/debugging to rule out (simulated) time issues
(because published pose will then only depend on header times).
Another use case is when Cartographer runs on a separate machine
that has a different system clock than the sensors.
This adds a .clang-format file, so that git clang-format uses
Google style without the need to remember the commandline flag.
Similar to googlecartographer/cartographer#1249.
To compare different SLAM software online, it is necessary to
disable tf broadcast.
Because we already have a parameter "pose_publish_period_sec",
we use a zero value here to turn off tf broadcast.
This PR adds additional bookkeeping for trajectories that we scheduled for
finishing.
In Node::RunFinalOptimization(...), we were calling FinishTrajectory for
every active trajectory (state == ACTIVE). Since the state only gets updated
once the corresponding worker for the FinishTrajectory task is
scheduled, we were potentially calling FinishTrajectory twice for a
single trajectory id.
Reproducible on master e.g. with
```
roslaunch cartographer_ros offline_backpack_2d.launch bag_filenames:=b2-2016-02-02-14-01-56.bag no_rviz:=true
```
[RFC 24](https://github.com/googlecartographer/rfcs/blob/master/text/0024-monitoring-ros.md)
Public API:
- adds `cartographer_ros::metrics::FamilyFactory`
- compatible with `::cartographer::metrics::RegisterAllMetrics`
Public RPC interface:
- adds the ROS service `/read_metrics`
- response contains the latest values of all available metric families
In cartographer we check for strict ordering, i.e. do not allow
subsequent timestamps to be exactly equal. This fixes the rosbag validation tool
to do the same.