• Stars
    star
    145
  • Rank 245,288 (Top 5 %)
  • Language
    C++
  • License
    BSD 3-Clause "New...
  • Created about 10 years ago
  • Updated 28 days ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Multibody Dynamics Library designed for Free Floating Robots

iDynTree License ZenHub

iDynTree is a library of robots dynamics algorithms for control, estimation and simulation. It is specifically designed for free-floating robots, but it is possible to use it also with fixed-base robots.

The major characteristic features of iDynTree are:

  • It is written in C++, with Python and MATLAB bindings.
  • It uses an undirected graph data structure (iDynTree::Model) that is used to represent robots, to easily change the base link that you are using for your kinematics and dynamics computations without the need to reload your model or change your joint or link serializations. This is done as iDynTree was developed for floating-base robots such as humanoids, in which the most convenient choice of base link can change.
  • It contains support for reading and writing URDF files from a iDynTree::Model, making it useful to write tools that modify robot models and saves them back to file. This is done as iDynTree was meant to develop tools for identification of kinematics and dynamics parameters.
  • It defaults to use the mixed representation to represent link quantities (including the velocity and acceleration of the base link), but it can optionally use also body (left-trivialized) or inertial (right-trivialized) representation if requested. This is done because iDynTree was developed to satisfy the needs of research in synthesis of floating-base whole-body controllers. If you are not familiar with the different representation for 6D quantities, check Section 6 of "Multibody dynamics notation (version 2)".
  • It contains an implementation of the algorithm used in the iCub humanoid robot to estimate the joint torques without the need of collocated joint torque sensors, exploting the specific undirected graph data structure . This is done as this was one of the originally goal for the implementation of iDynTree. See the class iDynTree::ExtWrenchesAndJointTorquesEstimator and Chapter 6 of "Modelling, Estimation and Identification of Humanoid Robots Dynamics".

To avoid confusion, it is also useful to clarify what iDynTree is not:

  • It is not the fastest C++ library for kinematics and dynamics multibody computations for robotics. It is not slow, but if have an application in which you need the absolute fastest library, check out Pinocchio.
  • It is not a multibody simulator library. It provides the building blocks that you could use to build a multibody simulator, but it is not a multibody simulator per se. If you need a simulator library in C++, check out DART, Simbody, Drake, MuJoCo or the abstraction layer Gazebo Physics. If you need a simulator implemented in MATLAB/Simulink (built on iDynTree), check matlab-whole-body-simulator. If you need a simulator that is differentiable and runs on GPU, check jaxsim or MuJoCo XLA (mjx).
  • It does not provide algorithms in a form in which they can be used in CasADi, JAX or PyTorch. For a Python library with an interface inspired by iDynTree that provides algorithms compatible with these frameworks, check adam robotics library.

Contents

Installation

conda (recommended)

You can easily install the C++ and Python library with via conda-forge using the following command

conda install -c conda-forge idyntree

If you need to install also the MATLAB bindings, you can install them with:

conda install -c conda-forge -c robotology idyntree-matlab-bindings

If you are not familiar with conda or conda-forge, you can read an introduction document in conda-forge overview.

robotology-superbuild (advanced)

If you are installing iDynTree for use as part of iCub humanoid robot software installation, you may want to install iDynTree through the robotology-superbuild, an easy way to download, compile and install the robotology software on multiple operating systems, using the CMake build system and its extension YCM. To get iDynTree when using the robotology-superbuild, please enable the ROBOTOLOGY_ENABLE_DYNAMICS CMake option of the superbuild. If you want to install also iDynTree Python or MATLAB bindings, remember to enable the ROBOTOLOGY_USES_PYTHON or ROBOTOLOGY_USES_MATLAB options.

Build from source (advanced)

If you want to build iDynTree directly from source, you can check the documentation in doc/build-from-source.md.

Library Usage

Usage in C++

Once the library is installed, you can link it in C++ programs using CMake with as little effort as writing the following line of code in your project's CMakeLists.txt:

find_package(iDynTree REQUIRED)
target_link_libraries(<target> PRIVATE iDynTree::idyntree-high-level iDynTree::idyntree-estimation)

See CMake's reference documentation if you need more info on the find_package or target_link_libraries CMake commands.

Usage in MATLAB

To make sure that iDynTree is available in MATLAB, try to run some simple code that uses it:

p = iDynTree.Position()

If this is not working, make sure that you are launching matlab after having activated the conda environment (if you installed iDynTree via conda) or after having sourced por executed the correct setup script (if you installed iDynTree via the robotology-superbuild).

Tutorials

These tutorials describe how to use specific parts of iDynTree. Are you interested in a tutorial on a specific feature or algorithm that you can't find in this list? Just request it on an enhancement issue.

Topic Location Language
Basic usage of the KinDynComputations class together with the [Eigen C++ Matrix library to compute kinematics and dynamics quantities such as forward kinematics, inverse dynamics, mass matrix. examples/cxx/KinDynComputationsWithEigen/main.cpp C++
How to use the InverseKinematics class for the IK of an industrial fixed-base manipulator. examples/cxx/InverseKinematics/README.md C++
Use of the ExtWrenchesAndJointTorquesEstimator class for computing offset for FT sensors examples/matlab/SixAxisFTOffsetEstimation/SixAxisFTOffsetEstimation.m MATLAB
How to get the axis of a revolute joint expressed in a arbitary frame using the KinDynComputations class examples/matlab/SensorsListParsing/SensorsListParsing.m MATLAB
How to read the Six Axis Force Torque sensors information contained in a URDF model. examples/matlab/GetJointAxesInWorldFrame.m MATLAB
Usage of the MATLAB-native visualizer using the MATLAB high-level wrappers. examples/matlab/iDynTreeWrappers/visualizeRobot.m MATLAB
Basic usage of the KinDynComputations class. examples/python/KinDynComputationsTutorial.py Python
Basic usage of the MeshcatVisualizer class. examples/python/MeshcatVisualizerExample.ipynb Python

Tools Usage

iDynTree also includes some command line tools to use some of the functionality of the library without writing any line of code. The available command line tools are listed in the following, and each tool also includes an online help that is tipically available by passing the -h flag.

idyntree-model-info

Tool that reads a model from a file, and print some useful information as specified via the command line.

Example: Print the total mass of a given model

idyntree-model-info -m <location-of-the-model> --total-mass

idyntree-model-view

Tool that reads a model from a file and visualize it using the idyntree-visualizer library

Example: Visualize a given model

idyntree-model-view -m <location-of-the-model>

idyntree-model-simplify-shapes

Tool that reads a model from a file, and returns in output the same model, but with all solid shapes of the model (both collision and visual) substituted with a primitive shape that approximates in some way the original solid shape. At the moment, the only conversion type provided is to approximate each solid shape of the model with its axis aligned bounding box.

Example: Approximate a given model

idyntree-model-simplify-shapes -m <location-of-the-input-model> -o <desired-location-of-the-output-model>

Reference Documentation

The documentation for the complete API of iDynTree is automatically extracted from the C++ code using Doxygen, and is available at the URL : https://robotology.github.io/idyntree.

Announcements

Announcements on new releases, API changes or other news are done on robotology/QA GitHub repository. You can watch that repository to get all the iDynTree-related announcements, that will always tagged with the announcement tag.

Developer Documentation

If you want to contribute to iDynTree development, please check the Developer's FAQ.

Reference paper

A paper describing some of the algorithms implemented in iDynTree and their use in a real world scenario can be downloaded here . If you're going to use this library for your work, please quote it within any resulting publication:

F. Nori, S. Traversaro, J. Eljaik, F. Romano, A. Del Prete, D. Pucci "iCub whole-body control through force regulation on rigid non-coplanar contacts", Frontiers in Robotics and AI, 2015.

The bibtex code for including this citation is provided:

@ARTICLE{10.3389/frobt.2015.00006,
  AUTHOR={Nori, Francesco  and  Traversaro, Silvio  and  Eljaik, Jorhabib  and  Romano, Francesco  and  Del Prete, Andrea  and  Pucci, Daniele},
  TITLE={iCub Whole-body Control through Force Regulation on Rigid Noncoplanar Contacts},
  JOURNAL={Frontiers in Robotics and AI},
  VOLUME={2},
  YEAR={2015},
  NUMBER={6},
  URL={http://www.frontiersin.org/humanoid_robotics/10.3389/frobt.2015.00006/abstract},
  DOI={10.3389/frobt.2015.00006},
  ISSN={2296-9144}}

Acknowledgments

The initial development of iDynTree was supported by the FP7 EU projects CoDyCo (No. 600716 ICT 2011.2.1 Cognitive Systems and Robotics) and Koroibot (No. 611909 ICT- 2013.2.1 Cognitive Systems and Robotics).

The development is now supported by the Artificial Mechanical Intelligence research line at the Italian Institute of Technology.

License

iDynTree is licensed under either the BSD-3-Clause license : https://spdx.org/licenses/BSD-3-Clause.html .

More Repositories

1

yarp

YARP - Yet Another Robot Platform
C++
496
star
2

how-to-export-cpp-library

An OS-agnostic C++ library template in plain CMake.
CMake
357
star
3

osqp-eigen

Simple Eigen-C++ wrapper for OSQP library
C++
341
star
4

gym-ignition

Framework for developing OpenAI Gym robotics environments simulated with Ignition Gazebo
C++
215
star
5

human-gazebo

URDF models of humans created to perform human robot interaction experiments.
C++
121
star
6

icub-main

The iCub Main Software Repository
C++
105
star
7

walking-controllers

Bipedal locomotion software for the humanoid robot platform iCub.
C++
94
star
8

whole-body-controllers

Simulink-based whole body controllers for humanoid robots.
MATLAB
92
star
9

event-driven

neuromorphic sensor integration with YARP and iCub
C++
73
star
10

human-dynamics-estimation

Software repository for estimating human dynamics
C++
69
star
11

bayes-filters-lib

A flexible, modern, C++ recursive Bayesian estimation library.
C++
64
star
12

blender-robotics-utils

Set of utilities for exporting/controlling your robot in Blender
Python
50
star
13

gh-action-nightly-merge

Automatically merge the stable branch into the development one
Shell
48
star
14

ycm

YCM (YCM CMake modules) is a collection of various useful CMake modules.
CMake
47
star
15

robotology-superbuild

CMake/YCM-based superbuild to simplify the build process of robotology projects.
CMake
44
star
16

blockfactory

A tiny framework to wrap algorithms for dataflow programming
C++
40
star
17

gazebo-yarp-plugins

Plugins to interface Gazebo with YARP.
C++
34
star
18

icub-models

Official URDF and SDF models of the iCub humanoid robot.
CMake
34
star
19

simmechanics-to-urdf

Script for converting simmechanics XML files to URDF
Python
33
star
20

walking-teleoperation

Software related to walking and teleoperation.
C++
28
star
21

urdf2casadi-matlab

MATLAB
26
star
22

community

Virtual repository hosting Discussions and Questions & Answers
25
star
23

gym-ignition-models

Collection of robot models compatible with gym-ignition
Python
24
star
24

wb-toolbox

Simulink toolbox to rapidly prototype robot controllers
C++
23
star
25

gazebo-fmi

FMI import plugins for the Gazebo Simulator.
CMake
22
star
26

rfsmTools

A set of tools to execute, debug and create rFSM LUA-based state machines
C++
22
star
27

whole-body-estimators

YARP devices that implement estimators for humanoid robots.
C++
21
star
28

icub-tech-support

Virtual repository that provides support requests for individual robots
20
star
29

assistive-rehab

Assistive and Rehabilitative Robotics
Jupyter Notebook
20
star
30

unicycle-footstep-planner

Repository for the Unicycle-based FootStep Planner.
C++
20
star
31

icub-tutorials

Tutorials on iCub code
C++
19
star
32

icub-gazebo-grasping-sandbox

A public sandbox for simulating grasping in Gazebo with the iCub humanoid
C++
19
star
33

find-superquadric

Fit a partial point cloud with a superquadric
C++
18
star
34

wearables

Data collection framework for wearable sensors
C++
17
star
35

stereo-vision

Repository containing apps for stereo vision
C++
17
star
36

robot-testing-framework

Robot Testing Framework (RTF)
C++
17
star
37

visual-tracking-control

A C++ visual tracking app of the iCub hand using a 3D model-aided particle filter.
C++
16
star
38

icub-hri

iCub-HRI: A coherent framework for complex HRI scenarios on the iCub
C++
14
star
39

icub-models-generator

Resources and programs to generated models (URDF, SDF) of the iCub robot
C++
14
star
40

superquadric-lib

C++
14
star
41

superimpose-mesh-lib

A modern C++ augmented-reality library to superimpose 3D objects on images.
C++
14
star
42

human-sensing

This repository contains software related to human sensing
C++
13
star
43

cer-sim

Official URDF and SDF models of the R1 humanoid robot.
Python
13
star
44

robots-configuration

Contains robots configuration files
CMake
13
star
45

how-to-document-modules

Scripts and templates to help you document your code nicely
C++
12
star
46

robometry

Telemetry suite for logging data from your robot 🤖
C++
12
star
47

segmentation

Components for image segmentation
C++
12
star
48

icub-firmware

iCub Firmware
C
11
star
49

sdf-modelica

URDF/SDF to to Modelica model converter.
C++
11
star
50

speech

Apps for speech recognition and speech synthesis
C
11
star
51

icub-basic-demos

A container for basic demos illustrating some iCub capabilities
C++
11
star
52

himrep

Hierarchical Image Representation
C++
10
star
53

cer

Contains SW specific to the R1 robots
C++
10
star
54

yarp.js

JavaScript bindings for YARP!
JavaScript
10
star
55

navigation

Yarp modules and devices for autonomous navigation
C++
9
star
56

skeleton3D

Bridge between 2D Tensorflow-based human pose estimation and 3D estimation from stereovision
PureBasic
9
star
57

calibration-supervisor

Code for supervising camera calibration using optimized chessboard poses
C++
9
star
58

yarp-devices-ros2

Plugins, devices and network wrappers for Yarp-ROS2 interoperation
C++
9
star
59

gesture-recognition

This package contains modules that deal with gesture recognition
C++
8
star
60

gz-sim-yarp-plugins

Experimental YARP plugins for Modern Gazebo (gz-sim).
C++
7
star
61

yarp-device-realsense2

realsense2 device for YARP (https://www.yarp.it/)
C++
7
star
62

point-cloud-read

Module to acquire point clouds from iCub.
C++
6
star
63

icub-tests

Contains tests for iCub robot Tests are written using the robot-testing framework
C++
6
star
64

idyntree-yarp-tools

Tools based on the iDynTree library that depend on YARP.
C++
6
star
65

funny-things

A collection of "funny" yet useful behaviors for the iCub
Shell
6
star
66

yarp-matlab-bindings

SWIG-based bindings of YARP for Matlab and Octave, based on the MEX C-API.
C++
6
star
67

icub-firmware-models

Models underlying the iCub Firmware
MATLAB
6
star
68

tool-affordances

Repo for Affordance project related stuff
RPC
6
star
69

natural-speech

This repository contains a codebase to build automatic speech recognition (ASR) systems for iCub and run them within YARP. It also proposes new articulatory-based and unsupervised models for ASR.
C
6
star
70

superquadric-model

Framework for modeling and visualizing objects through superquadrics
C++
6
star
71

robotology-superbuild-dependencies-vcpkg

Pre-compiled vcpkg root with Windows binary dependencies of the robotology-superbuild
PowerShell
6
star
72

superbuild-example

This is a simple repository that shows how to make a superbuild project.
CMake
5
star
73

online-detection-demo

Fast object detection learning with CNN and kernel based architecture
MATLAB
5
star
74

superquadric-grasp

Framework for grasping object using superquadric models
C++
5
star
75

yarp-device-xsensmt

YARP Device Driver for XSens MT* devices based on the MT Software Suite.
C++
5
star
76

yarp-device-ultrapython

Contains a YARP device driver supporting the UltraPython cameras
C++
5
star
77

robotology-vcpkg-ports

Collection of vcpkg ports available on limited platforms just in binary form.
CMake
5
star
78

cardinal-points-grasp

Simple superquadric-based grasping pose generator for iCub
C++
5
star
79

yarp-devices-haptic

Generic YARP driver for Haptic Devices
C++
4
star
80

yarp-devices-forcetorque

YARP Drivers for various commercial Force Torque sensors.
C++
4
star
81

attention

Multimodal Attention System for the iCub
C++
4
star
82

c4d-icub-plugins

plugins for Cinema4D
C++
4
star
83

yarp-omega3

Simple YARP-based server to send position/force set points to a Force Dimension Omega.3 robot
C++
4
star
84

poeticon

This is the repository of the POETICON++ EU project http://www.poeticon.eu
C++
4
star
85

superquadric-grasp-demo

Object modeling and grasping with superquadrics and visual-servoing
C++
3
star
86

icub-firmware-shared

Protocols and Other Stuff Used both by iCub Firmware and iCub Software
C
3
star
87

d4c

Dynamic Force Field Control
C++
3
star
88

visual-tactile-localization

In-hand object tracking for the iCub humanoid robot.
C++
3
star
89

icub-workspace-estimation

This repository deals with the task of computing the workspace of the iCub given a proper kinematic representation.
MATLAB
3
star
90

iCubWorld

This repository contains the iCubWorld dataset.
3
star
91

yarp-device-ovrheadset

LibOVR device for YARP (https://www.yarp.it/)
C
3
star
92

vagrant-icub

Vagrant configurations files to create VirtualBox virtual machine with YARP and iCub-main sources and dependancies
Ruby
3
star
93

yarp-device-pylon

Contains a YARP device driver supporting the Basler cameras
C++
2
star
94

iol

Interactive Objects Learning
C++
2
star
95

yarp-device-vicon-bridge

This is a yarp device driver providing data from VICON motion capture systems.
C++
2
star
96

visuomotor-learning

C++
2
star
97

icub-contrib-common

Meta-package to configure contrib modules and libraries
CMake
2
star
98

onthefly-recognition

C++
2
star
99

yarp-devices-llm

Collection of yarp devices for Large Language Models
Perl
2
star
100

robotology-conda-binary-repackaging-recipes

Recipes for packaging as conda package closed source dependencies of robotology software.
Batchfile
2
star