Skip to content

Commit 8dd4cd9

Browse files
committed
Merge updated README from devel
- Include latest documentation improvements - Maintain clean release branch history
2 parents 57ba6c2 + 265d44b commit 8dd4cd9

File tree

2 files changed

+77
-18
lines changed

2 files changed

+77
-18
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file.
55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
66
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
77

8-
## [0.1.0] - 2025-01-24
8+
## [0.1.0] - 2025-01-25
99

1010
### Added
1111
- Initial release of FIGAROH package

README.md

Lines changed: 76 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
11
# FIGAROH
22
(Free dynamics Identification and Geometrical cAlibration of RObot and Human)
3-
FIGAROH is a python toolbox aiming at providing efficient and highly flexible frameworks for dynamics identification and geometric calibration of rigid multi-body systems based on the popular modeling convention URDF. The considered systems can be serial (industrial manipulator) or tree-structures (human, humanoid robots).
3+
4+
FIGAROH is a Python toolbox providing efficient and highly flexible frameworks for dynamics identification and geometric calibration of rigid multi-body systems based on the popular modeling convention URDF. The considered systems can be serial (industrial manipulator) or tree-structures (human, humanoid robots).
5+
6+
**📦 Available on PyPI:** `pip install figaroh`
47

58
Note: This repo is a fork from [gitlab repo](https://gitlab.laas.fr/gepetto/figaroh) of which the author is no longer a contributor.
69

@@ -11,10 +14,10 @@ Note: This repo is a fork from [gitlab repo](https://gitlab.laas.fr/gepetto/figa
1114
Install the core FIGAROH package:
1215

1316
```bash
14-
# Option 1: Install from PyPI (when available)
17+
# Install from PyPI
1518
pip install figaroh
1619

17-
# Option 2: Install from source
20+
# Or install from source
1821
git clone https://github.com/thanhndv212/figaroh.git
1922
cd figaroh
2023
pip install -e .
@@ -43,18 +46,23 @@ conda activate figaroh-dev
4346
pip install -e .
4447
```
4548
## Prerequisites
46-
The following packages are required:
49+
50+
FIGAROH has the following core dependencies (automatically installed with pip):
4751
* numpy
4852
* scipy
4953
* matplotlib
50-
* pinocchio (conda install)
51-
* cyipopt (conda install)
5254
* numdifftools
55+
* ndcurves
5356
* meshcat
5457
* rospkg
5558
* pandas
5659
* quadprog
5760

61+
**Note:** Some dependencies should be installed via conda for better compatibility:
62+
```bash
63+
conda install -c conda-forge pinocchio cyipopt
64+
```
65+
5866
## Features
5967
![figaroh_features](figaroh_flowchart.png)
6068
As described in the following figure it provides:
@@ -68,9 +76,12 @@ As described in the following figure it provides:
6876
- Calibration model with full-set kinematic parameters.
6977
- Generation of optimal calibration postures based on combinatorial optimization.
7078
- Calibration pipeline with customized kinematic chains and different selection of external sensoring methods (eye-hand camera, motion capture) or non-external methods (planar constraints).
71-
- Calculatation of kinematic parameters that can be updated in URDF model.
79+
- Calculation of kinematic parameters that can be updated in URDF model.
7280
## How to use
73-
Overall, a calibration/identification project folder would like this:
81+
82+
**Note:** For complete working examples, see the [figaroh-examples](https://github.com/thanhndv212/figaroh-examples) repository.
83+
84+
Overall, a calibration/identification project folder would look like this:
7485
```
7586
\considered-system
7687
\config
@@ -83,7 +94,30 @@ Overall, a calibration/identification project folder would like this:
8394
identification.py
8495
update_model.py
8596
```
86-
A step-by-step procedure is presented as follow.
97+
98+
### Quick Start
99+
100+
1. **Install FIGAROH**:
101+
```bash
102+
pip install figaroh
103+
```
104+
105+
2. **Get examples**:
106+
```bash
107+
git clone https://github.com/thanhndv212/figaroh-examples.git
108+
cd figaroh-examples
109+
pip install -r requirements.txt
110+
```
111+
112+
3. **Run an example**:
113+
```bash
114+
cd examples/tiago
115+
python identification.py
116+
```
117+
118+
### Configuration
119+
120+
A step-by-step procedure is presented as follows:
87121
+ Step 1: Define a config file with sample template.\
88122
A .yaml file containing information of the considered system and characteristics of the calibration/identification problem has a structure as follow:
89123
```
@@ -135,14 +169,14 @@ A step-by-step procedure is presented as follow.
135169
sync_joint_motion : False
136170
```
137171
+ Step 2: Generate sampled exciting postures and trajectories for experimentation.
138-
- For geomeotric calibration: Firstly, considering the infinite possibilities of combination of postures can be generated, a finite pool of feasible sampled postures in working space for the considered system needs to be provided thanks to simulator. Then, the pool can be input for a script ```optimal_config.py``` with a combinatorial optimization algorithm which will calculate and propose an optimal set of calibration postures chosen from the pool with much less number of postures while maximizing the excitation.
139-
- For dynamic identification: A nonlinear optimization problem needs to formulated and solved thanks to Ipopt solver in a script namde ```optimal_trajectory.py```. Cost function can be chosen amongst different criteria such as condition number. Joint constraints, self-collision constraints should be obligatory, and other dedicated constraints can be included in constraint functions. Then, the Ipopt solver will iterate and find the best cubic spline that sastifies all constraints and optimize the defined cost function which aims to maximize the excitation for dynamics of the considered system.
140-
+ Step 3: Collect and prepare data in the correct format.\
141-
To standardize the handling of data, we propose a sample format for collected data in csv format. These datasets should be stored in a ```data``` folder for such considered system.
142-
+ Step 4: Create a script implementing identification/calibration algorithms with templates.
143-
Dedicated template scripts ```calibration.py``` and ```identification.py``` are provided. Users needs to fill in essential parts to adapt to their systems. At the end, calibration/identification results will be displayed with visualization and statistical analysis. Then, it is up to users to justify the quality of calibration/identification based on their needs.
144-
+ Step 5: Update model with identified parameters.\
145-
Once the results are accepted, users can update calibrated/identified parameters to their urdf model by scripts ```update_model.py``` or simply save to a ```xacro``` file for later usage.
172+
- For geometric calibration: Firstly, considering the infinite possibilities of combination of postures can be generated, a finite pool of feasible sampled postures in working space for the considered system needs to be provided thanks to simulator. Then, the pool can be input for a script `optimal_config.py` with a combinatorial optimization algorithm which will calculate and propose an optimal set of calibration postures chosen from the pool with much less number of postures while maximizing the excitation.
173+
- For dynamic identification: A nonlinear optimization problem needs to formulated and solved thanks to Ipopt solver in a script named `optimal_trajectory.py`. Cost function can be chosen amongst different criteria such as condition number. Joint constraints, self-collision constraints should be obligatory, and other dedicated constraints can be included in constraint functions. Then, the Ipopt solver will iterate and find the best cubic spline that satisfies all constraints and optimize the defined cost function which aims to maximize the excitation for dynamics of the considered system.
174+
+ Step 3: Collect and prepare data in the correct format.
175+
To standardize the handling of data, we propose a sample format for collected data in CSV format. These datasets should be stored in a `data` folder for such considered system.
176+
+ Step 4: Create a script implementing identification/calibration algorithms with templates.
177+
Dedicated template scripts `calibration.py` and `identification.py` are provided. Users need to fill in essential parts to adapt to their systems. At the end, calibration/identification results will be displayed with visualization and statistical analysis. Then, it is up to users to justify the quality of calibration/identification based on their needs.
178+
+ Step 5: Update model with identified parameters.
179+
Once the results are accepted, users can update calibrated/identified parameters to their URDF model by scripts `update_model.py` or simply save to a `xacro` file for later usage.
146180
## Examples
147181
148182
Complete examples and tutorials are available in a separate repository: [figaroh-examples](https://github.com/thanhndv212/figaroh-examples)
@@ -160,6 +194,31 @@ Each example includes:
160194
- Sample data
161195
- Complete workflows
162196
- URDF models (when needed)
197+
198+
## Package Structure
199+
200+
The FIGAROH package is organized into the following modules:
201+
202+
- `figaroh.calibration`: Geometric calibration algorithms and tools
203+
- `figaroh.identification`: Dynamic parameter identification methods
204+
- `figaroh.measurements`: Data handling and measurement processing
205+
- `figaroh.tools`: Core utilities for robotics computations
206+
- `figaroh.utils`: Helper functions and mathematical utilities
207+
- `figaroh.visualisation`: Visualization tools for results
208+
209+
## API Usage
210+
211+
```python
212+
import figaroh
213+
from figaroh.calibration import calibration_tools
214+
from figaroh.identification import identification_tools
215+
216+
# Load robot model
217+
robot = figaroh.tools.robot.Robot("path/to/robot.urdf")
218+
219+
# Perform calibration or identification
220+
# See examples repository for complete workflows
221+
```
163222
## Citations
164223

165224
If you use FIGAROH in your research, please cite the following papers:

0 commit comments

Comments
 (0)