An library that interfaces with different kinematic and dynamic solvers
This library offers a unified interface for the end-user, encapsulating the API of the back-end. Such back-end could libraries such as RBDL, KDL, iDynTree, etc.
Such approach achieves three goals:
- It would be possible to entirely switch to another solver without changing the user code (e.g., if new solvers with better performance appear, or, if a certain library performs better in different domains)
- The preliminary steps are concentrated in one place (for KDL for instance, the whole URDFtoKDL business is done outside of the users space)
- Creates some algorithmic refactoring conveniences: e.g., switching between recursive Newton Euler to/from composite rigid body can be done in one place without changing the user code.
Currently I will do a RBDL version and keep the rest as TODOs.
Can be obtained from https://github.com/rbdl/rbdl.git
git clone -b dev https://github.com/rbdl/rbdl.git
mkdir build && cd build
cmake .. -DRBDL_BUILD_ADDON_URDFREADER=ON -DCMAKE_INSTALL_PREFIX=/path/to/your/install
make
make install
The install path then can be pass to this project's cmake when
configuring the project by
-DCMAKE_PREFIX_PATH=/path/to/your/install
.
- RBDL has this method called
UpdateKinematics()
which is a bit peculiar: each function call (e.g.,CalcPointJacobian6D
) has an optional boolean parameter that if=true
calls theUpdateKinematics()
. If we pass false, then function kinematic/dynamic calls return zero. So we have two options: either call the factions with=true
, or, make a call toUpdateKinematics()
from somewhere like the user space and update everything. If the update is not computationally expensive, I rather to for the first option. For the moment I pass true. - RBDL urdf-reader plugin that we use is a mysterious creature that functions in baffling ways. Maybe, just maybe, we need to resort to a more stable/reliable solution.
- Resolve the issue 1 of RBDL.