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 | |