Skip to content
iit-DLSLabPublic

About

A State Estimation Package for Quadruped Robots, that fuses Proprioceptive and Exteroceptive data

Topics

Resources

Stars

142 stars

Watchers

6 watching

Forks

Latest commit

 

History

90 Commits

Folders and files

Repository files navigation

MUSE: A Real-Time Multi-Sensor State Estimator for Quadruped Robots

Ylenia Nisticò, João Carlos Virgolino Soares, Lorenzo Amatucci, Geoff Fink and Claudio Semini

IEEE Robotics and Automation Letters · Paper

Branch note (unitree_sdk): this branch is developed for full compatibility with the Unitree SDK and ROS2 communication. The code has been tested on the Unitree Go2 and A2 robots in both simulation and real-world experiments.

💻 Overview

MUSE estimates quadruped robot state from IMU measurements and joint states using ROS2. This branch provides proprioceptive state estimation, with Pixi (recommended, locked dependencies) and Conda environments.

:octocat: Suggestions

🦖 Prerequisites

Linux x86-64 and Pixi or Conda. Both environments include ROS2 Humble, Eigen, Pinocchio, vcstool, and the C++ toolchain.

🛠️ Building and Running

Clone the repository:

git clone https://github.com/iit-DLSLab/muse.git -b unitree_sdk
cd muse

Pixi (recommended)

From the repository root, in a terminal without another Conda or ROS environment activated:

pixi install --locked
pixi run --locked build
pixi run --locked launch

Tasks source ROS and the workspace automatically. --locked uses the committed dependency versions and rejects manifest/lockfile mismatches. To clean build artifacts, run pixi run --locked clean.

Alternatively, build and launch manually in a Pixi shell, starting from the repository root:

pixi install --locked
pixi shell --locked
source "$CONDA_PREFIX/setup.bash"
cd muse_ws
colcon build --symlink-install
source install/setup.bash
ros2 launch state_estimator state_estimator.launch.py

Skip colcon build if the workspace is already built. Use exit to leave the Pixi shell.

Conda

conda env create -f environment.yml
conda activate muse-ros2
source "$CONDA_PREFIX/setup.bash"
cd muse_ws
colcon build --symlink-install
source install/setup.bash
ros2 launch state_estimator state_estimator.launch.py

Build options and dependencies

Fresh builds default to Release. To switch to Debug, clean first to clear CMake's cached configuration:

pixi run --locked clean
pixi run --locked build --cmake-args -DCMAKE_BUILD_TYPE=Debug

Use Release to switch back; with Conda, pass the same --cmake-args to colcon build.

To update dependencies, edit pixi.toml, keep shared constraints aligned with environment.yml, run pixi lock, then install, clean, and rebuild. Commit pixi.toml and pixi.lock together. Both environments pin Python 3.11, CMake 3.26, GCC/G++ 14, and Empy 3 for ROS 2 Humble compatibility.

Robot configuration and checks

The default configuration uses A2 with unitree_hg/msg/LowState on /lowstate. Select your robot and input topic in robot.yaml; adjust output topics in the config folder. For another robot, add its URDF and configure joint mappings and foot frames.

With the estimator running and compatible robot data or a ROS 2 bag, inspect output from a separate terminal. For Pixi, start at the repository root:

pixi shell --locked
source "$CONDA_PREFIX/setup.bash"
source muse_ws/install/setup.bash
ros2 node info /state_estimator
ros2 topic hz /base_state
ros2 topic echo /muse/proprioceptive_sensor_fusion --once

From a sourced environment, run colcon test --return-code-on-test-failure and colcon test-result --verbose in muse_ws. The iit_commons numerical tests are currently disabled, so passing tests alone do not validate estimator accuracy.

Visualize data with PlotJuggler:

ros2 run plotjuggler plotjuggler

📜 TODO list

  • Extend the code to include exteroception
  • Conda-based environment
  • Full Support for ROS2 (on going)

🤗 Contributing

Contributions to this repository are welcome.

Citing the paper

@ARTICLE{10933515,
  author={Nisticò, Ylenia and Soares, João Carlos Virgolino and Amatucci, Lorenzo and Fink, Geoff and Semini, Claudio},
  journal={IEEE Robotics and Automation Letters}, 
  title={MUSE: A Real-Time Multi-Sensor State Estimator for Quadruped Robots}, 
  year={2025},
  volume={10},
  number={5},
  pages={4620-4627},
  keywords={Robots;Sensors;Robot sensing systems;Legged locomotion;Odometry;Cameras;Laser radar;Robot vision systems;Robot kinematics;Quadrupedal robots;State estimation;localization;sensor fusion;quadruped robots},
  doi={10.1109/LRA.2025.3553047}}

Maintainer

Avatar Name
Ylenia Nisticò

About

A State Estimation Package for Quadruped Robots, that fuses Proprioceptive and Exteroceptive data

Topics

Resources

Stars

142 stars

Watchers

6 watching

Forks

Releases

Packages

Contributors

Languages