nova-sim / robots /spot /DEPENDENCIES.md
Georg
Enhance mujoco_server.py and README.md for improved teleoperation and environment management
9078db7

Spot Robot Quadruped Dependencies

Overview

The Spot robot implementation in nova-sim has been decoupled from external quadruped dependencies. Previously, it required installation of:

  1. gym_quadruped (from https://github.com/iit-DLSLab/gym-quadruped)
  2. quadruped_pympc (from https://github.com/iit-DLSLab/Quadruped-PyMPC)

These packages are large, complex, and include many submodules (like acados) that are unnecessary for nova-sim's use case.

Solution

All required code has been extracted and placed in quadruped_deps.py, making nova-sim standalone and self-contained.

What Was Extracted

From gym_quadruped.robot_cfgs:

  • RobotConfig - Dataclass for robot configuration (hip height, joint names, feet geometry)

From gym_quadruped.utils.quadruped_utils:

  • LegsAttr - Dataclass for managing leg-specific attributes (FL, FR, RL, RR)
    • Supports indexing, iteration, and arithmetic operations

From quadruped_pympc.helpers.quadruped_utils:

  • GaitType - Enum for different gait patterns (TROT, PACE, BOUNDING, etc.)

From quadruped_pympc.helpers.periodic_gait_generator:

  • PeriodicGaitGenerator - Generates periodic gait patterns for quadruped locomotion
    • Handles phase timing for each leg
    • Supports multiple gait types
    • Computes contact sequences for MPC

Minimal MPC Configuration:

  • _MinimalMPCConfig - Stub for quadruped_pympc.config.mpc_params
    • Provides default values for horizon and other MPC parameters

Files Modified

  1. quadruped_deps.py (NEW)

    • Standalone implementations of all dependencies
    • ~350 lines of clean, documented code
  2. spot_gym_config.py

    • Updated to import from quadruped_deps first
    • Falls back to external packages if needed
    • Handles import errors gracefully
  3. controllers/quadruped_pympc_controller.py

    • Updated to import from quadruped_deps first
    • Falls back to external packages if needed
    • Handles both local and external config formats

Benefits

No External Dependencies: nova-sim runs without installing gym_quadruped or quadruped_pympc ✅ Smaller Footprint: Extracted only ~350 lines vs. entire repositories with submodules ✅ Faster Setup: No need to clone --recurse-submodules or install acados ✅ Backward Compatible: Still works if external packages are installed ✅ Maintainable: All code in one file, easy to understand and modify

Testing

All functionality has been tested and verified:

# Test standalone dependencies
python3 -c "
import sys
sys.path.insert(0, 'robots/spot')
from quadruped_deps import RobotConfig, LegsAttr, GaitType, PeriodicGaitGenerator
print('✓ All imports successful')
"

# Test Spot configuration
python3 << 'EOF'
import sys
sys.path.insert(0, '/path/to/nova-sim')
from robots.spot.spot_gym_config import get_spot_robot_config
config = get_spot_robot_config()
print(f'✓ Hip height: {config.hip_height}')
EOF

# Test controller
python3 << 'EOF'
import sys
sys.path.insert(0, '/path/to/nova-sim')
from robots.spot.controllers.quadruped_pympc_controller import QuadrupedPyMPCController
controller = QuadrupedPyMPCController(num_joints=12)
print(f'✓ Controller initialized: {controller.pympc_initialized}')
EOF

License Note

The extracted code comes from BSD-3-Clause licensed projects:

  • gym_quadruped: BSD-3-Clause
  • Quadruped-PyMPC: BSD-3-Clause

Original copyright notices and licenses should be acknowledged. This extraction is for convenience and does not change the licensing of the original work.

Future Maintenance

If you need to update the quadruped dependencies:

  1. Check the upstream repositories for changes
  2. Update quadruped_deps.py with any new functionality
  3. Run the test commands above to verify everything works
  4. Update this document if needed

Original Repositories