Thank you for considering a contribution to ManyMove! ManyMove is an experimental collection of ROS 2 packages for single or multi‑arm manipulation. To keep the project maintainable and safe, please follow the guidelines below.
- Distributions: Humble and Jazzy.
- Branch policy:
- Work happens on
dev(kept compatible with both Humble and Jazzy). - Stable releases are merged from
dev→main.
- Work happens on
- Goal: Single codebase that builds, lint‑checks and passes tests on both Humble and Jazzy.
Open an issue on the repo for bugs, docs fixes, or feature requests. Please include:
- ROS 2 distro (Humble/Jazzy), OS, and environment details.
- Exact steps to reproduce and expected vs. actual behavior.
- Relevant logs or stack traces (use fenced code blocks).
- If it’s a feature: motivation, proposed approach, and which packages are affected.
For general Q&A, prefer ROS Answers.
-
Branch from
dev. Use a descriptive name (e.g.,feature/object-manager-tests). -
Design discussion (when appropriate). For substantial changes, open an issue first to align on approach.
-
Update / add tests.
- C++: GoogleTest (via
ament_cmake_gtest). - Python:
pytest. - Launch/integration:
launch_testing.
- C++: GoogleTest (via
-
Run formatting & linters locally (pre-commit). Install hooks once:
pre-commit install
Run on all files:
pre-commit run --all-files
The repo uses (among others):
- ruff for Python style & lint
- isort for Python import order
- end-of-file, trailing whitespace checks, large files checks
-
Verify C++ formatting with Uncrustify for BOTH distros. The same code must pass 0.72 (Humble) and 0.78 (Jazzy). For example, from
/src/manymove/folder:# humble: uncrustify --check -c ./uncrustify_0.72.cfg $(git ls-files '*.cpp' '*.hpp') # jazzy: uncrustify --check -c ./uncrustify_0.78.cfg $(git ls-files '*.cpp' '*.hpp')
To try and format the files change
--checkwith--replace --no-backup. -
Ensure ament linters are integrated (so CI runs them too). In each package:
-
CMakeLists.txtshould include:if(BUILD_TESTING) find_package(ament_lint_auto REQUIRED) ament_lint_auto_find_test_dependencies() endif()
-
package.xmlshould include:<test_depend>ament_lint_auto</test_depend>
-
-
Build & test locally with colcon.
colcon build --symlink-install colcon test --event-handlers console_cohesion+ colcon test-result --verboseNo warnings or test failures should remain.
-
Update versions & changelog when needed.
- Use SemVer in the affected
package.xmlfiles. - Add a concise entry to the repository‑level
CHANGELOG.rstunder Forthcoming.
- Use SemVer in the affected
-
Open the PR against
dev.- Describe the problem and solution, list affected packages.
- Link issues, mention breaking changes and migration notes if any.
- CI must pass before merge. When possible we Squash & Merge.
-
Respond to reviews and iterate until approved.
Follow the ROS coding styles. If you notice some inconsistencies in the current codebase, please notify!
- Unit tests: cover new logic and edge cases (GTest/pytest).
- Integration/launch tests: use
launch_testingfor multi‑node scenarios and launch files. - Cross‑distro: validate on Humble and Jazzy.
- CI: GitHub Actions runs
colcon testand linters. Keep CI green.
-
Semantic Versioning:
- MAJOR: breaking API changes
- MINOR: new backwards‑compatible features
- PATCH: bug fixes
-
Repository‑level changelog:
CHANGELOG.rstat repo root is the canonical, high‑level history.- The Forthcoming section always refers to the next merge
dev→main. - Group entries by package; keep them concise with links to PRs/issues.
- Contributions are under BSD‑3‑Clause.
- Include the standard license header in new source files.
- Code builds locally (Humble & Jazzy).
-
pre-commit run --all-filesis clean. - Uncrustify passes with both configs.
-
colcon testpasses; tests added/updated. -
package.xmlversions and top‑levelCHANGELOG.rstupdated if needed. - PR description explains the change & impact.
Thanks for helping improve ManyMove!
---