So far it creates statistics over timing information of the sensor data that Cartographer cares about. It also reports if time jumps backwards for a sensor.
Also updates the GitHub issue template to ask users to run this binary when reporting issues.
I verified that this tool is sufficient to analyze all the timing related issues mentioned in #529.
* OgreSlice has a slice_id.
This is necessary because we will have multiple OgreSlices
and Ogre requires unique names for textures and other entities.
* Visualize both high and low res slices.
Adds checkboxes to the rviz plugin to show high and low
resolution slices.
DrawableSubmap now holds a vector of OgreSlices and
decides which slices are visible.
* Corrections. Move slice visibility to OgreSlice.
Renames OgreSubmap to OgreSlice in preparation for that a
DrawableSubmap should hold multiple OgreSlices, so multiple
types of slices for one submap can be visualized.
This changes the Ros api that multiple textures will be returned,
which are forwarded from the Ros service call.
Adapts all usages to follow this new api.
Since these contain timing information, we can use the SLAM trajectory
to compensate for ego motion (unwarp) and the TF messages and URDF to
compensate for sensor-to-tracking motion.
This improves quality greatly.
Handle the protobuf change from
googlecartographer/cartographer#519
by forwarding the first SubmapTexture if multiple are available.
* Nit.
* Check.
* Nit.
The offline node will now only write the pbstream with the results if the
node finished processing without being interrupted. Partial results are
no longer written.
This also adds logging so that it is clear whether output was written.
This moves adding IMU data to the extrapolator to
Node::HandleImuMessage() so that in the offline node extrapolation
for tf publishing can benefit from IMU data.
Fixes crash in offline node by setting the trajectories as active
as they are added.
The checks in ValidateTrajectoryOptions() are both obsolete. Instead
we now just check that the correct trajectory builder options exist
at all.
Also checks options in Node::StartTrajectoryWithDefaultTopics() now.
This adds trajectories at the Node object. It makes sure all
necessary extrapolators exist. Before the offline node would crash
when extrapolating.
Also deduplicates the logic to compute the topics for a trajectory.
Adds a 'map_node_' which gets updated with the transform to RViz's
fixed frame. Before, submaps rendered incorrectly if a fixed frame
different from the map frame was chosen.
Removes the map frame property since this data is published on the
submap list topic.
Renames node names to reflect the frames they represent.
It can happen that ros::Time::now() is slightly behind the latest pose
timestamp if sensor data had newer timestamps. We would crash before.
Instead, we now publish the latest pose which is even newer that what
we tried to publish before.