Messages#
The package acres_interfaces defines the messages and services of the simulator. This page lists each definition with its fields.
Generated The source is ROS/acres_interfaces/msg and ROS/acres_interfaces/srv. Run mkdocs build to generate this page again.
Topics and Services and Actions show where each definition is used. The messages of the vehicle (ds_dbw_msgs, rslidar_msg) and the standard ROS 2 packages keep their own documentation.
| Definition | Kind | Description |
|---|---|---|
AgentInfo |
Message | What an agent is, sent once per episode (topic /sim/agents, transient local; in the episode log). |
AgentState |
Message | One agent after one physics step (in AgentStates, 120 Hz). |
AgentStates |
Message | Every agent after one physics step (topic /sim/agent_states in the episode log, 120 Hz). |
Agents |
Message | Every agent of the session (topic /sim/agents, transient local; in the episode log at the start of each episode). |
Conditions |
Message | Weather, clock and soil water (topic /sim/conditions in the episode log: |
EnergyLedger |
Message | Where the fuel's energy went since the agent's last reset (AcresPowerModel.h FEnergyFlows), J. |
Episode |
Message | The simulator's episode clock (topic /sim/episode, transient local; also in the episode log). |
FarmEvent |
Message | One change of the farm (crop, soil marks), as the physics step made it. |
FarmEvents |
Message | The farm changes of one physics step (topic /sim/farm_events in the episode log; only steps with events). |
FarmStamp |
Message | One ground contact the farm recorded: |
FarmStamps |
Message | The farm contacts of one physics step (topic /sim/farm_stamps in the episode log; only steps with contacts). |
FieldState |
Message | Ground truth of one field (acres/farm_state). |
TaskStatus |
Message | A task's state and reward terms (topic /sim/task; written by the task code of Learning/, not by the simulator). |
VehicleShift |
Message | A hardware shift of one vehicle (robustness studies, Self-Adaptive VLA): |
VehicleShifts |
Message | The shifts in force (topic /sim/shifts, transient local; in the episode log after every change). |
FarmState |
Service | Farm ground truth for task scoring (acres/farm_state): |
FieldQuery |
Service | Ground truth at one point (acres/field_query). |
Record |
Service | Start or stop the episode log (acres/record): |
SetConditions |
Service | Weather, clock, soil water and field restore (acres/set_conditions). |
SetVehicleShift |
Service | Set (replace) a vehicle's hardware shift (acres/set_vehicle_shift). |
Message Definitions#
AgentInfo#
acres_interfaces/msg/AgentInfo
What an agent is, sent once per episode (topic /sim/agents, transient local; in the episode log).
| Name | Type | Unit | Description |
|---|---|---|---|
name |
string |
agent name (unique; its ROS namespace in a multi-agent session) | |
vehicle |
string |
"polaris" or "maxxum" | |
implement |
string |
Maxxum implement id ("none", "chisel_plow", ...); "" for the Polaris | |
finish |
string |
Polaris paint (graphite, forest_green, desert_tan, deep_blue); "" for the Maxxum | |
body_origin_flu_m |
geometry_msgs/Vector3 |
m | the physics body origin in base_footprint (FLU), m |
wheelbase_m |
float64 |
m | front to rear axle, m |
wheel_radius_m |
float64[4] |
m | FL, FR, RL, RR tyre radius, m |
implement_rig_names |
string[] |
names of AgentState.implement_rig, in order (empty without an implement rig) |
Definition
# What an agent is, sent once per episode (topic /sim/agents, transient local; in the episode log).
string name # agent name (unique; its ROS namespace in a multi-agent session)
string vehicle # "polaris" or "maxxum"
string implement # Maxxum implement id ("none", "chisel_plow", ...); "" for the Polaris
string finish # Polaris paint (graphite, forest_green, desert_tan, deep_blue); "" for the Maxxum
geometry_msgs/Vector3 body_origin_flu_m # the physics body origin in base_footprint (FLU), m
float64 wheelbase_m # front to rear axle, m
float64[4] wheel_radius_m # FL, FR, RL, RR tyre radius, m
string[] implement_rig_names # names of AgentState.implement_rig, in order (empty without an implement rig)
AgentState#
acres_interfaces/msg/AgentState
One agent after one physics step (in AgentStates, 120 Hz). Frame "world": the simulator's grid ENU, metres (x east, y north, z up; origin at the centre of the ACRE tile, Unreal X east / Y south / Z up at 1/100). The pose is base_footprint (the ground point below the rear axle; x forward, y left, z up), as /vehicle/odom reports it in UTM.
| Name | Type | Unit | Description |
|---|---|---|---|
name |
string |
agent name (AgentInfo.name) | |
reset_epoch |
uint64 |
resets applied to this agent so far | |
episode_time_s |
float64 |
s | simulation time since this agent's last reset, s |
pose |
geometry_msgs/Pose |
base_footprint in world | |
twist |
geometry_msgs/Twist |
body frame (FLU): linear m/s, angular rad/s | |
speed_mps |
float64 |
m/s | forward speed along the heading, m/s (negative reversing) |
steer_rad |
float64 |
rad | actual road-wheel (bicycle) angle, rad, positive left |
wheel_steer_rad |
float64[4] |
rad | FL, FR, RL, RR steering angle, rad |
wheel_spin_rad |
float64[4] |
rad | accumulated spin angle (for the wheels' look), rad |
wheel_omega_radps |
float64[4] |
rad/s | spin rate, rad/s |
wheel_suspension_m |
float64[4] |
m | mount to wheel centre extension (includes sinkage on soil), m |
wheel_slip |
float64[4] |
longitudinal slip ratio | |
wheel_sinkage_m |
float64[4] |
m | sinkage or rut depth under the tyre, m |
wheel_normal_n |
float64[4] |
N | ground normal load, N |
wheel_fx_n |
float64[4] |
N | longitudinal tyre force on the chassis, N (along the wheel heading) |
wheel_fy_n |
float64[4] |
N | lateral tyre force, N (positive toward the wheel's right) |
wheel_contact |
bool[4] |
the wheel touches the ground (at least 1 N) | |
wheel_surface |
uint8[4] |
surface class under the wheel (SURFACE_*, AcresSurfaceMap.h ESurfaceClass) | |
wheel_field |
uint8[4] |
field id under the wheel (1..59; 0 outside fields) | |
engine_rpm |
float64 |
rev/min | rev/min |
gear |
int8 |
Maxxum: 1-based forward gear (negative reverse, 0 neutral); Polaris: ds_dbw_msgs Gear value (1 P, 2 R, 3 N, 4 H, 5 L) | |
throttle |
float64 |
pedal 0..1 | |
brake |
float64 |
pedal 0..1 (Polaris: line pressure over its 80 bar scale) | |
steer_cmd_rad |
float64 |
rad | requested road-wheel angle, rad, positive left |
diff_lock |
int8 |
0 open, 1 rear, 2 rear and front | |
hand_throttle |
float64 |
0..1 (Maxxum) | |
dbw_enabled |
bool |
Polaris drive-by-wire (zero for the Maxxum): ds_dbw_msgs units. | |
steering_wheel_deg |
float64 |
° | |
steering_cmd_deg |
float64 |
° | |
steering_cmd_type |
uint8 |
SteeringCmd CMD_* of the last command | |
ulc_speed_cmd_mps |
float64 |
m/s | UlcReport vel_ref |
throttle_output_pct |
float64 |
% | |
brake_output_bar |
float64 |
bar | |
energy |
EnergyLedger |
Energy and fuel since the agent's last reset. | |
fuel_used_l |
float64 |
L | |
fuel_rate_lph |
float64 |
L/h | |
mass_kg |
float64 |
kg | chassis mass with implement and payload, kg |
crop_crushed_m2 |
float64 |
m² | crop this agent pushed over since its reset (tyres and body), m2 |
implement_kind |
int8 |
AcresSim::EImplementKind | |
implement_raised |
bool |
||
pto_on |
bool |
||
implement_depth_m |
float64 |
m | |
draft_n |
float64 |
N | |
pto_kw |
float64 |
kW | |
hitch_lift_deg |
float64 |
° | |
articulation_yaw_rad |
float64 |
rad | trailed baler about the drawbar eye, rad |
implement_rig |
float64[] |
implement rig controls (AgentInfo.implement_rig_names) |
| Constant | Type | Value | Description |
|---|---|---|---|
SURFACE_FIELD |
uint8 |
0 |
|
SURFACE_ASPHALT |
uint8 |
1 |
|
SURFACE_CONCRETE |
uint8 |
2 |
|
SURFACE_GRAVEL |
uint8 |
3 |
|
SURFACE_GRASS_LANE |
uint8 |
4 |
|
SURFACE_GRASS |
uint8 |
5 |
|
SURFACE_DIRT |
uint8 |
6 |
Definition
# One agent after one physics step (in AgentStates, 120 Hz). Frame "world": the simulator's grid ENU, metres (x east,
# y north, z up; origin at the centre of the ACRE tile, Unreal X east / Y south / Z up at 1/100). The pose is
# base_footprint (the ground point below the rear axle; x forward, y left, z up), as /vehicle/odom reports it in UTM.
string name # agent name (AgentInfo.name)
uint64 reset_epoch # resets applied to this agent so far
float64 episode_time_s # simulation time since this agent's last reset, s
geometry_msgs/Pose pose # base_footprint in world
geometry_msgs/Twist twist # body frame (FLU): linear m/s, angular rad/s
float64 speed_mps # forward speed along the heading, m/s (negative reversing)
float64 steer_rad # actual road-wheel (bicycle) angle, rad, positive left
float64[4] wheel_steer_rad # FL, FR, RL, RR steering angle, rad
float64[4] wheel_spin_rad # accumulated spin angle (for the wheels' look), rad
float64[4] wheel_omega_radps # spin rate, rad/s
float64[4] wheel_suspension_m # mount to wheel centre extension (includes sinkage on soil), m
float64[4] wheel_slip # longitudinal slip ratio
float64[4] wheel_sinkage_m # sinkage or rut depth under the tyre, m
float64[4] wheel_normal_n # ground normal load, N
float64[4] wheel_fx_n # longitudinal tyre force on the chassis, N (along the wheel heading)
float64[4] wheel_fy_n # lateral tyre force, N (positive toward the wheel's right)
bool[4] wheel_contact # the wheel touches the ground (at least 1 N)
uint8[4] wheel_surface # surface class under the wheel (SURFACE_*, AcresSurfaceMap.h ESurfaceClass)
uint8[4] wheel_field # field id under the wheel (1..59; 0 outside fields)
uint8 SURFACE_FIELD = 0
uint8 SURFACE_ASPHALT = 1
uint8 SURFACE_CONCRETE = 2
uint8 SURFACE_GRAVEL = 3
uint8 SURFACE_GRASS_LANE = 4
uint8 SURFACE_GRASS = 5
uint8 SURFACE_DIRT = 6
float64 engine_rpm # rev/min
int8 gear # Maxxum: 1-based forward gear (negative reverse, 0 neutral); Polaris: ds_dbw_msgs
# Gear value (1 P, 2 R, 3 N, 4 H, 5 L)
# Controls the vehicle model applied this step (after the drive-by-wire layer, RL bridge, scripts).
float64 throttle # pedal 0..1
float64 brake # pedal 0..1 (Polaris: line pressure over its 80 bar scale)
float64 steer_cmd_rad # requested road-wheel angle, rad, positive left
int8 diff_lock # 0 open, 1 rear, 2 rear and front
float64 hand_throttle # 0..1 (Maxxum)
# Polaris drive-by-wire (zero for the Maxxum): ds_dbw_msgs units.
bool dbw_enabled
float64 steering_wheel_deg
float64 steering_cmd_deg
uint8 steering_cmd_type # SteeringCmd CMD_* of the last command
float64 ulc_speed_cmd_mps # UlcReport vel_ref
float64 throttle_output_pct
float64 brake_output_bar
# Energy and fuel since the agent's last reset.
EnergyLedger energy
float64 fuel_used_l
float64 fuel_rate_lph
float64 mass_kg # chassis mass with implement and payload, kg
float64 crop_crushed_m2 # crop this agent pushed over since its reset (tyres and body), m2
# Maxxum implement (kind -1 without one).
int8 implement_kind # AcresSim::EImplementKind
bool implement_raised
bool pto_on
float64 implement_depth_m
float64 draft_n
float64 pto_kw
float64 hitch_lift_deg
float64 articulation_yaw_rad # trailed baler about the drawbar eye, rad
float64[] implement_rig # implement rig controls (AgentInfo.implement_rig_names)
AgentStates#
acres_interfaces/msg/AgentStates
Every agent after one physics step (topic /sim/agent_states in the episode log, 120 Hz). Replay places the agents at these poses; learners read proprioception and commands from them.
| Name | Type | Unit | Description |
|---|---|---|---|
header |
std_msgs/Header |
stamp: simulation time after the step; frame_id "world" | |
step |
uint64 |
physics steps since the world started | |
agents |
AgentState[] |
Definition
# Every agent after one physics step (topic /sim/agent_states in the episode log, 120 Hz). Replay places the agents
# at these poses; learners read proprioception and commands from them.
std_msgs/Header header # stamp: simulation time after the step; frame_id "world"
uint64 step # physics steps since the world started
AgentState[] agents
Agents#
acres_interfaces/msg/Agents
Every agent of the session (topic /sim/agents, transient local; in the episode log at the start of each episode).
| Name | Type | Unit | Description |
|---|---|---|---|
header |
std_msgs/Header |
||
agents |
AgentInfo[] |
Conditions#
acres_interfaces/msg/Conditions
Weather, clock and soil water (topic /sim/conditions in the episode log: at the start, after every change and once per simulated second).
| Name | Type | Unit | Description |
|---|---|---|---|
header |
std_msgs/Header |
||
date |
string |
local date of the environment clock, YYYY-MM-DD | |
local_hour |
float64 |
h | local civil time, h |
air_temp_c |
float64 |
°C | |
rain_mm_h |
float64 |
mm/h | |
wind_mps |
float64 |
m/s | 10 m wind, m/s |
wind_from_deg |
float64 |
° | clockwise from north |
cloud_cover |
float64 |
0..1 | |
visibility_m |
float64 |
m | |
sun_elevation_deg |
float64 |
° | |
surface_wetness |
float64 |
rain film on hard surfaces and leaves, 0..1 | |
weather |
string |
preset set through set_conditions ("" = the environment's own schedule) | |
soil_theta_mean |
float64 |
mean surface volumetric water content of the field cells, m3/m3 | |
field_ids |
uint16[] |
fields with soil (1..59) | |
field_theta |
float64[] |
mean surface theta per field, m3/m3 | |
field_pond_m |
float64[] |
m | mean pond depth per field, m |
Definition
# Weather, clock and soil water (topic /sim/conditions in the episode log: at the start, after every change and
# once per simulated second).
std_msgs/Header header
string date # local date of the environment clock, YYYY-MM-DD
float64 local_hour # local civil time, h
float64 air_temp_c
float64 rain_mm_h
float64 wind_mps # 10 m wind, m/s
float64 wind_from_deg # clockwise from north
float64 cloud_cover # 0..1
float64 visibility_m
float64 sun_elevation_deg
float64 surface_wetness # rain film on hard surfaces and leaves, 0..1
string weather # preset set through set_conditions ("" = the environment's own schedule)
float64 soil_theta_mean # mean surface volumetric water content of the field cells, m3/m3
uint16[] field_ids # fields with soil (1..59)
float64[] field_theta # mean surface theta per field, m3/m3
float64[] field_pond_m # mean pond depth per field, m
EnergyLedger#
acres_interfaces/msg/EnergyLedger
Where the fuel's energy went since the agent's last reset (AcresPowerModel.h FEnergyFlows), J. Powertrain side: fuel -> engine loss, parasitic, PTO, hydraulic, accessory loss, engine kinetic, clutch, driveline, wheel kinetic, brake, hysteresis, slip, soil, traction (axle: informational). Chassis side (AcresSim::AccountChassis): traction -> drawbar, aero, water, lateral, suspension, chassis kinetic, potential. ground_loss_j = slip_j + lateral_j + soil_j, the energy the ground took (the scouting task's ground loss).
| Name | Type | Unit | Description |
|---|---|---|---|
fuel_j |
float64 |
J | |
engine_loss_j |
float64 |
J | |
parasitic_j |
float64 |
J | |
pto_j |
float64 |
J | |
hydraulic_j |
float64 |
J | |
accessory_loss_j |
float64 |
J | |
engine_kinetic_j |
float64 |
J | |
clutch_j |
float64 |
J | |
driveline_j |
float64 |
J | |
wheel_kinetic_j |
float64 |
J | |
brake_j |
float64 |
J | |
hysteresis_j |
float64 |
J | |
slip_j |
float64 |
J | |
soil_j |
float64 |
J | |
traction_j |
float64 |
J | |
axle_j |
float64 |
J | |
drawbar_j |
float64 |
J | |
aero_j |
float64 |
J | |
water_j |
float64 |
J | |
lateral_j |
float64 |
J | |
suspension_j |
float64 |
J | |
chassis_kinetic_j |
float64 |
J | |
potential_j |
float64 |
J | |
ground_loss_j |
float64 |
J |
Definition
# Where the fuel's energy went since the agent's last reset (AcresPowerModel.h FEnergyFlows), J. Powertrain side:
# fuel -> engine loss, parasitic, PTO, hydraulic, accessory loss, engine kinetic, clutch, driveline, wheel kinetic,
# brake, hysteresis, slip, soil, traction (axle: informational). Chassis side (AcresSim::AccountChassis): traction ->
# drawbar, aero, water, lateral, suspension, chassis kinetic, potential. ground_loss_j = slip_j + lateral_j + soil_j,
# the energy the ground took (the scouting task's ground loss).
float64 fuel_j
float64 engine_loss_j
float64 parasitic_j
float64 pto_j
float64 hydraulic_j
float64 accessory_loss_j
float64 engine_kinetic_j
float64 clutch_j
float64 driveline_j
float64 wheel_kinetic_j
float64 brake_j
float64 hysteresis_j
float64 slip_j
float64 soil_j
float64 traction_j
float64 axle_j
float64 drawbar_j
float64 aero_j
float64 water_j
float64 lateral_j
float64 suspension_j
float64 chassis_kinetic_j
float64 potential_j
float64 ground_loss_j
Episode#
acres_interfaces/msg/Episode
The simulator's episode clock (topic /sim/episode, transient local; also in the episode log). Sent when the simulator starts, on every reset and on every change of the simulation state.
| Name | Type | Unit | Description |
|---|---|---|---|
header |
std_msgs/Header |
stamp: simulation time of the event (the physics clock of /clock) | |
episode_id |
string |
unique per episode: "<session start, UTC YYYYMMDDTHHMMSS>-<episode, 4 digits>" | |
episode |
uint32 |
episodes started since launch (0 until the first reset) | |
reset_epoch |
uint64 |
resets applied to agent 0 since launch (the R key and the RL bridge count too) | |
step |
uint64 |
physics steps (1/120 s) since the world started | |
episode_time_s |
float64 |
s | simulation time since the episode began, s |
state |
uint8 |
simulation_interfaces/SimulationState: 0 stopped, 1 playing, 2 paused | |
lockstep |
bool |
the world advances only on step requests (paused between them) | |
seed |
uint64 |
the sensors' noise seed (sensors.json "seed", -SensorSeed=) | |
source |
string |
"unreal" or "core": which simulator wrote it | |
map |
string |
map id, e.g. "V03ACRE" | |
agents |
string[] |
agent names in index order (agent 0 first) |
Definition
# The simulator's episode clock (topic /sim/episode, transient local; also in the episode log). Sent when the
# simulator starts, on every reset and on every change of the simulation state.
std_msgs/Header header # stamp: simulation time of the event (the physics clock of /clock)
string episode_id # unique per episode: "<session start, UTC YYYYMMDDTHHMMSS>-<episode, 4 digits>"
uint32 episode # episodes started since launch (0 until the first reset)
uint64 reset_epoch # resets applied to agent 0 since launch (the R key and the RL bridge count too)
uint64 step # physics steps (1/120 s) since the world started
float64 episode_time_s # simulation time since the episode began, s
uint8 state # simulation_interfaces/SimulationState: 0 stopped, 1 playing, 2 paused
bool lockstep # the world advances only on step requests (paused between them)
uint64 seed # the sensors' noise seed (sensors.json "seed", -SensorSeed=)
string source # "unreal" or "core": which simulator wrote it
string map # map id, e.g. "V03ACRE"
string[] agents # agent names in index order (agent 0 first)
FarmEvent#
acres_interfaces/msg/FarmEvent
One change of the farm (crop, soil marks), as the physics step made it. Positions in the world frame (ENU m).
| Name | Type | Unit | Description |
|---|---|---|---|
kind |
uint8 |
||
agent |
string |
the agent that caused it ("" when unknown) | |
field |
uint16 |
field id 1..59 (0 outside fields) | |
patch |
int32 |
crop patch index (CROP_*), -1 otherwise; stable for a given map data hash | |
samples |
uint16 |
CROP_*: the patch's 4 x 4 sample bits set by this event (bit j * 4 + i) | |
flags |
uint8 |
WORKED: work flags added | |
x |
float64 |
m | world east, m (CROP_*: patch origin; WORKED, RUT: cell centre) |
y |
float64 |
m | world north, m |
value |
float64 |
CROP_*: area, m2; RUT: rut depth, m; WORKED: cell area, m2 |
| Constant | Type | Value | Description |
|---|---|---|---|
CROP_CRUSHED |
uint8 |
1 |
plants pushed over by tyres or the body: patch, samples newly crushed |
CROP_HARVESTED |
uint8 |
2 |
plants cut or lifted: patch, samples newly harvested |
WORKED |
uint8 |
3 |
field work on a 25 cm cell: flags (1 tilled, 2 seeded, 4 sprayed) |
RUT |
uint8 |
4 |
a rut deepened on a 25 cm cell: value = new rut depth, m |
FIELD_RESTORED |
uint8 |
5 |
a field's marks and crop damage cleared (reset): field |
Definition
# One change of the farm (crop, soil marks), as the physics step made it. Positions in the world frame (ENU m).
uint8 CROP_CRUSHED = 1 # plants pushed over by tyres or the body: patch, samples newly crushed
uint8 CROP_HARVESTED = 2 # plants cut or lifted: patch, samples newly harvested
uint8 WORKED = 3 # field work on a 25 cm cell: flags (1 tilled, 2 seeded, 4 sprayed)
uint8 RUT = 4 # a rut deepened on a 25 cm cell: value = new rut depth, m
uint8 FIELD_RESTORED = 5 # a field's marks and crop damage cleared (reset): field
uint8 kind
string agent # the agent that caused it ("" when unknown)
uint16 field # field id 1..59 (0 outside fields)
int32 patch # crop patch index (CROP_*), -1 otherwise; stable for a given map data hash
uint16 samples # CROP_*: the patch's 4 x 4 sample bits set by this event (bit j * 4 + i)
uint8 flags # WORKED: work flags added
float64 x # world east, m (CROP_*: patch origin; WORKED, RUT: cell centre)
float64 y # world north, m
float64 value # CROP_*: area, m2; RUT: rut depth, m; WORKED: cell area, m2
FarmEvents#
acres_interfaces/msg/FarmEvents
The farm changes of one physics step (topic /sim/farm_events in the episode log; only steps with events).
| Name | Type | Unit | Description |
|---|---|---|---|
header |
std_msgs/Header |
stamp: simulation time of the step | |
step |
uint64 |
||
events |
FarmEvent[] |
FarmStamp#
acres_interfaces/msg/FarmStamp
One ground contact the farm recorded: the arguments of FAcresFarmRuntime::Wheel (a tyre) or Body (the underbody sweeping tall crop), so a replay repeats the contact and redraws the crushed crop, ruts and tread prints exactly. Positions and directions in the world frame (grid ENU, m).
| Name | Type | Unit | Description |
|---|---|---|---|
kind |
uint8 |
||
agent |
string |
the agent that made the contact | |
wheel |
int8 |
0 FL, 1 FR, 2 RL, 3 RR; -1 for the body | |
x |
float64 |
m | footprint centre, m |
y |
float64 |
||
z |
float64 |
m | contact height, m (patches more than 1 m above or below are not touched) |
forward_x |
float64 |
unit heading along the ground | |
forward_y |
float64 |
||
width_m |
float64 |
m | across travel, m |
length_m |
float64 |
m | along travel this step (footprint plus distance moved), m |
pressure_pa |
float64 |
tyre ground pressure, Pa (crushing needs more than 10 kPa) | |
sinkage_m |
float64 |
m | tyre sinkage, m (0 on hard ground; ruts keep 65 %) |
tyre_diameter_m |
float64 |
m | for the tread print |
clearance_m |
float64 |
m | body: underbody clearance, m (crop taller than this is pushed over) |
crushed_m2 |
float64 |
m² | crop this contact pushed over, m2 |
field |
uint16 |
field id under the centre (0 outside fields) |
| Constant | Type | Value | Description |
|---|---|---|---|
KIND_WHEEL |
uint8 |
0 |
|
KIND_BODY |
uint8 |
1 |
Definition
# One ground contact the farm recorded: the arguments of FAcresFarmRuntime::Wheel (a tyre) or Body (the underbody
# sweeping tall crop), so a replay repeats the contact and redraws the crushed crop, ruts and tread prints exactly.
# Positions and directions in the world frame (grid ENU, m).
uint8 KIND_WHEEL = 0
uint8 KIND_BODY = 1
uint8 kind
string agent # the agent that made the contact
int8 wheel # 0 FL, 1 FR, 2 RL, 3 RR; -1 for the body
float64 x # footprint centre, m
float64 y
float64 z # contact height, m (patches more than 1 m above or below are not touched)
float64 forward_x # unit heading along the ground
float64 forward_y
float64 width_m # across travel, m
float64 length_m # along travel this step (footprint plus distance moved), m
float64 pressure_pa # tyre ground pressure, Pa (crushing needs more than 10 kPa)
float64 sinkage_m # tyre sinkage, m (0 on hard ground; ruts keep 65 %)
float64 tyre_diameter_m # for the tread print
float64 clearance_m # body: underbody clearance, m (crop taller than this is pushed over)
float64 crushed_m2 # crop this contact pushed over, m2
uint16 field # field id under the centre (0 outside fields)
FarmStamps#
acres_interfaces/msg/FarmStamps
The farm contacts of one physics step (topic /sim/farm_stamps in the episode log; only steps with contacts).
| Name | Type | Unit | Description |
|---|---|---|---|
header |
std_msgs/Header |
stamp: simulation time of the step | |
step |
uint64 |
||
stamps |
FarmStamp[] |
FieldState#
acres_interfaces/msg/FieldState
Ground truth of one field (acres/farm_state). Areas in m2.
| Name | Type | Unit | Description |
|---|---|---|---|
field |
uint16 |
field id 1..59 | |
name |
string |
"F01".."F59" | |
crop |
string |
"corn", "soybean", "potato" or "" (no crop) | |
crop_area_m2 |
float64 |
m² | area of the field's crop patches |
crushed_m2 |
float64 |
m² | crop crushed so far |
crushed_in_band_m2 |
float64 |
m² | of which within edge_band_m of the field's edge (the allowed band) |
crushed_out_band_m2 |
float64 |
m² | of which farther in (not allowed) |
harvested_m2 |
float64 |
m² | |
tilled_m2 |
float64 |
m² | |
seeded_m2 |
float64 |
m² | |
sprayed_m2 |
float64 |
m² | |
theta_mean |
float64 |
mean surface volumetric water content, m3/m3 (-1 without soil cells) | |
pond_mean_m |
float64 |
m | mean pond depth, m |
rut_area_m2 |
float64 |
m² | 25 cm cells with a rut deeper than 1 cm |
Definition
# Ground truth of one field (acres/farm_state). Areas in m2.
uint16 field # field id 1..59
string name # "F01".."F59"
string crop # "corn", "soybean", "potato" or "" (no crop)
float64 crop_area_m2 # area of the field's crop patches
float64 crushed_m2 # crop crushed so far
float64 crushed_in_band_m2 # of which within edge_band_m of the field's edge (the allowed band)
float64 crushed_out_band_m2 # of which farther in (not allowed)
float64 harvested_m2
float64 tilled_m2
float64 seeded_m2
float64 sprayed_m2
float64 theta_mean # mean surface volumetric water content, m3/m3 (-1 without soil cells)
float64 pond_mean_m # mean pond depth, m
float64 rut_area_m2 # 25 cm cells with a rut deeper than 1 cm
TaskStatus#
acres_interfaces/msg/TaskStatus
A task's state and reward terms (topic /sim/task; written by the task code of Learning/, not by the simulator).
| Name | Type | Unit | Description |
|---|---|---|---|
header |
std_msgs/Header |
||
task |
string |
task id, e.g. "scouting" | |
instruction |
string |
the language instruction, if any | |
names |
string[] |
reward term names | |
values |
float64[] |
reward term values this step | |
reward |
float64 |
total reward this step | |
done |
bool |
||
success |
bool |
Definition
# A task's state and reward terms (topic /sim/task; written by the task code of Learning/, not by the simulator).
std_msgs/Header header
string task # task id, e.g. "scouting"
string instruction # the language instruction, if any
string[] names # reward term names
float64[] values # reward term values this step
float64 reward # total reward this step
bool done
bool success
VehicleShift#
acres_interfaces/msg/VehicleShift
A hardware shift of one vehicle (robustness studies, Self-Adaptive VLA): offsets added to the actuators and the sensor mounts, with a label for datasets. All zero = the vehicle as calibrated.
| Name | Type | Unit | Description |
|---|---|---|---|
agent |
string |
agent name | |
label |
string |
free text for datasets, e.g. "steer+3deg" | |
steering_offset_deg |
float64 |
° | added to the steering wheel angle the steering actuator holds (Polaris, deg of steering wheel); Maxxum: road-wheel offset, deg |
ulc_speed_bias_mps |
float64 |
m/s | added to the speed the ULC measures (the vehicle settles this much slower), m/s |
throttle_bias_pct |
float64 |
% | added to the throttle actuator output, % pedal |
brake_bias_bar |
float64 |
bar | added to the brake actuator output, bar |
camera_offset_m |
geometry_msgs/Vector3 |
m | camera mount translation added, base_footprint FLU, m |
camera_offset_rpy_deg |
geometry_msgs/Vector3 |
° | camera mount rotation added (roll, pitch, yaw), deg |
lidar_offset_m |
geometry_msgs/Vector3 |
m | LiDAR mount translation added, m |
lidar_offset_rpy_deg |
geometry_msgs/Vector3 |
° | LiDAR mount rotation added, deg |
Definition
# A hardware shift of one vehicle (robustness studies, Self-Adaptive VLA): offsets added to the actuators and the
# sensor mounts, with a label for datasets. All zero = the vehicle as calibrated.
string agent # agent name
string label # free text for datasets, e.g. "steer+3deg"
float64 steering_offset_deg # added to the steering wheel angle the steering actuator holds (Polaris, deg of
# steering wheel); Maxxum: road-wheel offset, deg
float64 ulc_speed_bias_mps # added to the speed the ULC measures (the vehicle settles this much slower), m/s
float64 throttle_bias_pct # added to the throttle actuator output, % pedal
float64 brake_bias_bar # added to the brake actuator output, bar
geometry_msgs/Vector3 camera_offset_m # camera mount translation added, base_footprint FLU, m
geometry_msgs/Vector3 camera_offset_rpy_deg # camera mount rotation added (roll, pitch, yaw), deg
geometry_msgs/Vector3 lidar_offset_m # LiDAR mount translation added, m
geometry_msgs/Vector3 lidar_offset_rpy_deg # LiDAR mount rotation added, deg
VehicleShifts#
acres_interfaces/msg/VehicleShifts
The shifts in force (topic /sim/shifts, transient local; in the episode log after every change).
| Name | Type | Unit | Description |
|---|---|---|---|
header |
std_msgs/Header |
||
shifts |
VehicleShift[] |
Service Definitions#
FarmState#
acres_interfaces/srv/FarmState
Farm ground truth for task scoring (acres/farm_state): per field crop damage (split at the allowed edge band), field work, soil water.
Request
| Name | Type | Unit | Description |
|---|---|---|---|
edge_band_m |
float64 |
m | width of the allowed band inside each field's edge, m (0: everything is out) |
fields |
uint16[] |
fields to report (empty: every field with crop or marks) |
Response
| Name | Type | Unit | Description |
|---|---|---|---|
result |
simulation_interfaces/Result |
||
header |
std_msgs/Header |
||
fields |
FieldState[] |
||
crushed_m2 |
float64 |
m² | crop crushed on the whole farm since the start |
harvested_kg |
float64 |
kg |
Definition
# Farm ground truth for task scoring (acres/farm_state): per field crop damage (split at the allowed edge band),
# field work, soil water.
float64 edge_band_m # width of the allowed band inside each field's edge, m (0: everything is out)
uint16[] fields # fields to report (empty: every field with crop or marks)
---
simulation_interfaces/Result result
std_msgs/Header header
FieldState[] fields
float64 crushed_m2 # crop crushed on the whole farm since the start
float64 harvested_kg
FieldQuery#
acres_interfaces/srv/FieldQuery
Ground truth at one point (acres/field_query).
Request
| Name | Type | Unit | Description |
|---|---|---|---|
frame_id |
string |
"world" (grid ENU m, default) or "utm" (UTM 16N easting, northing) | |
x |
float64 |
||
y |
float64 |
Response
| Name | Type | Unit | Description |
|---|---|---|---|
result |
simulation_interfaces/Result |
||
field |
uint16 |
field id (0 outside fields) | |
surface |
string |
surface class under the point (asphalt, concrete, gravel, soil, sod, ...) | |
ground_z |
float64 |
ground height, world m | |
theta |
float64 |
surface volumetric water content, m3/m3 (-1 on pavement) | |
pond_m |
float64 |
m | standing water, m |
rut_m |
float64 |
m | rut depth, m |
worked |
uint8 |
work flags (1 tilled, 2 seeded, 4 sprayed) | |
crop |
string |
crop of the nearest patch within 1 m ("" none) | |
crop_crushed |
float64 |
its crushed fraction, 0..1 | |
edge_distance_m |
float64 |
m | distance to the field's edge, m (inside positive; 0 outside fields) |
Definition
# Ground truth at one point (acres/field_query).
string frame_id # "world" (grid ENU m, default) or "utm" (UTM 16N easting, northing)
float64 x
float64 y
---
simulation_interfaces/Result result
uint16 field # field id (0 outside fields)
string surface # surface class under the point (asphalt, concrete, gravel, soil, sod, ...)
float64 ground_z # ground height, world m
float64 theta # surface volumetric water content, m3/m3 (-1 on pavement)
float64 pond_m # standing water, m
float64 rut_m # rut depth, m
uint8 worked # work flags (1 tilled, 2 seeded, 4 sprayed)
string crop # crop of the nearest patch within 1 m ("" none)
float64 crop_crushed # its crushed fraction, 0..1
float64 edge_distance_m # distance to the field's edge, m (inside positive; 0 outside fields)
Record#
acres_interfaces/srv/Record
Start or stop the episode log (acres/record): an MCAP file with the agent states at the physics rate, the farm events, conditions, shifts and the episode clock (Documentation/Reference/episode-log.md).
Request
| Name | Type | Unit | Description |
|---|---|---|---|
action |
uint8 |
||
path |
string |
START: output .mcap (absolute; "" = <session folder>/episode-<n>.mcap) |
| Constant | Type | Value | Description |
|---|---|---|---|
START |
uint8 |
1 |
|
STOP |
uint8 |
2 |
Response
| Name | Type | Unit | Description |
|---|---|---|---|
result |
simulation_interfaces/Result |
||
path |
string |
the file written | |
messages |
uint64 |
messages written so far | |
duration_s |
float64 |
s | simulation time covered, s |
Definition
# Start or stop the episode log (acres/record): an MCAP file with the agent states at the physics rate, the farm
# events, conditions, shifts and the episode clock (Documentation/Reference/episode-log.md).
uint8 START = 1
uint8 STOP = 2
uint8 action
string path # START: output .mcap (absolute; "" = <session folder>/episode-<n>.mcap)
---
simulation_interfaces/Result result
string path # the file written
uint64 messages # messages written so far
float64 duration_s # simulation time covered, s
SetConditions#
acres_interfaces/srv/SetConditions
Weather, clock, soil water and field restore (acres/set_conditions). Each part applies only when its set_* flag is true. Applied between physics steps; the new conditions are logged on /sim/conditions.
Request
| Name | Type | Unit | Description |
|---|---|---|---|
set_clock |
bool |
||
date |
string |
YYYY-MM-DD (local) | |
local_hour |
float64 |
h | |
set_weather |
bool |
||
weather |
string |
preset: "clear", "fair", "overcast", "rain", "storm", "fog" ("" keeps the sky) | |
rain_mm_h |
float64 |
mm/h | rain rate, mm/h (negative: the preset's) |
set_soil_water |
bool |
||
soil_wetness |
float64 |
0 = as dry as the field's wilting point, 1 = saturated (surface layer) | |
soil_fields |
uint16[] |
fields to wet or dry (empty: every field) | |
restore_fields |
bool |
||
fields |
uint16[] |
fields whose marks and crop damage are cleared (empty: every field) |
Response
| Name | Type | Unit | Description |
|---|---|---|---|
result |
simulation_interfaces/Result |
||
message |
string |
Definition
# Weather, clock, soil water and field restore (acres/set_conditions). Each part applies only when its set_* flag is
# true. Applied between physics steps; the new conditions are logged on /sim/conditions.
bool set_clock
string date # YYYY-MM-DD (local)
float64 local_hour # h
bool set_weather
string weather # preset: "clear", "fair", "overcast", "rain", "storm", "fog" ("" keeps the sky)
float64 rain_mm_h # rain rate, mm/h (negative: the preset's)
bool set_soil_water
float64 soil_wetness # 0 = as dry as the field's wilting point, 1 = saturated (surface layer)
uint16[] soil_fields # fields to wet or dry (empty: every field)
bool restore_fields
uint16[] fields # fields whose marks and crop damage are cleared (empty: every field)
---
simulation_interfaces/Result result
string message
SetVehicleShift#
acres_interfaces/srv/SetVehicleShift
Set (replace) a vehicle's hardware shift (acres/set_vehicle_shift). An all-zero shift restores the vehicle.
Request
| Name | Type | Unit | Description |
|---|---|---|---|
shift |
VehicleShift |
Response
| Name | Type | Unit | Description |
|---|---|---|---|
result |
simulation_interfaces/Result |