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](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](quadruped_deps.py)** (NEW)
- Standalone implementations of all dependencies
- ~350 lines of clean, documented code
2. **[spot_gym_config.py](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](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:
```bash
# 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](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
- gym_quadruped: https://github.com/iit-DLSLab/gym-quadruped
- Quadruped-PyMPC: https://github.com/iit-DLSLab/Quadruped-PyMPC