# Bridging the Gap: Simulation Enhancement

## Domain Randomization

Domain randomization is a key technique for expanding our simulation domain and improving system robustness. Here’s how we implement it:

### Randomize Physical Parameters

We modify various physical attributes of our simulated environment:

- Body mass properties of the robot and manipulated objects
- Joint parameters for different movement characteristics
- Friction coefficients between the various surfaces

#### NOTE
While link length randomization is possible, it’s challenging to implement effectively with most simulators.

### Randomize Shapes

We vary the physical forms in our simulation:

- Terrain variations to expose the robot to different ground conditions
- Object shapes and sizes for grasping tasks, helping the robot learn general concepts rather than specific instances

### Randomize Tasks

We introduce variability in how tasks are performed:

- Random initial conditions for robot joint states
- Varied object positions and orientations
- Diverse command sets, such as different target velocities

### Add Perturbations

To build robustness, we incorporate various disturbances:

- Observation noise, particularly for naturally noisy signals like joint velocities, or data coming from an inertial measurement unit (IMU)
- Physical pushes to develop recovery behaviors
