├── .clang-format
├── .conda_config
├── .gitignore
├── CMakeLists.txt
├── LICENSE
├── README.md
├── experiments
├── CMakeLists.txt
├── include
│ ├── FixedLagBackend.h
│ ├── JRL-custom.h
│ ├── JRL.h
│ ├── JRLFrontend.h
│ ├── LMBackend.h
│ ├── MEstBackend.h
│ └── tqdm.h
└── src
│ ├── FixedLagBackend.cpp
│ ├── JRL-custom.cpp
│ ├── JRLFrontend.cpp
│ └── MEstBackend.cpp
├── figures
├── header.pdf
├── header.py
├── header_animated.py
├── monte_carlo.py
├── readme.gif
├── sabercat_results.pdf
├── sabercat_results.py
├── sim.pdf
├── sim.py
├── sim_monte_carlo_ideal.pdf
├── sim_monte_carlo_real.pdf
├── surface.pdf
├── surface.py
├── tukey.pdf
└── tukey.py
├── python
├── CMakeLists.txt
├── CMakeMacros.txt
├── bindings.cpp
├── rose
│ ├── __init__.py
│ ├── dataset.py
│ ├── datasets
│ │ ├── flat.py
│ │ ├── grizzly.py
│ │ ├── kaist.py
│ │ └── sabercat.py
│ ├── jrl.py
│ ├── plot.py
│ └── sim.py
└── setup.py.in
├── requirements.in
├── rose
├── CMakeLists.txt
├── include
│ └── rose
│ │ ├── PlanarPriorFactor.h
│ │ ├── WheelBaseline.h
│ │ ├── WheelFactorBase.h
│ │ ├── WheelRose.h
│ │ └── ZPriorFactor.h
└── src
│ ├── WheelBaseline.cpp
│ ├── WheelFactorBase.cpp
│ └── WheelRose.cpp
├── scripts
├── 2jrl_run.py
├── optimize_cov.py
├── results.py
├── run_sabercat.sh
├── sim.py
└── sim_monte_carlo.py
└── tests
├── CMakeLists.txt
├── main.cpp
├── test_CombinedIMUFactor.cpp
├── test_Factors.cpp
├── test_IMUBias.cpp
├── test_JRL.cpp
├── test_Jacobians.cpp
└── test_StereoFactor.cpp
/.clang-format:
--------------------------------------------------------------------------------
1 | ---
2 | ColumnLimit: 120
3 | IndentWidth: 4
--------------------------------------------------------------------------------
/.conda_config:
--------------------------------------------------------------------------------
1 | rose
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .vscode
2 | build
3 | data
4 | data-new
5 | /*.png
6 | __pycache__
7 | *.jrr
8 | *.jrl
9 | *.yaml
10 | *.log
11 | *.png
12 | *.gif
--------------------------------------------------------------------------------
/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | #################### BASIC SETUP ####################
2 | cmake_minimum_required(VERSION 3.16)
3 | project(ROSE VERSION 0.1 LANGUAGES CXX)
4 |
5 | set(CMAKE_CXX_STANDARD 17)
6 |
7 | option(EXPERIMENTS "Build experiments" OFF)
8 |
9 | #################### IMPORT DEPENDENCIES ####################
10 | find_package(GTSAM REQUIRED)
11 |
12 | #################### ADD TARGETS ####################
13 | add_subdirectory(rose)
14 |
15 | if(EXPERIMENTS)
16 | add_subdirectory(experiments)
17 | add_subdirectory(python)
18 | add_subdirectory(tests)
19 | endif(EXPERIMENTS)
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Robot Perception Lab
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ROSE: Robust Off-road wheel odometry with Slip Estimation
2 |
3 | This is the public repository for ROSE, a factor for incorporating wheel odometry measurements into factors graphs to provide increased accuracy, redundancy, and robustness.
4 |
5 |
6 |
9 |
10 |
11 | ROSE does this by integration wheel odometry in 6D using a piecewise planar method, as well as estimating slip and wheel intrinsics online. To learn more, please checkout our paper (TODO: Insert link).
12 |
13 | ## Building
14 |
15 | By default, ROSE only builds the wheel factors for usage in gtsam. It's only dependency when used like this is [gtsam 4.2](https://github.com/borglab/gtsam/releases/tag/4.2). This can be done simply using cmake,
16 |
17 | ```bash
18 | mkdir build
19 | cd build
20 | cmake .. -DCMAKE_BUILD_TYPE=Release
21 | make
22 | sudo make install
23 | ```
24 |
25 | If you are interested in running our experimental setup, you'll need a [slightly custom version of gtsam](https://github.com/contagon/gtsam/tree/my-helpers-4.2) and the latest version of [JRL](https://github.com/DanMcGann/jrl). Once you have the python wrappers for both of these installed, things are built identically using cmake and make,
26 |
27 | ```bash
28 | mkdir build
29 | cd build
30 | cmake .. -DCMAKE_BUILD_TYPE=Release -DEXPERIMENTS=ON
31 | make
32 | sudo make install
33 | ```
34 |
35 | ## Citation
36 |
37 | If citing, please reference TODO
38 |
39 | ## TODO
40 |
41 | - [ ] Fill out TODOs here once published (at least on arxiv)
42 | - [ ] Figure out licensing stuff
43 |
--------------------------------------------------------------------------------
/experiments/CMakeLists.txt:
--------------------------------------------------------------------------------
1 | cmake_minimum_required(VERSION 3.11)
2 |
3 | find_package(jrl REQUIRED)
4 |
5 | # Create Library
6 | add_library(experiments
7 | src/JRL-custom.cpp
8 | src/JRLFrontend.cpp
9 | src/FixedLagBackend.cpp
10 | src/MEstBackend.cpp
11 | )
12 |
13 | # Set Library Properties
14 | target_include_directories(experiments PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/include")
15 | target_link_libraries(experiments PUBLIC jrl rose)
--------------------------------------------------------------------------------
/experiments/include/FixedLagBackend.h:
--------------------------------------------------------------------------------
1 | #pragma once
2 |
3 | #include