Thank you for your interest in contributing to MOLA. This document outlines the process and expectations for contributing to this project. Please read it carefully before submitting any contribution.
MOLA is a modular SLAM and localization framework written in C++ with ROS 2 support. We welcome contributions from the community, provided they meet the quality and legal requirements described below.
- Contributor License Agreement
- Code of Conduct
- Types of Contributions
- Getting Started
- Development Workflow
- Commit and Pull Request Guidelines
- Coding Standards
- Testing Requirements
- Documentation
- Review Process
- Reporting Issues
All contributions to MOLA require acceptance of the Contributor License Agreement (CLA) prior to being merged.
MOLA is distributed under a dual licensing model:
- Open source: GNU General Public License v3 (GPL v3)
- Commercial: A separate commercial license is available for industry users who cannot comply with the terms of the GPL v3
The CLA ensures that the project maintainers hold the necessary rights to distribute your contribution under both licensing models. It does not transfer copyright ownership — you retain full ownership of your work.
When you open a Pull Request, an automated CLA assistant will verify whether you have previously accepted the agreement. If you have not, you will be prompted to do so before the PR can be reviewed or merged. Contributions submitted without CLA acceptance will not be considered.
All contributors are expected to adhere to the project's Code of Conduct. We are committed to maintaining a welcoming and professional environment for everyone, regardless of background or experience level. Violations may result in removal from the project.
We welcome the following types of contributions:
- Bug fixes — corrections to incorrect or unexpected behavior
- Performance improvements — optimizations with measurable, documented impact
- New modules or algorithms — extensions to MOLA's modular architecture
- Documentation improvements — corrections, clarifications, and additions to existing documentation
- Dataset integrations — support for additional SLAM benchmark or real-world datasets
- ROS 2 integrations — improvements to the ROS 2 interface, launch files, or message definitions
- Tests — new or improved unit, integration, or regression tests
If you are considering a large or architectural contribution, please open an issue for discussion before beginning work. This avoids duplication of effort and ensures alignment with the project roadmap.
Full setup instructions, dependencies, and build guides are available in the official documentation:
Ensure your development environment is fully configured and that all existing tests pass before making any changes.
- Fork the repository and create a new branch from
main(or the relevant base branch). - Name your branch descriptively, e.g.
fix/imu-integration-driftorfeat/lidar-odometry-module. - Make your changes in focused, logically grouped commits.
- Ensure all tests pass locally before opening a Pull Request.
- Open a Pull Request against the
mainbranch with a clear description of your changes.
Do not submit Pull Requests that bundle unrelated changes. Each PR should address a single concern.
Commits
- Write commit messages in the imperative mood:
Fix timestamp alignment in IMU handler, notFixedorFixes. - Keep the subject line under 72 characters.
- Reference relevant issues in the commit body where applicable, e.g.
Closes #123.
Pull Requests
- Provide a clear summary of the problem being solved and the approach taken.
- Include references to any related issues, discussions, or prior art.
- If the PR introduces a user-visible change, update the relevant documentation and changelog.
- Mark the PR as a draft if it is not yet ready for review.
All C++ code must conform to the project's established style guidelines, which follow the Google C++ Style Guide with project-specific modifications documented in the repository. A .clang-format configuration file is provided at the root of the repository. All submissions must pass automated formatting checks.
Key requirements:
- C++17 or later
- No use of deprecated ROS 2 APIs
- Headers must be self-contained and include guards or
#pragma once - Avoid unnecessary dependencies; additions to
CMakeLists.txtmust be justified in the PR description
All contributions that modify functional code must include appropriate tests. The project uses Google Test (gtest) for unit testing.
- New functionality must be accompanied by unit tests covering expected behavior and relevant edge cases.
- Bug fixes must include a regression test that fails without the fix and passes with it.
- Tests must pass on all supported platforms prior to merge.
CI checks are run automatically on all Pull Requests. PRs that fail CI will not be merged until all issues are resolved.
Public APIs, new modules, and non-trivial algorithms must be documented. Documentation contributions are subject to the same review process as code. Where applicable:
- Use Doxygen-compatible docstrings for C++ API documentation.
- Update or create Markdown documentation under the
docs/directory for higher-level guides. - For algorithmic contributions, include a reference to the source paper or method in a comment or docstring.
All Pull Requests are reviewed by at least one project maintainer. The review process evaluates correctness, code quality, test coverage, documentation, and alignment with the project's architecture and goals.
Reviewers may request changes before a PR is approved. Requested changes should be addressed promptly; PRs that remain inactive for an extended period may be closed at the maintainers' discretion and can be reopened when work resumes.
Approval and merge are at the sole discretion of the project maintainers.
To report a bug or request a feature, please open an issue on the GitHub repository. Before doing so, search existing issues to avoid duplicates.
A good bug report includes:
- A concise description of the problem
- Steps to reproduce the issue
- Expected vs. actual behavior
- Relevant environment details (OS, compiler version, ROS 2 distribution, MOLA version)
- Any relevant logs, stack traces, or screenshots
For questions about the contribution process, open a discussion on the GitHub repository.