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 .h for headers and .cc for 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 COLLADA file format for links’ visual or collision meshes is not yet supported. Only STL files, STEP will be handled, other CAD file 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.
  • 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

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


This site uses Just the Docs, a documentation theme for Jekyll.