Getting Started
Installation
Install FIGAROH from PyPI:
pip install figaroh
For development with all dependencies:
conda env create -f environment.yml
conda activate figaroh-dev
pip install -e .
Configuration System
FIGAROH uses a flexible YAML-based configuration system that supports both modern unified format and legacy format.
Unified Configuration Format
The modern unified format provides better organization and template inheritance:
# modern_config.yaml
inherit_from: "templates/base_robot.yaml"
robot:
name: "tiago"
urdf_path: "urdf/tiago.urdf"
calibration:
method: "full_params"
sensor_type: "camera"
markers:
- ref_joint: "wrist_3_joint"
position: [0.1, 0.0, 0.05]
measure: [true, true, true, true, true, true]
identification:
mechanics:
friction_coefficients:
viscous: [0.01, 0.02, 0.015]
static: [0.001, 0.002, 0.0015]
actuator_inertias: [0.1, 0.15, 0.12]
signal_processing:
sampling_frequency: 5000.0
cutoff_frequency: 100.0
Legacy Format Support
Existing configurations continue to work without modification:
# legacy_config.yaml
calibration:
calib_level: full_params
markers:
- ref_joint: wrist_3_joint
measure: [True, True, True, True, True, True]
identification:
robot_params:
- fv: [0.01, 0.02, 0.015]
fs: [0.001, 0.002, 0.0015]
processing_params:
- ts: 0.0002
cut_off_frequency_butterworth: 100.0
Quick Start Examples
Basic Calibration
from figaroh.calibration import BaseCalibration
from figaroh.tools.robot import load_robot
# Load robot and run calibration
robot = load_robot("path/to/robot.urdf")
calibration = BaseCalibration(robot, "config/calibration_config.yaml")
calibration.load_data("data/calibration_data.csv")
results = calibration.run_calibration()
Basic Identification
from figaroh.identification import BaseIdentification
from figaroh.tools.robot import load_robot
# Load robot and run identification
robot = load_robot("path/to/robot.urdf")
identification = BaseIdentification(robot, "config/identification_config.yaml")
identification.load_data("data/identification_data.csv")
params = identification.run_identification()
Advanced Regressor Building
from figaroh.tools.regressor import RegressorBuilder, RegressorConfig
# Configure regressor
config = RegressorConfig(
has_friction=True,
has_actuator_inertia=True,
is_joint_torques=True
)
# Build regressor matrix
builder = RegressorBuilder(robot, config)
W = builder.build_basic_regressor(q, dq, ddq)
Configuration Management
from figaroh.utils.config_parser import UnifiedConfigParser
# Parse any configuration format
parser = UnifiedConfigParser("config/robot_config.yaml")
config = parser.parse()
# Create task-specific configuration
calib_config = parser.create_task_config(robot, config, "calibration")
identif_config = parser.create_task_config(robot, config, "identification")
Next Steps
Explore the Examples Repository for complete workflows
Check out the API documentation for detailed module information
Review the configuration templates for your specific robot type