Spot Robot Quadruped Dependencies
Overview
The Spot robot implementation in nova-sim has been decoupled from external quadruped dependencies. Previously, it required installation of:
gym_quadruped(from https://github.com/iit-DLSLab/gym-quadruped)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 forquadruped_pympc.config.mpc_params- Provides default values for horizon and other MPC parameters
Files Modified
quadruped_deps.py (NEW)
- Standalone implementations of all dependencies
- ~350 lines of clean, documented code
-
- Updated to import from
quadruped_depsfirst - Falls back to external packages if needed
- Handles import errors gracefully
- Updated to import from
controllers/quadruped_pympc_controller.py
- Updated to import from
quadruped_depsfirst - Falls back to external packages if needed
- Handles both local and external config formats
- Updated to import from
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:
- Check the upstream repositories for changes
- Update quadruped_deps.py with any new functionality
- Run the test commands above to verify everything works
- Update this document if needed
Original Repositories
- gym_quadruped: https://github.com/iit-DLSLab/gym-quadruped
- Quadruped-PyMPC: https://github.com/iit-DLSLab/Quadruped-PyMPC