Advanced Usage

This section covers advanced usage patterns and examples for MuJoCo Tools.

Custom Data Recording

You can customize what data is recorded during simulations:

from mujoco_tools import MujocoPlayer, StateRecorder
from mujoco_tools.mujoco_loader import MujocoLoader

# Load model
loader = MujocoLoader(model_path='path/to/model.xml')

# Create state recorder with custom settings
recorder = StateRecorder(
    model=loader.model,
    data=loader.data,
    output_path='logs',
    output_prefix='custom_recording',
    record_types=['qpos', 'qvel', 'xpos', 'xquat'],
    format='npy'
)

# Run simulation with recording
for i in range(1000):
    loader.step()
    recorder.record()

# Save recorded data
recorder.save()

Custom Visualization

Customize visualization with different camera views and rendering options:

from mujoco_tools import MujocoPlayer, VideoRecorder
from mujoco_tools.mujoco_loader import MujocoLoader
import mujoco as mj

# Load model
loader = MujocoLoader(model_path='path/to/model.xml')

# Create player with custom settings
player = MujocoPlayer(
    model=loader.model,
    data=loader.data,
    width=1920,
    height=1080,
    camera_name='side'  # Use a specific camera
)

# Add custom visualization flags
player.add_vis_flag(mj.mjtVisFlag.mjVIS_JOINT)
player.add_vis_flag(mj.mjtVisFlag.mjVIS_ACTUATOR)

# Create video recorder
recorder = VideoRecorder(
    model=loader.model,
    data=loader.data,
    output_path='videos/custom.mp4',
    width=1920,
    height=1080,
    fps=60
)

# Run simulation with recording
for i in range(1000):
    loader.step()
    player.render()
    recorder.record()

# Finalize video
recorder.close()

Bash Script Examples

Creating a sophisticated bash script for batch processing:

#!/bin/bash

# Define variables
MODEL_DIR="models"
OUTPUT_DIR="results"
RESOLUTIONS=("720p" "1080p" "4K")
CAMERAS=("free" "side" "top")

# Create output directory if it doesn't exist
mkdir -p "$OUTPUT_DIR"

# Process each model
for MODEL in "$MODEL_DIR"/*.xml; do
  MODEL_NAME=$(basename "$MODEL" .xml)

  # Process each camera
  for CAMERA in "${CAMERAS[@]}"; do
    # Process each resolution
    for RES in "${RESOLUTIONS[@]}"; do
      OUTPUT="${OUTPUT_DIR}/${MODEL_NAME}_${CAMERA}_${RES}.mp4"

      echo "Processing $MODEL_NAME with camera $CAMERA at $RES"

      # Build and run command
      mujoco-tools \
        -m "$MODEL" \
        --camera "$CAMERA" \
        --resolution "$RES" \
        --record_video \
        --output_path "$OUTPUT" \
        --record_data \
        --format "npy" \
        --datatype "qpos qvel xpos xquat"
    done
  done
done

echo "All processing complete!"