Why is the mower not mowing?

From Open Mower Wiki
Revision as of 23:42, 7 August 2024 by Rovo89 (talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

When does the mower stop?

Condition Action Continue once condition is resolved
Bad GPS for longer than gps_timeout (if GPS needed) Stop all motors yes
No /xbot_positioning/xb_pose received for 1 second

Stop all motors

yes
No /mower/status received for 3 seconds

Trigger emergency

yes (after resetting emergency)
Left/right ESC error Trigger emergency yes (after resetting emergency)
Emergency (sensors or explicitly requested) Set emergency pause flag yes (after resetting emergency)
Request manual pause Set manual pause flag yes (after resetting manual pause flag)
manual_pause_mowing (dynamic parameter) is true Abort (*) no
Battery voltage below battery_critical_voltage Abort (*) no
Battery voltage below battery_empty_voltage for 20 seconds Abort (*) no
Motor temperature >= motor_hot_temperature Abort (*) no
Cleared map Abort no
Failed a few times to reach first point of mowing path Abort no

(*) Not aborting in DOCKING, UNDOCKING and IDLE state.

Implications of "abort"

State Result
AREA_RECORDING Go to IDLE
DOCKING Go to IDLE (except while approaching???)
IDLE Reload map etc.
MOWING Go to DOCKING (except while paused or waiting for GPS?)
UNDOCKING Go to IDLE

The "aborted" flag only applies to the current behavior, it gets reset when entering a different state.

What is triggered by the buttons?

State START HOME S1 S2
AREA_RECORDING - Abort - -
DOCKING - - - -
IDLE Reset semiautomatic_task_paused flag

Set manual_start_mowing flag (see below)

- Go to AREA_RECORDING -
MOWING Reset manual pause flag

Reset semiautomatic_task_paused flag (actually not, it's a bug)

Set semiautomatic_task_paused flag

Abort (after waiting for odometry data)

Set manual pause flag Skip area
UNDOCKING - - - -

What is triggered by actions?

Action What happens
mower_logic/reset_emergency Reset emergency (might continue mowing)
mower_logic:idle/start_mowing Reset manual pause flag

Reset semiautomatic_task_paused flag (actually not, it's a bug)

mower_logic:mowing/pause Set manual pause flag
mower_logic:mowing/continue Reset manual pause flag
mower_logic:mowing/abort_mowing Set semiautomatic_task_paused flag

Abort (after waiting for odometry data)

When does the mower go from IDLE to MOWING state?

  • manual_start_mowing flag is set

Or all of the following:

  • Battery voltage above battery_full_voltage
  • Motor temperature below motor_cold_temperature
  • Dynamic parameter manual_pause_mowing is false
  • One of these modes:
    • Automatic
    • Semi-automatic with active task (i.e. mowing was started manually before), semiautomatic_task_paused flag is not set