Resource efficient/adaptive communication policies for multi-robot cooperative SLAM. This is joint work between the Aerospace Controls Lab at MIT and STARS Lab at UofT. If you use any of this code in your work, please cite the relevant publication:
@article{giamou2017talk,
title = {Talk Resource-Efficiently to Me:
Optimal Communication Planning for Distributed SLAM Front-Ends},
author = {Giamou, Matthew and Khosoussi, Kasra and How, Jonathan P},
journal = {IEEE} Int. Conf. Robot. Autom. ({ICRA})},
year = {2018}
}
@article{tian2018near,
title = {Near-Optimal Budgeted Data Exchange for Distributed Loop Closure Detection},
author = {Tian, Yulun and Khosoussi, Kasra and Giamou, Matthew and How, Jonathan P and Kelly, Jonathan},
journal = {Robotics: Science and Systems},
year = {2018}
}
All code and experiments were developed and run on Ubuntu 14.04 with MATLAB R2017b, Python 2.7.6, and GCC/G++ 4.8.4.
Sergii Iglin's grTheory toolbox is used, as well as Guillaume Jacquenot's polygon intersection code. Both packages are included in the source code (src/icra/matlab
).
Python is used to parse KITTI odometry benchmark data and create the graph instances tested in our paper. We have included these graph instances in this repository (src/icra/data/odometry
) but also include the code that generates them. This code depends on the following packages:
To generate sample measurement exchange graphs, we used DBoW2. The C++ code used to generate the graphs in our paper is included but not needed to run the core optimal communication algorithms.
The code for our ICRA 2018 paper listed above is in the folder src/icra
. The core functionality is the simple Matlab function src/icra/matlab/solve_odep.m
. This function can be called on a weighted graph by passing in a set of vertex pairs representing edges as an (N, 2)
matrix and a size N
vector of vertex weights. The Matlab Gurobi interface was used to solve the ODEP problem instances as it is faster than the built-in Matlab linprog
function. If you have access to Gurobi, solve_odep.m
takes a third optional boolean argument that indicates the function should use Gurobi if true.
To generate the plots in our paper, run the script src/icra/matlab/generate_icra2018_paper_plots.m
. This script uses the .mat
files in src/icra/data/
, which can be re-generated with the script src/icra/matlab/generate_icra2018_paper_results.m
. Run the scripts from within src/icra
to use the file paths as they are currently written.
See the scripts src/icra/matlab/simple_example_graph.m
and src/icra/matlab/simple_random_example_graph.m
for small examples that use solve_odep.m
on toy problems.
The code for our RSS 2018 paper listed above is in the folder src/rss
. To reproduce the plots run src/rss/matlab/generate_KITTI_plot.m
, which uses data generated by src/rss/matlab/generate_KITTI_result.m
.