The course materials and instructions can be found at KTH Canvas .
Please download pointcloud data here, Then declare the path to the data in the launch file run_pgo.launch.
The software was developed on the following dependancies, Test System: Ubuntu 20.04, ROS Noetic full-desktop
Printer logger (glog, gflag are also dependencies on Ceres)
# maybe need sudo if you are running it in your desktop
curl -sL https://raw.githubusercontent.com/Kin-Zhang/Kin-Zhang/main/Dockerfiles/installGlog_ownenv.sh | bash
Solver: Ceres 2.1.0 (do checkout the branch 2.1.0 after git clone)
git clone https://ceres-solver.googlesource.com/ceres-solver
cd ceres-solver && git fetch --all --tags
git checkout tags/2.1.0
mkdir build && cd build
cmake .. && make -j$(nproc)
sudo make install
Please install all dependencies first. Afterwards, create a ros workspace, clone the package to the workspace, and build by catkin build
or catkin_make
, for e.g.:
mkdir -p oblam/src
cd oblam/src
git clone https://github.com/brytsknguyen/oblam_pgo
cd ../..; catkin build
After finished the assignment part, run the launch
source devel/setup.zsh
roslaunch oblam_pgo run_pgo.launch
Go to the function OptimmizePoseGraph() and create a ceres problem and solve it. If it works you should see a loop closure event like this.
Video Here:
export.mp4
The ATE for ablation study:
Config | ATE |
---|---|
No loop closure | 1.8518 |
loop closure only on prior | 1.8518 |
loop closure only on relative pose | 1.8573 |
loop closure on both of them | 0.7235 |