This commit includes the following: - Changes to CMake to make it safer to see which compiler flags are supported, so this way we do not need to worry about version checks in CMake. - Unix platforms (which includes both Linux and Apple as far as i can tell) will now enable -Wmissing-declarations warning for the whole Ceres. - Changes in all sources to solve missing declaration warning. In most cases it was either matter of using static qualifier or moving functions to an anonymous namespace. In one case the function got removed, since it seems to be unused. Additionally, in slam examples there was a non-inlined function implementation in a header, which is a direct way to cause linking errors if other .cc file will include that helper header. - All third party sources (which is currently only gmock) has this extra paranoid warning disabled. This warning is important in the following cases: - Detect helper functions which are not needed anymore. - Avoid unnoticed pollution of namespace. - Avoid bad level calls. - Avoid missing updates in header files after changes in implementation file. - Helps integrating Ceres into software where paranoid warnings are important. Change-Id: I9b1044aced3910d8c6b2356cfe2bf57f3c8c58db
Pose Graph 2D
The Simultaneous Localization and Mapping (SLAM) problem consists of building a map of an unknown environment while simultaneously localizing against this map. The main difficulty of this problem stems from not having any additional external aiding information such as GPS. SLAM has been considered one of the fundamental challenges of robotics. A pose graph optimization problem is one example of a SLAM problem.
This package defines the necessary Ceres cost functions needed to model the 2-dimensional pose graph optimization problem as well as a binary to build and solve the problem. The cost functions are shown for instruction purposes and can be speed up by using analytical derivatives which take longer to implement.
Running
This package includes an executable pose_graph_2d that will read a problem
definition file. This executable can work with any 2D problem definition that
uses the g2o format. It would be relatively straightforward to implement a new
reader for a different format such as TORO or others. pose_graph_2d will print
the Ceres solver full summary and then output to disk the original and optimized
poses (poses_original.txt and poses_optimized.txt, respectively) of the
robot in the following format:
pose_id x y yaw_radians
pose_id x y yaw_radians
pose_id x y yaw_radians
...
where pose_id is the corresponding integer ID from the file definition. Note,
the file will be sorted in ascending order for the pose_id.
The executable pose_graph_2d has one flag --input which is the path to the
problem definition. To run the executable,
/path/to/bin/pose_graph_2d --input /path/to/dataset/dataset.g2o
A python script is provided to visualize the resulting output files.
/path/to/repo/examples/slam/pose_graph_2d/plot_results.py --optimized_poses ./poses_optimized.txt --initial_poses ./poses_original.txt