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.
Fixes the problem of ever-growing memory after `rosbag play --clock` finishes,
as discussed in https://github.com/googlecartographer/cartographer/issues/1182
The wall timers caused the timer callback that publishes TF data to be called
even if no simulated `/clock` was published anymore.
As the TF buffer cache time of the TF listener seems to be based on
the ROS time instead of wall clock, it could grow out of bounds.
Now, `ros::Timer` plays nicely with both normal (wall) and simulated time and
no callbacks are executed if `/clock` stops in simulation.
( Trying again, accidentally deleted source branch for previous PR )
Related issue: #577
The min/max range default to the same as the backback_2d examples; same thing for the URDF file.
However, the name of both the config file and the launch file are kept generic.
Added RegisterPointsProcessor method to AssetsWriter class. This allows to register new points processors to the pipeline builder.
As the new points processors may write files to the disk, the CreateFileWriterFactory method is exposed.
As per ROS [tutorials](http://wiki.ros.org/ROS/Tutorials/DefiningCustomMessages#Dependencies)
Edit: For future readers, the linked tutorial was referring to `run_depend` from package format 1 as pointed out by @ojura, it has now been updated to refer to `exec_depend` from format 2
Extracted class Assets_Writer from RunAssetsWriterPipeline.
The idea is to increase the re-usability and flexibility of the assets_writer: In next PR, the assets_writer will allow registering external points_processers to the points processing pipeline. This requires having a class instead of a static method to allow for different states.
The assets writing method was split into several calls to sub-routines.
RunAssetsWriterPipeline now calls sub-routines creating objects from files and then runs the pipeline using the created objects. This should increase readability of the method.
Until now, the error response of an /finish_trajectory request for a
frozen trajectory was 'Trajectory ... is not created yet.'.
This is a lie. The new response is more accurate because the trajectory
__is__ created, but it just can't be finished because it's frozen.
A simple solution for a slightly more complex scenario:
- a pure localization trajectory `X` gets finished & trimmed in the main node
- at the same time, the occupancy_grid_node handles an outdated SubmapList
message in which a submap ID `id` of trajectory `X` is still present
- the call to FetchSubmapTextures(`id`, ...) leads to a crash
With this fix, the trimmed submap IDs are just ignored until the next
iteration (in which the occupancy grid node removes the trimmed IDs).
Moved the run method of the assets_writer_main to the separate assets_writer files.
Will extract asset_writer class in the future to keep the main file small and allow re-usability and more flexibility of the asset_writer.
Adds a tool to measure the difference between a trajectory from a pbstream and one given by tf messages in a bag file, and a script to evaluate real-time pure localization poses compared to a globally optimized mapping poses.