What Is ACRES#
ACRES is a simulator of farm vehicles on a surveyed part of the Purdue ACRE farm. It has two simulators, a run-time library and Python packages that you use from your own code.
The Parts#
| Part | Location | Use |
|---|---|---|
| Unreal game | Acres/ |
The full simulator with a window: the Maxxum tractor, the eight implements, the Polaris Ranger, the weather, the camera and the GPU LiDAR. |
| ACRES Core | Core/ |
The simulator without Unreal Engine. It steps many Polaris worlds in parallel on the CPU. |
| Run-time library | Runtime/ |
The missions, the routes, the planner, the shield, the trajectory checker and the skills. It contains ACRES Core. |
acres_core |
Core/Build |
The Python module of one ACRES Core world: step, LiDAR, episode log. |
acres_simulator |
Simulator/ |
The Python package of the run-time library: fleets of vehicles, missions, skills and routes. |
acres_harness |
Harness/ |
Scenarios, the mission runner, the scores, the replay and the recovery modes. |
acres_learn |
Learning/ |
The configuration files, the map products with their builder, and the readers of recordings. |
| ROS 2 workspace | ROS/ |
The bridges acres_sim (the game) and acres_core_sim (ACRES Core) with the topics of the real vehicle. |
The game and ACRES Core compile the same model sources in Acres/Source/Acres.
Thus the two simulators use one set of equations.
Architecture gives the threads, the layers and the data flow.
What You Can Do#
-
Drive a vehicle
Drive the Polaris or the Maxxum with the keyboard, or command them from code.
-
Collect data
Record the camera, the LiDAR, the GNSS, the IMU and the CAN bus, with the ground truth.
-
Replay a drive
Drive a recorded session again, or show an episode log in the game.
-
Run thousands of missions
Step many vehicles in parallel from Python with ACRES Core and the run-time library.
Two Ways to Use ACRES#
| Path | You Get | You Need |
|---|---|---|
| Python only | ACRES Core, the run-time library, acres_simulator, acres_harness. No window, many vehicles in parallel. |
Linux, a C++20 compiler, Python 3.12 or 3.13, Git LFS. No GPU. |
| Full game | The Unreal game with all vehicles, implements and sensors, and a window or offscreen rendering. | The Python path, plus Unreal Engine 5.8 and an NVIDIA GPU with Vulkan. |
Install gives the procedure for each path.
Platforms#
| Platform | Graphics | Status |
|---|---|---|
| Linux, 64 bit | Vulkan, shader model 6 | Built, packaged and tested. All commands of this documentation are Linux commands. |
| Windows | DirectX 12, shader model 6 | The project has the settings. This documentation has no Windows procedure. |
| macOS | Metal, shader model 6 | The project has the settings. No build exists. |
The CAN transport of the vehicle bridge (SocketCAN) and the ROS 2 workspace operate only on Linux.
Render Tiers and the GPU#
The game selects a render tier from the GPU memory at the start of a session. The sensors use a fixed sensor profile, so a dataset does not change with the computer.
| GPU Memory | Render Tier | Sensor Profile |
|---|---|---|
| Less than 11 776 MiB | low |
reduced-6gb |
| 11 776 MiB or more | high |
calibrated |
- The option
-RenderTier=lowor-RenderTier=highreplaces the selection. - The option
-SensorRenderProfile=calibratedor-SensorRenderProfile=reducedreplaces the sensor profile. - Without hardware ray tracing, the LiDAR uses its CPU path. The option
-SensorCpuLidarselects the CPU path on all computers.
Run the Game gives the settings of each tier and the dataset labels.
Speed#
ACRES Core has no renderer. Core/Scripts/bench.py measures its speed with 64 Polaris worlds on the ACRE tile.
| Measurement | Result on an 8-core CPU |
|---|---|
| Physics with soil and crops, 1 thread | 547 times real time |
| Physics with soil and crops, 16 threads | 3000 times real time |
| Polaris LiDAR scans (57 600 beams), 16 threads | 687 scans each second |
The game keeps a physics rate of 120 Hz. The frame rate depends on the tier and the sensors.
| Tier | Vehicle and Sensors | Frame Rate | Peak GPU Memory |
|---|---|---|---|
| Low | Polaris, no sensors | 82 Hz | 4610 MiB |
| Low | Polaris, camera and LiDAR | 35 Hz | 5708 MiB |
| High | Polaris, no sensors | 36 Hz | 8237 MiB |
| High | Polaris, camera and LiDAR | 21 Hz | 10 603 MiB |
The frame rates come from Tools/Performance/benchmark_linux.py at 1920 x 1080 on an NVIDIA GeForce RTX 5060 Ti with 16 GB.
Next Steps#
-
Get the code and build the Python path or the full game.
-
Drive a Polaris from Python in five minutes, then run a mission.
-
All keys of the game: driving, implements, cameras, recording and replay.