Directory Tree
The project is organized into several top-level directories, each serving a specific purpose:Key Modules
Core Control System
gait_controller.py - Diagonal Gait Generator
gait_controller.py - Diagonal Gait Generator
Location:
~/workspace/source/gait_controller.pyImplements the baseline diagonal (trot) gait using state machines and Bezier curves.Key Classes:GaitParameters: Configuration dataclass for gait settingsDiagonalGaitController: State machine-based gait generator
- Diagonal pair coordination (FL+RR, FR+RL)
- Bezier swing trajectories (cubic curves)
- Linear stance phase trajectories
- Configurable cycle time, step height/length
ik.py - Inverse Kinematics Solver
ik.py - Inverse Kinematics Solver
Location:
~/workspace/source/ik.pyProvides 3-DOF inverse kinematics for the parallel SCARA leg mechanism.Key Functions:solve_leg_ik_3dof(target, tilt_angle, L1, L2, base_dist, mode): Main IK solverparallel_scara_ik(target, L1, L2, base_dist, mode): 2-DOF planar solversolve_2link_ik(target, base, L1, L2, elbow_up): Basic 2-link IK
L1 = 0.045m (upper link)L2 = 0.06m (lower link)base_dist = 0.021m (parallel arm separation)mode: Elbow configuration (1-4)
(tilt_angle, shoulder_A, shoulder_B) or None if unreachableSee ~/workspace/source/ik.py:1 for implementation details.controllers/adaptive_gait_controller.py - RL Controller
controllers/adaptive_gait_controller.py - RL Controller
Location: API:See
~/workspace/source/controllers/adaptive_gait_controller.pyExtends the baseline gait controller with online parameter adaptation via reinforcement learning.Key Features:- Modulates 4 gait parameters:
step_height,step_length,cycle_time,body_height - Applies per-leg residual corrections (12D)
- Clips parameter updates to safe ranges
- Preserves gait phase during parameter changes
~/workspace/source/controllers/adaptive_gait_controller.py:20 for full implementation.Environment System
envs/adaptive_gait_env.py - Training Environment
envs/adaptive_gait_env.py - Training Environment
Location: Key Methods:
~/workspace/source/envs/adaptive_gait_env.pyGymnasium environment for training adaptive gait policies with PPO.Observation Space (69D):- Body state: position (3), quaternion (4), linear velocity (3), angular velocity (3)
- Joint state: positions (12), velocities (12)
- Foot positions (12), foot velocities (12)
- Foot contacts (4)
- Current gait parameters (4)
- Gait parameter deltas (4): scaled by
PARAM_DELTA_SCALES - Per-leg residuals (12): scaled by
residual_scale
reset(): Initialize episode with optional randomizationstep(action): Execute one control step_compute_reward(): Multi-component reward computation_check_termination(): Detect falls and timeouts
~/workspace/source/envs/adaptive_gait_env.py:60 for details.Utility Modules
utils/sensor_utils.py - Sensor Reading
utils/sensor_utils.py - Sensor Reading
Location: Available Sensors:
~/workspace/source/utils/sensor_utils.pyProvides high-level interface to MuJoCo sensors.SensorReader Class:body_pos,body_quat: Base position and orientationbody_linvel,body_angvel: Base velocitiesFL_foot_pos,FR_foot_pos, etc.: Individual foot positions
utils/control_utils.py - Joint Control
utils/control_utils.py - Joint Control
Location: Joint Naming Convention:
~/workspace/source/utils/control_utils.pyHelpers for applying joint angles to the MuJoCo model.Functions:{leg}_tilt: Leg rotation around body{leg}_shoulder_left: Left parallel arm{leg}_shoulder_right: Right parallel arm
Training Pipeline
Training Script
Location:~/workspace/source/train_adaptive_gait_ppo.py
Main training script using Stable Baselines3 PPO.
Key Configuration:
~/workspace/source/train_adaptive_gait_ppo.py:1 for full implementation.
Playback Scripts
play_adaptive_policy.py - Policy Evaluation
play_adaptive_policy.py - Policy Evaluation
Location: Options:
~/workspace/source/play_adaptive_policy.pyUsage:--flat: Use flat terrain instead of rough--no-reset: Disable auto-reset on termination--record: Save video recording
ROS2 Integration
sim.py - ROS2 Simulation Node
Location:~/workspace/source/sim.py
Bridge between MuJoCo simulation and ROS2 ecosystem.
Topics:
/robot_camera(sensor_msgs/Image): 640x480 RGB @ 10 Hz/body_state(std_msgs/Float32MultiArray): [x, y, z, roll, pitch, yaw]/movement_command(std_msgs/Int32): 0=stop, 1=forward, 2=backward
/restart_simulation(std_srvs/Trigger): Reset simulation state
GUI Integration
Location:~/workspace/source/gui/gui.py
PyQt5 GUI with joystick control and camera feed.
Features:
- Real-time camera display
- Joystick input handling (pygame)
- Reset button (calls
/restart_simulationservice)
Both
sim.py and gui.py must be running simultaneously for full functionality.Model Files
MuJoCo World Definitions
world.xml - Flat Terrain
world.xml - Flat Terrain
Location:
~/workspace/source/model/world.xmlSimple flat ground plane for baseline testing.world_train.xml - Rough Terrain
world_train.xml - Rough Terrain
Location: See Custom Terrains for heightfield generation.
~/workspace/source/model/world_train.xmlHeightfield-based rough terrain for RL training.Robot Definition
Location:~/workspace/source/model/robot.xml
12-DOF quadruped with 4x 3-DOF parallel SCARA legs.
Key Features:
- Body size: 0.1m × 0.08m × 0.03m
- Leg attachment offsets: ±0.05m (X), ±0.04m (Y)
- Joint limits: Tilt ±45°, Shoulders ±180°
- PID control: kp=100, damping=5
Testing and Validation
Comparison Tests
Location:~/workspace/source/tests/compare_baseline_adaptive.py
Comprehensive 3-step comparison:
- Baseline on flat terrain
- Baseline on rough terrain
- Adaptive policy on rough terrain
- Terminal: Tabular comparison of metrics
- Plot: 3-panel trajectory visualization
- JSON: Raw trajectory data
Unit Tests
Test IK Solver
Test IK Solver
- 2-DOF planar IK for all 4 elbow modes
- 3-DOF IK with tilt control
- Pure height control (zero lateral displacement)
- Reachability boundary checks
Test Gait Controller
Test Gait Controller
- State machine transitions
- Bezier curve generation
- Stance phase trajectories
- Diagonal pair coordination
Test Environment
Test Environment
- Environment reset
- Action/observation spaces
- Reward computation
- Termination conditions
Development Workflow
Typical Iteration Cycle
-
Modify controller/environment
-
Run unit tests
-
Train new policy
-
Evaluate performance
-
Monitor training
Code Style
- Type hints: All functions use PEP 484 annotations
- Docstrings: Google style
- Line length: 100 characters
- Imports: Sorted with
isort
Next Steps
Debugging
Learn debugging techniques for MuJoCo, RL, and ROS2
Custom Terrains
Generate custom MuJoCo heightfield terrains
Extending Controllers
Add new gait parameters or controller behaviors
API Reference
Detailed API documentation