Universal Board Configuration

How to configure the Universal Board for custom mower builds: parameter reference, template file, and wheel tick calibration.

This guide is for custom mower builds using the OpenMower Universal Board. Unlike supported mowers, custom builds require you to measure and set several hardware-specific parameters before the mower will operate correctly.

All custom parameters go into ~/params/custom_params.yaml on the mower.

Configuration Template

Download the template and place it at ~/params/custom_params.yaml on your mower as a starting point:

Download custom_params.yaml

The sections below explain every parameter marked # TODO.


Differential Drive

ll:
  services:
    diff_drive:
      wheel_distance_m: 0.325
      ticks_per_m: 1600.0
ParameterWhat to set
wheel_distance_mDistance in meters between the center of the left and right drive wheels. Measure with a tape measure.
ticks_per_mEncoder ticks per meter of travel. Must be measured — see Calibrating Wheel Ticks below.

IMU Orientation

    imu:
      axis_config: "+X-Y-Z"
ParameterWhat to set
axis_configOrientation of the mainboard relative to the mower chassis. +X-Y-Z is correct for a flat, horizontal mounting with the board’s X axis pointing forward. Change this if your mainboard is mounted at an angle or rotated.

Battery Voltages

    power:
      battery_full_voltage: 20.0
      battery_empty_voltage: 18.5
      battery_critical_voltage: 16.5
      battery_critical_high_voltage: 21.0
      charge_critical_high_voltage: 30.0
      charge_critical_high_current: 1.5

Look up the voltage spec for your battery pack and set accordingly.

ParameterWhat to set
battery_full_voltageVoltage of a fully charged pack (from spec).
battery_empty_voltageVoltage at which the mower returns to dock.
battery_critical_voltageEmergency low-voltage cutoff. Set below empty but above damaging discharge.
battery_critical_high_voltageOvervoltage protection threshold. Set slightly above full charge voltage.
charge_critical_high_voltageMaximum acceptable charger output voltage.
charge_critical_high_currentMaximum acceptable charge current in amps.

GPS Antenna Offset

xbot_positioning:
  antenna_offset_x: 0.3
  antenna_offset_y: 0.0

The positioning system needs to know where the GPS antenna is relative to the mower’s center of rotation (the midpoint between the two drive wheels).

ParameterWhat to set
antenna_offset_xForward/back offset in meters. Positive = antenna is in front of the rotation center. Measure from wheel midpoint to antenna.
antenna_offset_yLeft/right offset in meters. Positive = antenna is to the left. Usually 0 if the antenna is centered.

GPS Datum

    gps:
      datum_lat: 53.457452
      datum_long: 10.014737

These are not marked TODO in the template but must be changed. Set them to coordinates near your docking station — this becomes the origin of your mower’s map. Use a GPS or map tool to get the coordinates.


NTRIP Credentials

ntrip_client:
  host: "www.your-ntrip-caster.de"
  port: 2101
  username: "ntripuser"
  password: "ntrippass"
  mountpoint: "ntripmount"

Fill in the credentials from your RTK correction provider.


Emergency Sensors

Before enabling the mower motor, configure and verify all emergency sensors (lift detection, tilt detection, stop buttons). This is done via the GPIO input configuration — see Configuring GPIO Inputs for the full setup guide.

Enable Mower Motor

mower_logic:
  enable_mower: false

Set to true only after all emergency sensors are wired, configured, and verified to work correctly. Running without functioning emergency sensors is unsafe.


Calibrating Wheel Ticks

This procedure measures the ticks_per_m value for your specific mower’s wheel encoders.

Prerequisites

  • OpenMower is running
  • SSH or web terminal access
  • A flat surface with ~10 m of clear, straight space
  • Something to mark the start and end position (tape, chalk, etc.)

Step 1: Enter recording mode

Open the OpenMower app and activate area recording mode. This ensures the drive motors and wheel encoders are active and publishing odometry data.

Step 2: Record start tacho values

Open the ROS shell:

openmower shell

Subscribe to the left ESC status topic and note the tacho field:

rostopic echo /ll/diff_drive/left_esc_status

Write down the value, then press Ctrl+C. Repeat for the right wheel:

rostopic echo /ll/diff_drive/right_esc_status

Step 3: Drive a 10 m straight line

Mark the mower’s current position, then drive it in a straight line for exactly 10 meters. Drive slowly and steadily — the straighter the line, the more accurate the result.

Step 4: Record end tacho values

Subscribe to each topic again and note the new tacho values:

rostopic echo /ll/diff_drive/left_esc_status
rostopic echo /ll/diff_drive/right_esc_status

Step 5: Calculate ticks_per_m

Compute the difference for each wheel. If negative, flip the sign:

left_diff  = |tacho_end_left  - tacho_start_left|
right_diff = |tacho_end_right - tacho_start_right|

The two values should be approximately equal. Average them and divide by 10:

ticks_per_m = (left_diff + right_diff) / (2 * 10)

Step 6: Apply the value

Edit custom_params.yaml directly:

nano ~/params/custom_params.yaml

Set the value you calculated:

ll:
  services:
    diff_drive:
      ticks_per_m: <your_value>

Save the file and restart OpenMower to apply.