Open-source code of Floating-Base Deep Lagrangian Networks (FeLaN).
FeLaN is a grey-box method for physically consistent system identification (SysID) of floating-base robots (e.g., humanoids, quadrupeds). It learns system dynamics under Lagrangian mechanics while enforcing key structural constraints of floating-base systems (e.g., branch-induced sparsity/decoupling and full physical consistency of the composite spatial inertia) through a novel inertia matrix parametrization.
For a quadruped, FeLaN uses one MLP per leg (four in total), each taking only that leg’s joint positions as input, plus an additional MLP that models the composite spatial inertia terms of the floating base.
-
Training & evaluation pipelines in JAX for quadrupeds and humanoids.
-
FeLaN models (including FeLaNBS) and reference baselines (DeLaN/DeLaNPP, MLP).
-
MjxDNEA: white-box SysID using Mujoxo XLA (MJX) as a differentiable Recursive Newton–Euler algorithm (DNEA). We provide multiple inertial parametrizations.
-
Open-source datasets:
- Simulated in MJX: Go2 and Talos
- Real: Spot, Spot with Arm, HyQReal2, and Talos
See the paper and project page for the method description and experimental results.
-
Clone the Repository
git clone git@github.com:Schulze18/felan.git
-
Set Up Conda Environment
conda env create -f felan_env.yml conda activate felan
-
Install FeLaN as a Python pkg
pip install -e .
The datasets and robot models used are hosted on Hugging Face.
git clone https://huggingface.co/datasets/schulze18/felan felan/data/Available quadruped robots:
go2,spot_real,spot_arm_real,hyqreal2
Supported models (nn):
FeLaN,FeLaNBS,DeLaN,DeLaNPP,MLP
Example:
python -m felan.train_quad --robot go2 --nn FeLaNTrain a baseline instead:
python -m felan.train_quad --robot go2 --nn DeLaN
python -m felan.train_quad --robot go2 --nn MLPIf using MjxDNEA, you can choose the inertial parametrization:
python -m felan.train_quad --robot go2 --nn MjxDNEA --inertia_param SpatialLogCholeskySupported inertia parametrization:
PrincipalTriangular,PrincipalUnconstrained,SpatialCov,SpatialSpd,SpatialLogCholesky
Available humanoid robots:
talos,talos_real
Example:
python -m felan.train_humanoid --robot talos --nn FeLaNTo skip trainning and evaluate an existing model, use -l 1. For example:
python -m felan.train_quad --robot go2 --nn DeLaN -l 1
python -m felan.train_humanoid --robot talos --nn FeLaN -l 1Alternatively, you can evaluate a specific saved model directly with:
python -m felan.evaluate_model \
--robot talos \
--model_folder trained_models \
--nn FeLaN \
--model_name epochs_3000_talos_sim_freq_100hz_0For the results reported in the ICRA 2026 paper, use the icra_2026 branch. It includes trained models and the corresponding hyperparameters.
If you find our work or the provided datasets useful, please consider citing:
@misc{schulze2025_felan,
title={Floating-Base Deep Lagrangian Networks},
author={Lucas Schulze and Juliano Decico Negri and Victor Barasuol and Vivian Suzano Medeiros and Marcelo Becker and Jan Peters and Oleg Arenz},
year={2025},
eprint={2510.17270},
archivePrefix={arXiv},
primaryClass={cs.RO},
url={https://arxiv.org/abs/2510.17270},
}
