Contribution Guide
Due to time constraints, I am unable to maintain this project constantly. However, the work is in progress, and any contributions are greatly appreciated.
Please feel free to open an issue. I will try to address any concerns as best I can. Please refer to the following guidelines for areas where help is needed:
General Guidelines
- Use the minimal header includes as possible.
- Follow file naming conventions
.hfor headers and.ccfor implementations - The
common/folder should contain only interfaces or shared code. - Try to be highly modular with a focus on polymorphism.
- Avoid using Boost libraries wherever possible.
Notes
- The current version parses and renders model joints, links, and visual elements. Other elements like transmissions and sensors will be supported in future releases.
- Physical consistency verification (e.g., inertia values) is not activated by default.
- A scaling issue may occur during rendering due to element marker sizes.
- The
COLLADAfile format for links’ visual or collision meshes is not yet supported. OnlySTLfiles,STEPwill be handled, otherCADfile format, will be added progressivlly - Multi-model handling, model interactions, and world parsing are not yet supported.
- File paths should be absolute. Relative paths are not currently supported.
Style
We generally follow the Google Style Guide. Currently, there is no automated checking pipeline for this, but I will personally review the code. Contributions to add such a pipeline would be highly appreciated.
Current Tasks
Here are some key tasks where contributions are needed:
- Complete the implementation of the urdf-graphiz interface.
- Complete the development of core modules:
- Add support for transmission parsing.
- Complete the implementation of internal_graph module
- Add Collada file support using the collada-dom library.
- Ensure each implementation is tested in the test folder.
- Add graph computation functions (e.g., computing model roots, leaves, etc.).
- Implement utility functions for inertial, volume, and collision computations, such as:
- Total mass
- Center of inertia
- Total volume of the model
- Density, and more
- Precomputed Forward Kinematics
- Bounding Volume Hierarchy (BVH) for fast collision detection
Additional Features
These additional features would improve the library:
- Add a custom project logo.
- Create a pipeline to deploy the library upon each release to vcpkg package manager.
- Check/test the docker pipeline build status and create a custom workflow.
If you have any questions or need clarification, feel free to email me.
Thank you for contributing!
Ressources
Related Projects
How to install Ninja
-
On Windows (via Chocolatey):
choco install ninja -
On linux
```bash sudo apt-get install ninja-build
How to install VCPKG
----
Official Link: <https://vcpkg.io/en/index.html>
```cmd
cd external
git clone https://github.com/Microsoft/vcpkg.git
.\vcpkg\bootstrap-vcpkg.bat # windows
./vcpkg/bootstrap-vcpkg.sh # Unix
How to install Google Test on ubuntu
for gtest installation : https://gist.github.com/Cartexius/4c437c084d6e388288201aadf9c8cdd5?permalink_comment_id=2822039#gistcomment-2822039
sudo apt-get install libgtest-dev
cd /usr/src/googletest/googletest
sudo mkdir build
cd build
sudo cmake ..
sudo make
sudo cp lib/libgtest* /usr/lib/
cd ..
sudo rm -rf build
Then do:
sudo mkdir /usr/local/lib/googletest
sudo ln -s /usr/lib/libgtest.a /usr/local/lib/googletest/libgtest.a
sudo ln -s /usr/lib/libgtest_main.a /usr/local/lib/googletest/libgtest_main.a
Formatter and Static Analyzer
Tooling
Clang-Format: Formatting tool for your C/C++ code:
- Documentation for Clang-Format: Link
Clang-Tidy: Static linting tool for your C/C++ code:
- Documentation for Clang-Tidy: Link
Cmake-Format:
pip install cmake-format # python 3.7+
Coverage Tools
sudo apt-get install gcovr
pip install -U gcovr
Install Clang Tools
It’s included in the LLVM toolchain, but also installable by apt, brew, winget etc.
https://github.com/llvm/llvm-project/releases/tag/llvmorg-16.0.0