Session Log#
This page describes each file that the game writes into the session folder: the names, the columns, the keys and the units. The examples show rows of real sessions.
| Group | Contents |
|---|---|
| Session Folder | The location, the name and the layout of the folder. |
| Conventions | The frames, the time bases, the rates and the units. |
| Vehicle Files | tractor.csv, session-summary.json, dbw.csv, vehicle.csv, the replay files and the test files. |
| Sensor Episodes | The streams, the images, the point clouds and episode.json. |
| Farm Files | The farm state, the water grid, the field totals and the events. |
| Configuration Copies | The files that the menu writes before the session starts. |
The episode log is a different file. It is one MCAP file with the states of all agents. Episode Log describes it.
At recording stop, the recorder waits for submitted GPU LiDAR copies and releases their readback buffers.
A scan that still waits for a rendered view keeps its CPU result. The manifest counts these scans in
lidar.gpu_stop_fallbacks; the stop log uses lidar_stop_fallback. Actual GPU failures remain in
lidar.gpu_scan_failures and the error list. Missed camera or LiDAR deadlines have separate counters.
Session Folder#
The session folder contains the configuration and the logs of one session.
The menu makes a new folder for each session. A session from the command line uses the folder of -VehicleOutput=.
| Start | Folder |
|---|---|
| Menu | Saved/Sessions/<YYYYMMDD-HHMMSS>-<mode>. The mode is simulation, replay or pilot. |
| Menu, second session in the same second | The same name with the suffix -2, -3 and higher. |
Command line with -VehicleOutput=<folder> |
The given folder. |
Command line without -VehicleOutput= |
Saved/Vehicle. Each session writes over the files of the last session. |
The folder Saved is in the project folder of the game.
| Build | Location of Saved |
|---|---|
| Development, packaged | Packaged/Linux/Acres/Saved or Packaged\Windows\Acres\Saved. |
| Development, editor | Acres/Saved. |
| Shipping, Linux | ~/.config/Epic/Acres/Saved. Unreal Engine puts the data of a Shipping build in the user folder. |
| Shipping, Windows | %LOCALAPPDATA%\Acres\Saved. |
Layout#
A session with one agent writes all files into the session folder. In a session with more than one agent, each agent has a subfolder with the name of the agent. The farm files and the configuration copies stay in the session folder.
| File or Folder | Condition | Agent Folder |
|---|---|---|
tractor.csv, session-summary.json |
-SessionLog |
yes |
dbw.csv |
Polaris with -SessionLog, -VehicleRecord or -DbwLog |
yes |
vehicle.csv, metadata.json, georeference.json |
-VehicleRecord, -VehicleTest= or -VehicleRoute= |
yes |
sensors/episode-NNN/ |
-SensorRecord or the key F6 |
yes |
replay-tracking.csv, replay-summary.json |
-ReplayFile= |
yes |
review-frames.csv, route-result.json |
-VehicleRoute= |
yes |
terrain-probes.csv, vehicle.png |
-TerrainVerify, -VehicleCapture |
no |
farm-*.json, farm-*.csv, farm-*.bin, theta.f32, water-depth.f32 |
A session with the farm | no |
npc-events.csv |
-NpcVehicles, -NpcWorkers or -NpcTraffic= |
no |
episode-NNNN.mcap |
A recording that a client starts without a path | no |
environment.json, tractor.json, sensors.json, session-config.json, field-setup.json, terrain-edits.f32 |
A session from the menu | no |
-SensorOutput= moves the episodes to a different folder. Command-Line Options describes the options.
One agent
# -SessionLog -SensorRecord -VehicleRecord -NpcVehicles
session1/
tractor.csv session-summary.json
vehicle.csv metadata.json
georeference.json npc-events.csv
farm-state.json farm-water.bin
farm-field.bin farm-config.json
farm-fields.csv farm-events.csv
farm-weather.csv farm-water.json
farm-visuals.json theta.f32
water-depth.f32
sensors/episode-001/
Two agents
Conventions#
| Item | Convention |
|---|---|
| Physics step | One step is 1/120 s. step and physics_step count the steps from the start of the session. |
time_s in tractor.csv, vehicle.csv, dbw.csv |
The physics time of the vehicle from its spawn, in seconds. |
time_s in a sensor stream |
The time from the start of the episode: the number of physics steps divided by 120. |
simulation_time_s |
The physics time of the session. It does not start again in a new episode. |
sample_time_s, available_time_s, delivery_time_s |
The sample time of a sensor, the sample time plus the delay of the sensor, and the time of the write. |
| ENU frame | East, north and up in metres. The origin is the origin of the tile. The axes are the grid axes of EPSG:2968. |
| Unreal frame | ue_x_m points east and ue_y_m points south. The values are in metres. |
| FLU frame | Forward, left and up, in metres. The origin is the reference origin of the chassis. |
| Quaternion | quaternion_flu_to_enu_xyzw rotates a vector from the FLU frame to the ENU frame. The sequence is x, y, z, w. |
| Geographic position | tractor.csv gives NAD83(HARN) latitude and longitude. The GNSS stream gives WGS84(G2139) and the NAD83 values. |
| Height | altitude_navd88_m is a NAVD88 height. An ellipsoidal height has ellipsoidal in its name. |
| Angle | Radians, unless the name ends with _deg. heading_deg is clockwise from north. |
| Curvature | 1/m. A positive value is a turn to the left. |
| Unit | SI. The name of a column or a key ends with the unit, for example _m, _mps, _n, _kpa, _kw. |
| File | Rate |
|---|---|
tractor.csv |
120 Hz, one row for each physics step. |
vehicle.csv |
120 Hz, one row for each wheel in each physics step. |
dbw.csv |
50 Hz. |
truth.jsonl, actions.jsonl |
120 Hz. |
imu.jsonl |
120 Hz by default (imu.hz). |
ins.jsonl |
100 Hz by default (ins.hz). |
gnss.jsonl, lidar.jsonl, camera.jsonl |
10 Hz by default (gnss.hz, lidar.hz, camera.hz). |
can.jsonl |
20 Hz by default (can.hz), two frames in each sample. |
replay-tracking.csv |
10 Hz. |
farm-weather.csv |
One row for each hour of game time. |
Vehicle Files#
tractor.csv#
The vehicle log of one agent. The Maxxum and the Polaris write the same 153 columns.
The file is also a valid input for -ReplayFile=. The source is AcresSessionLog.cpp.
For the Polaris, gear is the gear of the drive-by-wire: 1 park, 2 reverse, 3 neutral, 4 high, 5 low.
The implement columns of the Polaris are empty or zero.
| Column | Unit | Description |
|---|---|---|
time_s |
s | The physics time from the spawn. |
step |
The physics step. | |
local_hour |
h | The local time of the environment clock. |
day |
d | The day index of the session, from 0. |
ue_x_m, ue_y_m, ue_z_m |
m | The position in the Unreal frame. |
east_m, north_m, up_m |
m | The position in the ENU frame. |
latitude_deg, longitude_deg |
deg | The NAD83(HARN) position from the inverse projection of EPSG:2968. |
altitude_navd88_m |
m | The NAVD88 height. |
heading_deg |
deg | The heading, clockwise from north, 0 to 360. |
pitch_deg, roll_deg |
deg | The pitch and the roll of the Unreal rotator. |
speed_mps |
m/s | The speed with a sign. A negative value is reverse motion. |
v_forward_mps, v_left_mps |
m/s | The velocity along the forward axis and the left axis. |
yaw_rate_radps |
rad/s | The yaw rate. A positive value is counter-clockwise. |
accel_forward_mps2, accel_left_mps2 |
m/s² | The difference of the velocity between two rows, without gravity. |
rpm |
rev/min | The engine speed. |
engine_torque_nm, clutch_torque_nm |
N m | The engine torque and the torque that the clutch transmits. |
engine_power_kw |
kW | The engine torque multiplied by the engine speed. |
gear |
The gear. The first gear of the Maxxum is 1. | |
direction |
1 for forward and -1 for reverse. | |
throttle, brake |
The pedal inputs, 0 to 1. | |
steer_command_rad |
rad | The steering command. A positive value is a turn to the left. |
steer_fl_rad, steer_fr_rad |
rad | The angles of the front left and the front right wheel. |
curvature_command_1pm |
1/m | \(\tan(\delta_{cmd})/L\) with the wheelbase \(L\). |
curvature_measured_1pm |
1/m | The yaw rate divided by the forward speed. Below 0.3 m/s, the mean front wheel angle gives the value. |
turn_radius_m |
m | The inverse of the measured curvature. 0 for a straight path. |
Nine columns follow for each wheel. The prefixes are fl, fr, rl and rr.
| Column | Unit | Description |
|---|---|---|
fl_load_n |
N | The normal load of the wheel. |
fl_traction_n |
N | The longitudinal force of the tyre. |
fl_lateral_n |
N | The lateral force of the tyre. |
fl_slip |
The slip ratio. | |
fl_omega_radps |
rad/s | The angular speed of the wheel. |
fl_sinkage_m |
m | The sinkage of the tyre into the soil. |
fl_pressure_kpa |
kPa | The contact pressure. |
fl_surface |
The surface index: 0 asphalt, 1 concrete, 2 gravel, 3 dry soil, 4 wet soil, 5 mud, 7 sod lane, 8 sod, 9 dirt track. | |
fl_contact |
1 when the wheel touches the ground. |
| Column | Unit | Description |
|---|---|---|
total_traction_n |
N | The sum of the longitudinal forces of the four tyres. |
implement_draft_n |
N | The draft of the implement in this step. |
mass_kg |
kg | The mass of the vehicle with its load. |
pto_kw |
kW | The constant PTO load of -VehiclePtoKW= and of the harvest cutter. |
bunker_kg |
kg | The crop mass in the bunker. |
fuel_lph, fuel_used_l |
L/h, L | The fuel flow and the fuel from the start. |
air_c, rain_mmh |
°C, mm/h | The air temperature and the rain rate. |
wind_mps, wind_from_deg |
m/s, deg | The wind speed and the direction that the wind comes from. |
cloud_cover |
The cloud cover, 0 to 1. | |
diff_lock |
0 open, 1 rear lock, 2 rear and front lock. | |
fuel_power_kw |
kW | The power of the fuel flow. |
brake_power_kw |
kW | The fuel power minus the losses of the engine. |
engine_loss_kw, parasitic_kw |
kW | The thermal and friction loss of the engine, and the parasitic load. |
pto_shaft_kw, hydraulic_kw, accessory_loss_kw |
kW | The PTO power, the hydraulic power and the loss of the accessories. |
clutch_loss_kw, driveline_loss_kw, brake_loss_kw |
kW | The losses in the clutch, the driveline and the brakes. |
tyre_rolling_kw, tyre_slip_kw, soil_rutting_kw |
kW | The tyre hysteresis, the slip loss and the work that makes the ruts. |
traction_kw, axle_kw |
kW | The net tyre power and the power at the axles. |
drawbar_kw |
kW | The draft multiplied by the forward speed. |
tractive_eff |
The net tyre work divided by the axle work. | |
fuel_tank_l |
L | The fuel in the tank. |
fuel_l_per_km, fuel_l_per_ha |
L/km, L/ha | The fuel for each kilometre and for each hectare of the implement width. |
The implement columns come from the implement model of the Maxxum. Implement Mechanics gives the model.
| Column | Unit | Description |
|---|---|---|
implement |
The implement identifier, for example chisel_plow. Empty without an implement. |
|
implement_depth_m, implement_depth_setting_m |
m | The depth of the tools and the depth setting. |
implement_vertical_n, implement_lateral_n |
N | The vertical force (up is positive) and the lateral force on the tractor. |
sensed_draft_n, draft_setpoint_n |
N | The draft at the lower links and the set-point of the draft control. |
hitch_mode |
0 position, 1 draft, 2 float. | |
hitch_lever, hitch_lift_deg |
, deg | The position of the hitch lever and the lift angle of the lower links. |
implement_in_soil, implement_floating |
1 when the tools are in the soil. 1 when the hitch floats. | |
tines_tripped, trip_max_deg |
, deg | The number of tripped tines and the largest trip angle. |
ground_offset_m |
m | The height of the ground below the tools in the tractor frame. |
pto_on, pto_rpm |
, rev/min | The state and the speed of the PTO shaft. |
implement_pto_kw, implement_hydraulic_kw, implement_draft_kw |
kW | The PTO power, the hydraulic power and the draft power of the implement. |
implement_mass_kg, implement_payload_kg |
kg | The mass of the implement and of its contents. |
seed_kg, sown_ha, sown_rate_kg_ha |
kg, ha, kg/ha | The seed in the hopper, the sown area and the seed rate. |
tank_l, sprayed_ha, spray_rate_l_ha |
L, ha, L/ha | The liquid in the tank, the sprayed area and the application rate. |
bales_dropped, flywheel_rpm, plunger_kn, baler_intake_kg_s |
, rev/min, kN, kg/s | The state of the baler. |
loader_lift_deg, loader_curl_deg |
deg | The angles of the loader. |
bucket_kg, dug_kg |
kg | The soil in the bucket of the backhoe and the total dug mass. |
baler_yaw_deg |
deg | The articulation angle of the baler drawbar. |
hand_throttle, park_brake |
The hand throttle, 0 to 1, and the state of the park brake. |
The last nine columns give the soil below the rear axle. The values are the mean of the two rear wheels.
| Column | Unit | Description |
|---|---|---|
soil_class |
The soil class of the soil library. Empty on a hard surface. | |
soil_theta |
m³/m³ | The volumetric water content. |
soil_saturation |
The effective saturation, 0 to 1. | |
soil_wetness |
The surface wetness, 0 to 1. | |
cone_index_kpa |
kPa | The cone index. |
soil_density_mg_m3 |
Mg/m³ | The dry density after compaction. |
water_depth_mm |
mm | The depth of the water on the surface. |
soil_resistance_n |
N | The motion resistance of the soil, sum of the four wheels. |
bulldozing_n |
N | The bulldozing part of the resistance. |
The first 16 columns of one row
time_s,step,local_hour,day,ue_x_m,ue_y_m,ue_z_m,
east_m,north_m,up_m,latitude_deg,longitude_deg,
altitude_navd88_m,heading_deg,pitch_deg,roll_deg,...
5.000000,600,10.001389,0,-38.7155,129.2747,1.4134,
-38.7155,-129.2747,1.4134,40.470412677,-86.994832067,
216.2978,0.068,-0.718,-0.423,...
Other values of the same row
session-summary.json#
The totals of tractor.csv. The game writes the file when the session stops.
| Key | Unit | Description |
|---|---|---|
schema |
acres-session-summary-1. |
|
rows, dropped_rows |
The number of rows, and the rows that the writer dropped at a full queue. | |
duration_s |
s | The time between the first and the last row. |
distance_m |
m | The length of the path in three dimensions. A jump of more than 5 m in one row does not count. |
max_speed_mps |
m/s | The maximum absolute speed. |
fuel_used_l |
L | The integral of the fuel flow. |
engine_energy_kwh |
kWh | The integral of the positive engine power. |
max_abs_slip |
The maximum absolute slip ratio of a wheel in contact. | |
max_sinkage_m |
m | The maximum sinkage. |
distance_model, fuel_model |
Text that describes the two calculations. | |
files |
Text that names the other files of the session. |
dbw.csv#
The drive-by-wire reports of the Polaris. The values and the units are those of the ds_dbw_msgs reports.
Drive-by-Wire and ULC gives the model. The source is AcresPolaris.cpp.
| Column | Unit | Description |
|---|---|---|
time_s |
s | The physics time from the spawn. |
system_enabled, override |
1 when the drive-by-wire is on. 1 after an override by the driver. | |
steer_enabled, throttle_enabled, brake_enabled, ulc_enabled |
1 when the subsystem obeys commands. | |
steering_wheel_angle_deg, steering_cmd_deg |
deg | The angle of the steering wheel and the command angle. |
steering_cmd_type |
The command type of the steering report. | |
throttle_percent_input, throttle_percent_cmd, throttle_percent_output |
% | The pedal of the driver, the command and the output. |
throttle_cmd_type |
The command type of the throttle report. | |
brake_pressure_input_bar, brake_pressure_cmd_bar, brake_pressure_output_bar |
bar | The pressure of the driver, the command and the output. |
brake_cmd_type |
The command type of the brake report. | |
gear, gear_cmd, gear_driver |
The gear, the command and the lever of the driver: 1 park, 2 reverse, 3 neutral, 4 high, 5 low. | |
ulc_cmd_type |
The command type of the ULC report. | |
ulc_vel_ref_mps, ulc_vel_meas_mps |
m/s | The reference speed and the measured speed of the ULC. |
ulc_accel_ref_mps2 |
m/s² | The reference acceleration of the ULC. |
ulc_holding |
1 when the ULC holds the vehicle at a stop. | |
vehicle_velocity_brake_mps, vehicle_velocity_propulsion_mps |
m/s | The two speeds of the vehicle velocity report. |
drive_mode |
0 turf, 1 two-wheel drive, 2 all-wheel drive. | |
road_wheel_rad |
rad | The steering angle of the bicycle model. |
cvt_ratio |
The ratio of the CVT. |
vehicle.csv and metadata.json#
The telemetry of the wheels. The game keeps a maximum of 50000 physics steps in memory and writes the file at the end.
-VehicleRecord, a scripted test and a review route write it. georeference.json is a copy of ACRE/site.json.
A session on the test pad does not write georeference.json.
| Column | Unit | Description |
|---|---|---|
step, time_s, dt_s |
, s, s | The physics step, the physics time and the length of the step. |
x_m, y_m, z_m |
m | The position in the Unreal frame. |
speed_mps, vx_mps, vy_mps, vz_mps |
m/s | The speed with a sign and the velocity in the Unreal frame. |
pitch_deg, yaw_deg, roll_deg |
deg | The Unreal rotator. A yaw of 0 points east and 90 points south. |
rpm, engine_torque_nm, clutch_torque_nm |
rev/min, N m, N m | The state of the engine. |
throttle, brake, direction |
The inputs. | |
wheel |
The wheel index: 0 front left, 1 front right, 2 rear left, 3 rear right. | |
contact |
1 when the wheel touches the ground. | |
normal_n, fx_n, fy_n |
N | The normal load, the longitudinal force and the lateral force. |
slip, omega_rad_s, steer_rad |
, rad/s, rad | The slip ratio, the angular speed and the steering angle of the wheel. |
suspension_m, sinkage_m |
m | The length of the suspension and the sinkage. |
pressure_pa, shear_capacity_n, area_m2 |
Pa, N, m² | The contact pressure, the shear capacity of the soil and the contact area. |
water_drag_n, normal_impulse_ns |
N, N s | The drag of standing water and the normal impulse of the step. |
surface_index, wetness, water_depth_m |
, , m | The surface below the wheel. |
gear, episode_time_s, reset_epoch |
, s, | The gear, the time from the last reset and the number of resets. |
wheel_lift, excessive_slip, rollback, rollover |
Labels of the outcome, 0 or 1. They ignore the first 3 s after a reset. | |
chassis_mass_kg, pto_kw, bunker_kg, farm_time_s |
kg, kW, kg, s | The mass, the PTO load, the bunker mass and the farm clock. |
metadata.json has the keys mass_kg, payload_kg, trailer, physics_hz, dropped_samples, units and calibration.
Replay Files#
A session with -ReplayFile= writes the tracking error. Replay shows the procedure.
Column of replay-tracking.csv |
Unit | Description |
|---|---|---|
time_s |
s | The time on the reference track. |
ref_x_m, ref_y_m |
m | The reference position in the Unreal frame. |
x_m, y_m |
m | The position of the vehicle in the Unreal frame. |
cross_track_m |
m | The distance from the reference path. 0 for a track without a path. |
ref_speed_mps, speed_mps |
m/s | The reference speed and the speed of the vehicle. |
ref_curvature_1pm |
1/m | The reference curvature. |
steer_rad |
rad | The steering command. |
Key of replay-summary.json |
Unit | Description |
|---|---|---|
source |
The path of the replay file. | |
mode |
commands or path. |
|
reference_duration_s |
s | The length of the reference track. |
path_available |
True when the file has path columns. | |
rms_cross_track_m, max_cross_track_m |
m | The RMS and the maximum of the cross-track error. |
completed |
True when the vehicle got to the end of the track. | |
vehicle |
maxxum_150, legacy or polaris. |
|
failure |
Empty, stalled or time_limit. A failed path replay has completed=false. |
|
shift_east_north_m |
m | The shift of -ReplayShift=. |
In the example, the game stopped before the vehicle got to the end of the track. Thus completed is false.
Test Files#
The test options of Command-Line Options write these files.
| File | Option | Contents |
|---|---|---|
review-frames.csv |
-VehicleRoute= |
One row for each frame: the route, the frame, the physics step and the times. The row also gives the poses of the vehicle and of the view camera. |
route-result.json |
-VehicleRoute= |
The keys route, completed, frames, time_s, remaining_m and note. |
terrain-probes.csv |
-TerrainVerify |
441 rows with the columns u, v, expected_z_m, hit_z_m, error_m, normal_z and hit. |
vehicle.png |
-VehicleCapture |
A screenshot of the view. |
npc-events.csv |
Farm traffic | The columns time_s, event, x_m, y_m, speed_mps. The event is worker_struck. |
A session without an incident has only the header line in npc-events.csv.
Sensor Episodes#
The sensor recorder divides a recording into episodes. The first episode of a folder is episode-001.
The key F6 stops the episode and starts the next one. Collect Data shows the procedure.
The source is AcresSensors.cpp.
Episode Folder#
| File | Contents |
|---|---|
episode.json |
The manifest: the configuration, the frames, the calibration, the counts and the errors. |
sensors-config.json |
The sensor configuration after the overlay and the command-line options. |
truth.jsonl |
The true state of the vehicle. |
actions.jsonl |
The controls of the vehicle. |
gnss.jsonl, imu.jsonl, can.jsonl |
The samples of the GNSS receiver, the IMU and the CAN log. |
ins.jsonl |
The samples of the INS. Only a vehicle with an INS writes it (the Polaris). |
lidar.jsonl, lidar/ |
One row for each scan, and the point clouds. |
camera.jsonl, camera/ |
One row for each image, and the images. |
Each .jsonl file has one JSON object in each line. The file of a disabled sensor is empty.
A row of a sensor with a delay ends with sample_time_s, available_time_s and delivery_time_s.
When the episode stops before the delivery of a row, the row has delivery_time_s null and pending_at_stop true.
The name of an image or a scan contains the sample time in microseconds with 9 digits.
truth.jsonl and actions.jsonl#
The true state and the controls, one row for each physics step.
Key of truth.jsonl |
Unit | Description |
|---|---|---|
time_s, simulation_time_s, physics_step |
s, s, | The time of the episode, the physics time and the physics step. |
episode_time_s, reset_epoch |
s, | The time from the last reset and the number of resets. |
position_enu_m |
m | The position of the chassis origin in the ENU frame. |
quaternion_flu_to_enu_xyzw |
The attitude. | |
yaw_enu_deg |
deg | The yaw in the ENU frame. 0 points east and 90 points north. |
velocity_enu_mps, angular_velocity_enu_radps |
m/s, rad/s | The velocity and the angular velocity in the ENU frame. |
speed_mps, rpm, steer_rad |
m/s, rev/min, rad | The speed with a sign, the engine speed and the steering angle. |
chassis_mass_kg, bunker_kg, farm_time_s |
kg, kg, s | The mass, the bunker mass and the farm clock. |
wheels |
Four objects with contact, normal_n, slip, sinkage_m and surface. |
Key of actions.jsonl |
Unit | Description |
|---|---|---|
time_s, physics_step |
s, | The time of the episode and the physics step. |
throttle, brake |
The inputs, 0 to 1. | |
steer_request_rad |
rad | The steering command. |
gear_direction, gear |
The direction (1 or -1) and the gear. | |
source |
The controller: manual, replay, route_review, scripted_test or benchmark. |
{"time_s":0.008333334,"simulation_time_s":0.016666668,
"physics_step":2,"episode_time_s":0.016666668,
"reset_epoch":0,
"position_enu_m":[-38.709677,-134.513081,1.776000],
"quaternion_flu_to_enu_xyzw":
[0.000000000,0.000000000,0.707106745,0.707106793],
"yaw_enu_deg":89.999998,
"velocity_enu_mps":[0.000000,-0.000000,-0.081722],
"angular_velocity_enu_radps":[-0.000000,0.000000,-0.000000],
"speed_mps":0.000000,"rpm":798.902,"steer_rad":0.000000,
"chassis_mass_kg":6920.000,"bunker_kg":0.0000,
"farm_time_s":0.000,
"wheels":[{"contact":0,"normal_n":0.000,"slip":0.000000,
"sinkage_m":0.000000,"surface":0}, ...]}
imu.jsonl and can.jsonl#
Key of imu.jsonl |
Unit | Description |
|---|---|---|
physics_step |
The physics step of the sample. | |
specific_force_flu_mps2 |
m/s² | The specific force in the FLU frame, with noise and bias. |
angular_velocity_flu_radps |
rad/s | The angular velocity in the FLU frame, with noise and bias. |
Each sample of the CAN log writes two rows: the engine speed and the control frame. Wheel and CAN Signals gives the encoding.
Key of can.jsonl |
Unit | Description |
|---|---|---|
time_s |
s | The time of the episode. |
extended |
True. All frames have a 29-bit identifier. | |
id_hex, pgn |
The identifier and the parameter group number. | |
data |
The 8 data bytes. | |
direction |
feedback for the engine speed (PGN 61444). command for the control frame (PGN 65280). |
|
source |
The controller, on the control frame only. | |
mapping |
Text that describes the encoding. |
gnss.jsonl#
One row for each epoch of the GNSS receiver. INS and GNSS gives the model. Without a fix, the position keys are null.
| Key | Unit | Description |
|---|---|---|
physics_step |
The physics step of the sample. | |
fix_type, solution |
rtk_fixed, rtk_float, dgps, single or no_fix. |
|
gga_quality |
The quality number of the GGA sentence. | |
satellites_used, satellites_above_mask |
The satellites in the solution and above the elevation mask. | |
satellites_clear, satellites_near_obstruction, satellites_foliage, satellites_blocked |
The satellites in each visibility class. | |
hdop, vdop, pdop |
The dilution of precision. | |
hdop_open_sky, vdop_open_sky |
The dilution of precision without obstructions. | |
multipath_index, reflector_index |
The multipath indices, 0 to 1. | |
correction_age_s |
s | The age of the RTK corrections. |
rtk_lock_age_s, rtk_converge_s, rtk_time_to_fix_s |
s | The times of the RTK state machine. |
model |
The parameters of the error model in this epoch. | |
epoch_year |
a | The epoch of the position as a decimal year. |
position_enu_m, sigma_enu_m, covariance_enu_m2 |
m, m, m² | The position in the ENU frame with its standard deviation and covariance. |
latitude_deg, longitude_deg, ellipsoidal_height_m |
deg, deg, m | The position in the output frame (gnss.datum.output_frame). |
nad83_harn_latitude_deg, nad83_harn_longitude_deg |
deg | The NAD83(HARN) position. |
nad83_2011_ellipsoidal_height_m |
m | The NAD83(2011) ellipsoidal height. |
wgs84_latitude_deg, wgs84_longitude_deg, wgs84_ellipsoidal_height_m |
deg, deg, m | The WGS84(G2139) position. |
altitude_navd88_m, geoid_undulation_nad83_m |
m | The NAVD88 height and the geoid undulation. |
position_std_m |
m | The horizontal standard deviation. |
nmea_gga |
The $GNGGA sentence of the epoch. |
Part of one row
{"physics_step":13,"fix_type":"rtk_fixed",
"gga_quality":4,"satellites_used":17,
"satellites_clear":15,"satellites_near_obstruction":2,
"satellites_foliage":0,"satellites_blocked":6,
"satellites_above_mask":23,
"hdop":0.843726633,"vdop":1.11322412,"pdop":1.39683305,
"correction_age_s":1.10000001,
"epoch_year":2026.727740,
"position_enu_m":[-38.691659,-134.487053,3.431649],
"sigma_enu_m":[0.0200068123,0.0200068123,0.0277449639],
"latitude_deg":40.4703735606,
"longitude_deg":-86.9948430354,
"ellipsoidal_height_m":183.5614,
"nad83_harn_latitude_deg":40.4703657358,
"nad83_harn_longitude_deg":-86.9948318477,
"altitude_navd88_m":218.3161,
"solution":"rtk_fixed","position_std_m":0.0282939053,
"nmea_gga":"$GNGGA,150000.10,4028.2224136,N,
08659.6905821,W,4,17,0.84,218.316,M,-34.755,M,1.1,0001*58",
"sample_time_s":0.100000005,
"available_time_s":0.150000005,
"delivery_time_s":0.150000008}
ins.jsonl#
The INS of the Polaris gives the pose of base_footprint. The keys follow the messages of the real vehicle.
| Key | Unit | Description |
|---|---|---|
physics_step |
The physics step of the sample. | |
frame_id |
oxts_link. |
|
fix |
deg, deg, m | latitude, longitude, altitude, datum, status, service and position_covariance_diag. |
imu |
orientation_enu_xyzw, angular_velocity_flu_radps and linear_acceleration_flu_mps2. |
|
velocity |
m/s, rad/s | linear_flu_mps and angular_flu_radps. |
position_enu_m |
m | The position in the ENU frame. |
odom |
The UTM odometry: frame_id, child_frame_id, utm_zone, position_m, orientation_xyzw, linear_flu_mps, angular_flu_radps and grid_rotation_deg. |
{"physics_step":3,"frame_id":"oxts_link",
"fix":{"latitude":40.4703011546,
"longitude":-86.9949143788,"altitude":182.0489,
"datum":"nad83_2011","status":2,"service":1,
"position_covariance_diag":
[0.000109,0.000109,0.00024525]},
"imu":{"orientation_enu_xyzw":
[-0.000335770,-0.000091392,0.705420504,0.708788937],
"angular_velocity_flu_radps":
[-0.000759,-0.000270,-0.000344],
"linear_acceleration_flu_mps2":
[-0.00662,0.02029,0.00191]},
"velocity":{"linear_flu_mps":[-0.00488,-0.01016,-0.19364],
"angular_flu_radps":
[-0.000759,-0.000270,-0.000344]},
"position_enu_m":[-45.7039,-141.6643,0.7900],
"odom":{"frame_id":"utm","child_frame_id":"base_footprint",
"utm_zone":"16N",
"position_m":[500431.1143,4479958.1857,182.0489],
"orientation_xyzw":
[-0.000335813,-0.000091233,0.705085873,0.709121820],
"grid_rotation_deg":0.054088},
"sample_time_s":0.016666668,
"available_time_s":0.066666668,
"delivery_time_s":0.066666670}
lidar.jsonl and the Point Clouds#
One row for each scan. The stamp of a scan is the end of its sweep. LiDAR gives the model.
| Key | Unit | Description |
|---|---|---|
physics_step, simulation_time_s |
, s | The physics step and the physics time of the stamp. |
file, preview |
The point cloud and the preview image, relative to the episode folder. | |
points, rays, echoes |
The number of points, of rays and of detected echoes. | |
beams_with_return, multi_return_beams |
The beams with one return or more, and with two returns or more. | |
returns_by_index |
The number of points for the return indices 1, 2 and 3. | |
return_mode |
The return mode of the scan. | |
class_counts, material_counts |
The number of points for each class and each material. | |
intensity_mean_by_material |
The mean intensity byte for each material. | |
range_m |
m | The maximum range. |
mode |
gpu_inline_raytracing or cpu_collision_proxies. |
|
pose, vehicle_pose |
The pose of the sensor and of the vehicle at the stamp: position_enu_m and quaternion_flu_to_enu_xyzw. |
|
sweep |
motion_distortion, period_s, time_offset_min_s, time_offset_max_s, sweep_start_pose and stamp. |
|
weather |
source, rain_mmh, visibility_m, the extinction coefficients, the transmission and clutter_points. |
|
timing |
Text that describes the timing of the scan. |
The PLY file is binary and little-endian. One point has 31 bytes. The format version is 2.
| Property | Type | Description |
|---|---|---|
x, y, z |
float | The position in the FLU frame of the sensor at the firing time of the point, in metres. |
reflectivity |
float | The reflectivity after range compensation. 1 is a Lambertian target of 100 %. |
signal |
ushort | The raw signal counts. |
intensity |
uchar | The calibrated reflectivity byte, 0 to 255. |
ring |
uchar | The ring index. Ring 0 has the lowest elevation. |
column |
ushort | The azimuth column. |
class |
uchar | The class of the hit object. episode.json gives the list. |
material |
uchar | The material of the hit surface. episode.json gives the list. |
return_index |
uchar | The index of the return in range sequence, from 1. |
num_returns |
uchar | The number of points of this beam. |
return_flags |
uchar | Bit flags: 1 first, 2 strongest, 4 last, 8 second strongest. |
time_offset_s |
float | The firing time minus the stamp, in seconds. The range is \([-1/f, 0)\) for the scan rate \(f\). |
| Value | Class | Material |
|---|---|---|
| 0 | other | other |
| 1 | ground | soil |
| 2 | tree trunk | grass |
| 3 | building | gravel |
| 4 | silo | asphalt |
| 5 | tree | concrete |
| 6 | shrub | water |
| 7 | corn | corn leaf |
| 8 | soybean | soybean leaf |
| 9 | mud clod | tree foliage |
| 10 | ground cover | bark |
| 11 | potato | shrub |
| 12 | vehicle | building |
| 13 | precipitation | metal bin |
| 14 | vehicle | |
| 15 | mud | |
| 16 | potato leaf |
The key lidar.output of the sensor configuration selects ply, pcd or both. The Polaris writes PCD files.
A PCD file is version 0.7 with DATA binary. It has the fields x, y, z and intensity as float32.
WIDTH is the number of rings and HEIGHT is the number of columns.
The file contains one return for each beam, the strongest. A beam without a return has NaN in x, y and z.
The preview is a PNG image of 384 × 384 pixels. It shows the scan from above with one colour for each class.
{"physics_step":13,"simulation_time_s":0.108333339,
"file":"lidar/scan_000100000.ply",
"preview":"lidar/scan_000100000.png",
"points":1176,"rays":1440,"beams_with_return":1065,
"multi_return_beams":111,"echoes":1659,
"returns_by_index":{"1":1065,"2":111,"3":0},
"return_mode":"dual_strongest_last",
"class_counts":{"other":13,"ground":512,"building":350,
"tree":238,"corn":55,"ground_cover":8},
"range_m":60,"mode":"gpu_inline_raytracing",
"pose":{"position_enu_m":[-38.710395,-134.512498,3.624664],
"quaternion_flu_to_enu_xyzw":
[-0.000237411,-0.000026092,0.707106785,0.707106693]},
"sweep":{"motion_distortion":true,"period_s":0.100000,
"time_offset_min_s":-0.100000,
"time_offset_max_s":-0.000556,
"stamp":"end_of_sweep"},
"weather":{"source":"environment","rain_mmh":0.000,
"visibility_m":15637.5,"clutter_points":0},
"sample_time_s":0.100000005,
"available_time_s":0.150000005,
"delivery_time_s":0.266666681}
ply
format binary_little_endian 1.0
element vertex 1176
property float x
property float y
property float z
property float reflectivity
property ushort signal
property uchar intensity
property uchar ring
property ushort column
property uchar class
property uchar material
property uchar return_index
property uchar num_returns
property uchar return_flags
property float time_offset_s
end_header
camera.jsonl and the Images#
One row for each image. An image is a PNG file with 8 bits for each channel in the sRGB colour space. The size is that of the sensor configuration, 896 × 512 pixels by default. Camera gives the model.
| Key | Unit | Description |
|---|---|---|
physics_step, simulation_time_s |
, s | The physics step and the physics time of the image. |
file |
The image, relative to the episode folder. | |
width, height |
px | The size of the image. |
pose, vehicle_pose |
The pose of the camera and of the vehicle: position_enu_m and quaternion_flu_to_enu_xyzw. |
|
frame_index |
The index of the image in the episode. | |
processing_ms |
ms | The time of the camera model for this image. |
rolling_shutter_motion_optical |
rad/s, m/s | The angular and linear velocity that the rolling shutter uses, in the optical frame. |
timing |
Text that describes the timing of the render. |
{"physics_step":29,"simulation_time_s":0.241666679,
"file":"camera/front_000233333.png",
"width":896,"height":512,
"pose":{"position_enu_m":[-38.716053,-133.888723,3.261297],
"quaternion_flu_to_enu_xyzw":
[-0.005644940,0.003191951,0.707046314,0.707137509]},
"vehicle_pose":{"position_enu_m":
[-38.710970,-134.505598,1.600388], ...},
"frame_index":1,"processing_ms":2.62,
"rolling_shutter_motion_optical":
{"angular_radps":[-0.155066,0.002484,-0.024763],
"velocity_mps":[-0.066883,0.786047,0.435862]},
"sample_time_s":0.233333346,
"available_time_s":0.283333346,
"delivery_time_s":0.425000022}
episode.json#
The manifest of the episode. The recorder writes it at the start with the state recording.
At the end, the recorder writes it again with the state complete or complete_with_errors.
| Key | Description |
|---|---|
schema |
acres-episode-2-unreal. |
engine, map |
The version of Unreal Engine and the name of the map. |
state |
recording, complete or complete_with_errors. |
config |
The sensor configuration of the episode. sensors-config.json contains the same data. |
config_source |
The path and the SHA-1 hash of the configuration files. |
command_line |
The command line of the game. |
sensor_profile |
The name of the sensor profile, for example tractor-default or polaris-calibrated. |
sensor_profile_detail |
profile, profile_validated, changes and render. render gives the render tier and the render settings. |
start_simulation_s, duration_s, final_simulation_s |
The physics time at the start, the length and the physics time at the end, in seconds. |
physics_hz, final_physics_step |
120, and the last physics step. |
counts |
The number of rows of each stream, and lidar_points. |
dropped |
The dropped samples: rows_queue_overflow, lidar_busy, camera_missed, camera_busy and camera_encode_backlog. |
errors |
The error messages of the recorder. |
imu_bias_flu |
The constant bias of the accelerometer and the gyroscope in this episode. |
frames |
Text that defines the world frame, the ENU frame, the body frame, the quaternion, the angular velocity and the clocks. |
georeference |
The coordinate reference system, the origin and the projection of the tile. |
gnss |
The parameters and the statistics of the GNSS model. |
extrinsics_flu_m |
The position of each sensor in the FLU frame. |
mount_rotations |
The roll, pitch and yaw of the LiDAR and the camera. |
camera_model, camera_intrinsics |
The parameters of the camera model. The intrinsic matrix and the distortion coefficients. |
lidar |
The layout, the file format, the timing, the weather statistics, the class list and the material list. |
limitations |
Text that lists the limits of each sensor model. |
Part of the manifest
{
"schema": "acres-episode-2-unreal",
"state": "complete_with_errors",
"sensor_profile": "tractor-default",
"map": "V03ACRE",
"start_simulation_s": 0.008333333767950535,
"duration_s": 22.025001148693264,
"physics_hz": 120,
"final_physics_step": 2644,
"counts": {"truth": 2644, "actions": 2644, "gnss": 221,
"imu": 2642, "lidar": 221, "camera": 220,
"can": 882, "ins": 0, "lidar_points": 319702},
"dropped": {"rows_queue_overflow": 0, "lidar_busy": 0,
"camera_missed": 1, "camera_busy": 0,
"camera_encode_backlog": 0},
"errors": ["GPU LiDAR scan pending at stop; CPU
ground/collision result kept at 22.000001"],
"camera_intrinsics": {"fx": 448.0, "fy": 448.0,
"cx": 451, "cy": 253,
"width": 896, "height": 512,
"distortion_model": "opencv_plumb_bob",
"distortion_coefficients":
[-0.08, 0.012, 0.0004, -0.0003, 0]}
}
Farm Files#
The game writes the farm files when the session stops. The key F5 writes them during the session.
The source is AcresFarmRuntime.cpp.
Farm State#
The farm state lets a later session continue on the same fields. The option is -FarmLoad=.
| File | Contents |
|---|---|
farm-state.json |
The saved farm. The keys are below. |
farm-water.bin |
The water grid: 11 arrays of float64 with one value for each cell. farm-state.json gives the layout. |
farm-field.bin |
The field work, the pits, the spoil and the bales. farm-state.json gives the layout. |
farm-start-state.json, farm-start-water.bin, farm-start-field.bin |
The state at the start. Only a session that started from a saved state writes them. |
farm-config.json |
A copy of farm.json. |
Key of farm-state.json |
Description |
|---|---|
schema |
4. |
fingerprint |
The SHA-1 hash of the farm inputs. The game refuses a state with a different hash. |
state |
11 numbers: the clock, the weather and the totals of the farm. |
gdd, thermal_gdd |
The growing degree days of each field, 60 values. |
patches |
The state of each crop patch. |
ruts |
The ruts: the cell and the depth. |
worked, worked_m2 |
The cells with field work, and the worked area of each field. |
harvest_enabled |
The state of the harvest cutter. |
water, field |
The name, the hash and the layout of the two binary files. |
{
"schema": 4,
"fingerprint": "329FF2E32558EB9B37588580D1EC62F4A0020E2D",
"state": [20, 2.0333344824612141, 1, 0, 16, 28,
11.713738946279683, 0, 0, 0, 0],
"water": {
"file": "farm-water.bin",
"cells": 145924,
"clock_s": 20,
"layout": "11 x cells float64: theta_surface, pond_m,
rain_m, infiltrated_m, evaporated_m, drained_m, tile_m,
lateral_m, compaction, theta_subsoil, runoff_m"
},
"field": {"file": "farm-field.bin", "cells": 165,
"bales": 0}
}
farm-fields.csv#
One row for each field and for four other areas, 63 rows. F01 to F59 are the fields.
F00 is the area outside the fields. F60, F61 and F62 are asphalt, concrete and gravel.
Soil Water and Crops and Ground Classes give the models.
| Column | Unit | Description |
|---|---|---|
field |
The field identifier. | |
kind |
The crop: 0 corn, 1 soybean, 2 potato, -1 none. | |
growth |
The growth fraction, 0 to 1. | |
effective_gdd_c |
°C d | The growing degree days. |
crushed_m2, harvested_m2 |
m² | The crushed area and the harvested area. |
standing_yield_kg |
kg | The yield of the crop that stands. |
theta, theta_subsoil |
m³/m³ | The mean water content of the surface layer and of the subsoil. |
pond_m |
m | The mean depth of the water on the surface. |
rain_m, evaporated_m, drained_m, tile_m, lateral_m |
m | The mean depth of each term of the water balance. |
water_balance_error_m |
m | The largest balance error of a cell. |
cells |
The number of cells of 4 m. | |
tilled_m2, seeded_m2, sprayed_m2 |
m² | The worked area. |
field,kind,growth,effective_gdd_c,crushed_m2,
harvested_m2,standing_yield_kg,theta,pond_m,rain_m,
evaporated_m,drained_m,tile_m,lateral_m,
water_balance_error_m,cells,theta_subsoil,
tilled_m2,seeded_m2,sprayed_m2
F29,1,1.00000000,1100.00206930,0.00000000,
0.00000000,3085.06800000,0.27220021,0.00000000,0.00000000,
0.00000271,0.00000000,0.00000000,0.00000000,
9.13313275377e-18,569,0.22835298,
0.0000,0.0000,0.0000
Events, Weather and Water#
| File | Contents |
|---|---|
farm-events.csv |
The columns environment_time_s, action, field and quantity. |
farm-weather.csv |
One row for each hour of game time. The columns are below. |
farm-water.json |
The statistics of the water grid at the end. |
farm-visuals.json |
The statistics of the ground visuals at the end. |
theta.f32 |
The water content of the surface layer: 382 × 382 float32 values, little-endian, row by row. |
water-depth.f32 |
The depth of the water on the surface, in the same format, in metres. |
The actions of farm-events.csv are harvest_kg, crush_m2, reseed, restore and load.
Column of farm-weather.csv |
Unit | Description |
|---|---|---|
environment_time_s |
s | The farm clock. |
rain_mm_h |
mm/h | The rain rate. |
time_scale |
The ratio of game time to real time. | |
min_c, max_c |
°C | The low and the high temperature of the day. |
harvested_kg, bunker_kg |
kg | The harvested mass and the mass in the bunker. |
crushed_m2 |
m² | The crushed crop area. |
max_water_balance_error_m |
m | The largest balance error of the water grid. |
mean_pond_m, max_pond_m |
m | The mean and the maximum depth of the water on the surface. |
water_clock_s |
s | The clock of the water grid. |
environment_time_s,rain_mm_h,time_scale,min_c,max_c,
harvested_kg,bunker_kg,crushed_m2,
max_water_balance_error_m,mean_pond_m,max_pond_m,
water_clock_s
0.000000,0.000000,1.0,16.000,28.000,
0.000000,0.000000,0.000000,0,0.000000,0.000000,0.0
Configuration Copies#
The menu writes these files into the session folder before the session starts. The session then reads them. Configuration Files describes the formats and the sequence.
| File | Contents |
|---|---|
environment.json, tractor.json, sensors.json |
The shipped files with the values of the menu. |
session-config.json |
All values of the menu and the field setup. The schema is acres-session-config-1. |
field-setup.json |
The changes of the fields: the crop, the soil and the wetness. |
terrain-edits.f32 |
The terrain edits: 1001 × 1001 float32 height offsets in metres. Only a session with edits has the file. |
A session from the command line does not write these copies.
episode.json and sensors-config.json record the sensor configuration and the command line of each episode.