Settings and Configuration

This page describes SMART’s configuration options and settings.

Configuration Files

SMART uses ARGoS XML configuration files. These are automatically generated by run_sim.py, but can be customized for advanced usage.

Default Configuration

A typical configuration file (output.argos) contains:

<?xml version="1.0" ?>
<argos-configuration>

  <!-- Framework settings -->
  <framework>
    <experiment length="1000" ticks_per_second="10" random_seed="42" />
  </framework>

  <!-- Controllers -->
  <controllers>
    <footbot_smart_controller id="fsc" library="...">
      <actuators>
        <differential_steering implementation="default" />
      </actuators>
      <sensors>
        <positioning implementation="default" />
      </sensors>
      <params server_port="8182" />
    </footbot_smart_controller>
  </controllers>

  <!-- Arena -->
  <arena size="32, 32, 1" center="16,16,0">
    <!-- Robots added dynamically -->
  </arena>

  <!-- Physics engines -->
  <physics_engines>
    <dynamics2d id="dyn2d" />
  </physics_engines>

  <!-- Media -->
  <media />

  <!-- Visualization -->
  <visualization>
    <qt-opengl>
      <camera>
        <placement idx="0" position="16,16,20"
                   look_at="16,16,0" lens_focal_length="20" />
      </camera>
    </qt-opengl>
  </visualization>

</argos-configuration>

Key Settings

Experiment Parameters

<experiment length="1000"
            ticks_per_second="10"
            random_seed="42" />
  • length - Simulation duration (timesteps)

  • ticks_per_second - Update frequency (Hz)

  • random_seed - For reproducibility

Robot Parameters

Configure robot physical properties:

<footbot_smart_controller>
  <params
    robot_radius="0.2"
    max_velocity="0.5"
    server_port="8182"
    coordination_threshold="0.5" />
</footbot_smart_controller>
  • robot_radius - Robot size in meters

  • max_velocity - Maximum speed (m/s)

  • server_port - RPC communication port

  • coordination_threshold - Distance for coordination

Arena Settings

<arena size="32, 32, 1" center="16,16,0">
  <floor id="floor" source="loop_functions" pixels_per_meter="50" />
  <box id="wall_north" size="32,0.1,0.5" movable="false">
    <body position="16,32,0" orientation="0,0,0" />
  </box>
  <!-- More walls... -->
</arena>
  • size - Arena dimensions (x, y, z) in meters

  • center - Arena center point

  • pixels_per_meter - Visualization resolution

Physics Engine

<physics_engines>
  <dynamics2d id="dyn2d">
    <friction>
      <footbot friction="0.7" />
    </friction>
  </dynamics2d>
</physics_engines>
  • friction - Surface friction coefficient

Python API Configuration

Set configuration via Python API:

from smart_client import SMARTClient

client = SMARTClient()

# Configure simulation
client.set_config({
    'robot_radius': 0.2,
    'max_velocity': 0.5,
    'time_limit': 1000,
    'ticks_per_second': 10,
    'collision_threshold': 0.1,
    'coordination_enabled': True,
    'visualization': False  # Headless mode
})

Command Line Configuration

Pass configuration via command-line arguments:

python run_sim.py \
    --map_name=map.map \
    --scen_name=scenario.scen \
    --num_agents=50 \
    --robot_radius=0.2 \
    --max_velocity=0.5 \
    --time_limit=1000 \
    --port_num=8182

Advanced Settings

Action Dependency Graph

Configure the ADG execution monitor:

client.set_adg_config({
    'edge_delay_threshold': 0.1,    # Delay detection threshold
    'collision_prediction': True,    # Predict collisions
    'replanning_enabled': False,     # Enable online replanning
    'priority_scheme': 'fifo'        # Agent priority: fifo, random, custom
})

Logging and Output

Control output verbosity and logging:

client.set_logging({
    'level': 'INFO',              # DEBUG, INFO, WARN, ERROR
    'output_dir': './results',    # Output directory
    'log_trajectories': True,     # Log actual trajectories
    'log_delays': True,           # Log delay events
    'log_collisions': True        # Log collision events
})

Performance Tuning

For large-scale experiments:

# Optimize for speed
client.set_config({
    'visualization': False,        # Disable rendering
    'ticks_per_second': 100,       # Increase update rate
    'physics_accuracy': 'low',     # Use simplified physics
    'collision_checking': 'approximate'  # Faster collision detection
})

For high-fidelity simulation:

# Optimize for accuracy
client.set_config({
    'ticks_per_second': 50,        # Higher time resolution
    'physics_accuracy': 'high',    # Detailed physics
    'collision_checking': 'exact', # Precise collision detection
    'sensor_noise': 0.01           # Add sensor noise
})

Environment Variables

Set via shell:

export SMART_CONFIG_FILE=custom_config.argos
export SMART_SERVER_PORT=8182
export SMART_LOG_LEVEL=DEBUG

python run_sim.py ...

Configuration Profiles

Create reusable configuration profiles:

config/fast_batch.json:

{
  "visualization": false,
  "ticks_per_second": 100,
  "time_limit": 500,
  "log_level": "WARN"
}

config/accurate_sim.json:

{
  "visualization": true,
  "ticks_per_second": 50,
  "physics_accuracy": "high",
  "sensor_noise": 0.01,
  "log_level": "INFO"
}

Load a profile:

import json

with open('config/fast_batch.json') as f:
    config = json.load(f)

client.set_config(config)

Next Steps