EyeBot simulator EyeSim .robi file documentation
(updated 2026-09-18: sensor coordinate convention stated explicitly; all .robi files
 in this distribution were converted to it)

Each line in the robi file is a keyword, followed by the parameters. A line beginning with # is treated as a comment
Parameters are either options, lengths in millimetres, or angles in degrees. 

The first non comment line of any .robi file MUST be the "drive" keyword.

#######################################
KEYWORDS:

# Specifies the type of driving mechanism. Only one option can be chosen. Do not include the brackets [] in actual robi file

drive [DIFFERENTIAL_DRIVE | ACKERMANN_DRIVE | OMNI_DRIVE]

# Gives a name to the robot. The custom robot will appear in the "Add Robots" menu, with the given name. 
# If the name contains white space, it must be enclosed in double quotes
name "Robot Name"

# Specify the path to a .obj file to use as the robot's model. The simulator will search directories in the following order:
# Full Path, Relative path from .robi file, Relative path from EyeSimVR home directory
model "Path/To/Model.obj"

# Set the physical colliders of the robot using either box, sphere, or capsule shapes.
# Box is specified by its centre and size in each axis
# Sphere is specified by its radius and centre
# Capsule is specified by radius, height, and centre
# All values are in millimetres, and are in model space. (Z is the forwards, X is right, Y is up)
collider box x_size y_size z_size x_centre y_centre z_centre
collider sphere radius x_centre y_centre z_centre
collider capsule radius height x_centre y_centre z_centre

# Specify the mass of the robot, and the centre of mass in model space
mass kg x_centre y_centre z_centre

# Specify the location of the driving axis for a DIFFERENTIAL DRIVE robot only.
# Up and forwards are positive values for the offset.
axis vertical_offset horizontal_offset

# Specify the location of the axels for a ACKERMANN DRIVE robot
# Same as axis, except an option is provided as the first argument
# to select which axel to set
axel [drive | turn] vertical_offset horizontal_offset

# Add a PSD Sensor to a robot. ID is used to access at run time (PSDGet(id))
#
# SENSOR COORDINATES (psd, camera, lidar) -- x = RIGHT, y = FORWARD, z = UP, in mm.
# NOTE this differs from the body lines (model / mass / collider), which use the model space
# below: x = right, y = up, z = forward. The two are not interchangeable.
#
# The rotation is given as three angles rx ry rz in degrees:
#   rz  turns the sensor in the horizontal plane:  0 = forward, -90 = left, +90 = right, 180 = back
#   rx  tilts it out of that plane:               90 = pointing straight down
#   ry  is unused (keep 0)
#
# Example, a sensor 45 mm to the LEFT, 56 mm FORWARD, 30 mm UP, looking left:
#   psd 2 PSD_LEFT  -45 56 30  0 0 -90
psd id "psd_name" x_offset y_offset z_offset rx ry rz

# Set the wheel parameters.
# The drive or turn option is ONLY SPECIFIED FOR ACKERMANN
# Diameter is of the wheel
# Max rotational velocity is in degrees per second
# Encoder ticks per rev sets the encoder rate
# Wheel distance is the distance of the wheel from the centre of the axel (half the distance between the wheels)
wheel [drive | turn] diameter max_rot_velocity encoder_ticks_per_rev wheel_distance

# Set the camera parameters
# x, y, and z offset use the SENSOR coordinates above (x = right, y = forward, z = up)
# Start pan and Start tilt are the initial values in degrees
# Max pan and Max tilt are the maximum values in degrees
camera x_offset y_offset z_offset start_pan start_tilt max_pan max_tilt

# Set the lidar parameters
# Position and rotation use the SENSOR coordinates above (x = right, y = forward, z = up)
# Range is in mm, tilt is the angle between the horizontal plane and the plane of the scan,
# and points is the total number of points to return
lidar x_offset y_offset z_offset rx ry rz range tilt points

#######################################

Care must be given when setting many of the physical parameters
Due to the use of the physics engine, unexpected behaviour can occur especially if the colliders are
improperly configured. Any overlap of colliders with the wheels, or sensors can cause bad results.