OpenVINS is an open-source research platform for visual-inertial estimation, and contributions from the community are welcome. The project is licensed under GPL-3.0, which means all derivative works and contributions must be made available under the same license. Before submitting a pull request, familiarize yourself with the coding conventions, automated formatting tools, and CI pipeline described on this page.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/rpng/open_vins/llms.txt
Use this file to discover all available pages before exploring further.
Contribution Workflow
Fork and clone the repository
Fork the rpng/open_vins repository on GitHub, then clone your fork locally.
Make your changes
Write your code following the coding style conventions below. Ensure all public functions and classes include Doxygen doc comments. Update or add unit tests where appropriate.
Run the code formatter
Before committing, run The script applies
run_format.sh from the repository root to apply clang-format across all packages. This is required — the CI pipeline will fail if formatting is inconsistent.clang-format with the project’s style file to all C/C++ source files across the four core packages:Coding Style
The codebase uses snake_case throughout — for variable names, function names, and file names. Rotation matrices are the one exception and start with a capital letter. All functions must be documented both inline and in the header with Doxygen comments.Naming Conventions
Orientation and position variables must carry their reference frames explicitly:Print Levels
Use the built-in print macros (PRINT_ALL, PRINT_DEBUG, PRINT_INFO, PRINT_WARNING, PRINT_ERROR) instead of raw printf or std::cout. The verbosity level is configurable at runtime:
| Macro | Level |
|---|---|
PRINT_ALL | Verbose trace output |
PRINT_DEBUG | Debug-level information |
PRINT_INFO | General operational information |
PRINT_WARNING | Non-fatal warnings |
PRINT_ERROR | Error conditions |
General Formatting Principles
- 4-space indentation (no tabs)
- Prefer vertical and horizontal compression — more code on screen while remaining readable
- Long lines are acceptable where readability benefits (e.g., Jacobian expressions)
- Every header file must use an include guard
Building the Documentation
OpenVINS uses Doxygen for API documentation, post-processed by m.css for the rendered website.Build the PDF Reference Manual
Install dependencies
You may need Doxygen 1.9.4 or newer to avoid ghostscript errors. See this Stack Overflow answer for instructions on installing a newer version.
Build the Documentation Website
Adding a New Documentation Page
- Create
docs/pagename.doxwith the up-to-date license header. - Add a
@pagedefinition and title. - If top-level, list it in
docs/00-page-order.dox. - If a subpage, add it with
@subpagein its parent page. - Use
@sectionand@subsectionto structure the content.
CI/CD Pipeline
Every push tomaster and every pull request triggers three GitHub Actions workflows defined in .github/workflows/:
ROS 1 Workflow (build_ros1.yml)
ROS 1 Workflow (build_ros1.yml)
Builds and runs the simulation on Ubuntu 16.04, 18.04, and 20.04 using Docker images. Each job:
- Builds using
catkin build - Launches the simulation:
roslaunch ov_msckf simulation.launch verbosity:=WARNING
ROS 2 Workflow (build_ros2.yml)
ROS 2 Workflow (build_ros2.yml)
Builds on Ubuntu 18.04, 20.04, and 22.04 using Docker images and
colcon build. The simulation step is executed on Ubuntu 20.04:ROS-Free Workflow (build.yml)
ROS-Free Workflow (build.yml)
Verifies that the core library builds without any ROS dependency using plain CMake on Ubuntu Latest. Dependencies installed:
Reporting Issues
When opening a GitHub issue, include:- Platform: OS version, ROS distro (if applicable)
- Reproduction steps: minimal launch file or dataset used
- Expected vs. actual behavior: what you expected and what happened
- Relevant logs: set
verbosity:=DEBUGand paste the output