Understanding the codebase — what's where and what to read first
ASPEN is composed of five repositories. The SDK orchestrates the others as git submodules (except the C2 UI, which is standalone).
src/aspensdk/core/simulation/ Environment loop, step managerssrc/aspensdk/core/objects/ Robots, environments, bathymetry, oceansrc/aspensdk/core/utils/ Coordinate transforms, helperssrc/aspensdk/core/acoustics/ Acoustic propagation modelssrc/aspensdk/core/rl/ Reinforcement learning integrationsrc/aspensdk/core/simulation/envs/Env.py Start here — the main environment classsrc/aspenenvmodels/models/bathymetry/ Seafloor terrain processingsrc/aspenenvmodels/models/ocean_model/ Hydrodynamic data (currents, temp, salinity)src/aspenenvmodels/models/atmosphere/ Wind and weather dataCoordinateUtils.py Geo-to-simulation coordinate transformsVoxelizeDataUtils.py Data → NanoVDB voxel grid conversionIOUtils.py File I/O for NetCDF, GeoTIFF, NVDB formatsmodels/physics/remus100/ REMUS 100 AUV dynamicsmodels/physics/iver_6DoF/ IVER AUV 6-DOF modelmodels/physics/blue_rov2/ BlueROV2 thruster modelmodels/physics/toy_drone/ Simplified test vehiclemodels/sensors/ 11 sensor types (DVL, CTD, ADCP, sidescan, etc.)control/ PID controllers, autopilotsguidance/ Waypoint following, path plannersvehicle_assets/BlueROV/ BlueROV2 meshes and USDvehicle_assets/REMUS100/ REMUS 100 meshes and USDvehicle_assets/remus/ Additional REMUS configsvehicle_assets/IVER/ IVER AUV assetsnarr_assets/ Narragansett Bay environmentdabob_assets/ Dabob Bay environmenteast_river_assets/ East River environmentpuerto_rico_assets/ Puerto Rico trench environmentcloud_water_surface_assets/ Water surface rendering, skybox, cloudssrc/components/TopBar/ Navigation and mode switchingsrc/components/Viewport/ deck.gl 3D map renderingsrc/components/MissionPanel/ Waypoint and mission editingsrc/components/EnvironmentPanel/ Env data overlayssrc/components/TimelinePanel/ Playback and time scrubbingsrc/store/ Zustand stores (mission, vehicle, environment)src/api/ Mock service layer — ready for real backend swapStart with these 10 files in order. They'll give you the mental model needed to navigate everything else.
Mental models that will help you understand how the code fits together.
Env creates a World, then calls step() each frame to advance physics, update sensors, and collect observations. Everything flows from this loop.aspenenvmodels and aspenrobotmodels as Python packages. They are git submodules checked out inside the SDK repo. Edit them in-place; commit in each submodule separately.GLOBAL_PATHS.yaml. Change behavior by editing config, not code.Four common modifications, ranked from easiest to most involved.
waypoints array directly in the example script (e.g., Remus_Dabob_Bay_GPU.py). Each waypoint is a [lat, lon, depth] tuple. Re-run the simulation to see the new path.NUM_VEHICLES in the simulation config or example script. The Env class will spawn that many instances with independent physics. Make sure your GPU has enough memory for the additional vehicles.ASPENEnvModels pipeline. Generate NVDB files for bathymetry and ocean fields. Place output in the assets directory and update GLOBAL_PATHS.yaml with the new paths.BaseSensor class in ASPENRobotModels. Implement the measure() method with your sensor physics. Register the new sensor type in SensorLookup.py so the system can instantiate it from config.The two most important config files you will interact with, annotated field by field.