Sensors#
The Polaris carries the sensors of the real vehicle: a Helios LiDAR, a front camera, GNSS, an IMU and an INS. This page shows each sensor, how to change it, and how to read it from the game, from a stream or from ACRES Core.
Before you start
- For the game: package the game. Refer to Build the Game.
- For Python: set the environment of Use the Python API.
The Sensors of the Polaris#
The values come from Acres/Content/Simulation/sensors_polaris.json. The game makes every sensor. ACRES Core makes the LiDAR only.
| Sensor | Rate | Main Values | Model |
|---|---|---|---|
| LiDAR (Helios) | 10 Hz | 32 rings x 1800 columns, 161.3 m range, 0.2 m minimum range, strongest return, motion during the sweep | LiDAR |
| Camera | 10 Hz | 896 x 512 pixels, 73.5 degrees horizontal field of view, rolling shutter, exposure, noise | Camera |
| GNSS | 10 Hz | RTK fix states, multipath, outages | INS and GNSS |
| IMU | 120 Hz | Accelerations and turn rates with bias and noise | INS and GNSS |
| INS | 100 Hz | A fused pose in NAD83 UTM zone 16 | INS and GNSS |
| CAN | Wheel speeds and drive-by-wire signals. Off for the Polaris by default. | Wheel and CAN Signals |
Get the Sensor Data#
The game writes an episode folder with images, scans and JSON Lines files. The key F6 starts and stops an episode. Refer to Collect Data.
The game sends the samples on a TCP port. The ROS 2 bridge publishes them as ROS 2 topics. Refer to ROS 2 and the Sensor Stream reference.
No rendering: many scans at the same time. Refer to Scan with the LiDAR in ACRES Core.

Change a Sensor#
| Option | Function |
|---|---|
-PolarisSensorConfig=<file> |
Uses a different sensor file for the Polaris. Copy sensors_polaris.json and change the copy. |
-SensorLidarHz=, -SensorLidarRings=, -SensorLidarColumns=, -SensorLidarRange= |
The rate, the rings, the columns and the range of the LiDAR |
-SensorLidarReturnMode= |
The return mode of the LiDAR |
-SensorLidarIdeal |
A LiDAR with no noise, no divergence and no weather |
-SensorCameraHz=, -SensorCameraWidth=, -SensorCameraHeight=, -SensorCameraHfov= |
The rate, the size and the field of view of the camera |
-SensorCameraIdeal |
A camera with no distortion, no noise and no rolling shutter |
-SensorGnssHz=, -SensorGnssOutage= |
The GNSS rate and an outage |
-SensorNoNoise |
Removes the noise of all sensors |
-SensorNoCamera, -SensorNoLidar, -SensorNoGnss, -SensorNoImu, -SensorNoIns, -SensorNoCan |
Removes one sensor |
-SensorSeed= |
The seed of the sensor noise |
In an agents file, sensor_overlay changes values of the sensor file for one vehicle. Refer to Vehicles.
Scan with the LiDAR in ACRES Core#
ACRES Core casts the rays of the Helios pattern on the same scene and crops. Each return has a material code.
"""One Helios scan in a soybean field, with the crops, and the returns of each material."""
import math
from collections import Counter
import numpy as np
import acres_core as ac
batch = ac.Batch(".", num_envs=1)
batch.reset([0], np.array([[-585.0, 75.0, math.pi / 2, 0.0]])) # field 14
names = {code: name for name, code in ac.LIDAR_MATERIALS.items()} # material code -> name
for crops in (False, True):
ranges, material = batch.lidar([0], pattern="helios", crops=crops)
hit = np.isfinite(ranges[0])
counts = Counter(names.get(int(m), str(int(m))) for m in material[0][hit])
print(f"crops={crops}: {hit.sum()} returns", dict(counts.most_common(4)))
Expected result
With the crops, the soybean plants take the place of approximately half of the ground returns. self is the body of the vehicle.
Argument of lidar |
Function |
|---|---|
pattern |
planar (360 beams in one ring at the sensor height) or helios (1800 x 32) |
crops=True |
Adds the corn, soybean and potato plants and the grass cover |
intensity=True |
Adds a third array: the calibrated reflectivity byte of each return |
sweep=True |
Casts each column from the pose at its firing time, with the motion of the vehicle |
noise=True, seed |
Adds the range noise |
objects |
How the scan sees the objects on the path: shape, column, none or auto |
Next Steps#
-
Record a camera and LiDAR data set and read it in Python.
-
The beam pattern, the materials, the weather and the noise.
-
The lens, the exposure, the rolling shutter and the noise.