Skip to content

sourcebots/sbot

Repository files navigation

sbot

Lint & buildPyPI versionDocumentation StatusMIT licenseBees

sbot - SourceBots Robot API

This is the API for Southampton Robotics Outreach robotics competitions.

Installation

If you wish to install openCV from your package manager, you can install the base package with:

pip install sbot

To install the full package, including openCV, you can install with:

pip install sbot[vision]

Usage

Importing the module will, by default, trigger board discovery and wait for the start button to be pressed.

importsbot

Unlike previous versions, robot functionality is accessed directly from the sbot library instead of instantiating a class.

fromsbotimport*motors.set_power(0, 0.3) motors.set_power(1, 0.3) power.get_output_current(PowerOutputPosition.H0) utils.sound_buzzer(880, 0.5) servos.set_position(0, 45/90) print(arduino.measure_ultrasound_distance(8, 9)) ifcomp.is_competition: markers=vision.detect_markers() leds.set_colour(0, Colour.MAGENTA)

Startup behaviour

You can configure the startup behaviour of sbot with an override.env file in the same directory as your project.

Example override.env file:

ENABLE_DEBUG_LOGGING=1 SKIP_WAIT_START=1 NO_POWERBOARD=1

If SKIP_WAIT_START is set, you will have to manually trigger board discovery and wait for the start button:

fromsbotimportutilsutils.load_boards() utils.wait_start()

The currently supported override keys are:

OverrideDescription
ENABLE_DEBUG_LOGGINGEnable debug logging
ENABLE_TRACE_LOGGINGEnable trace level logging
SKIP_WAIT_STARTDon't block for the start signal automatically
NO_POWERBOARDAllow running without a power board
MANUAL_POWER_PORTSSpecify additional serial ports for power boards
MANUAL_MOTOR_PORTSSpecify additional serial ports for motor boards
MANUAL_SERVO_PORTSSpecify additional serial ports for servo boards
MANUAL_ARDUINO_PORTSSpecify additional serial ports for arduino boards
MANUAL_LED_PORTSSpecify additional serial ports for led boards, only used in the simulator
MANUAL_TIME_PORTSSpecify additional serial ports for the time interface, only used in the simulator
SORT_POWER_ORDEROverride the sort order of the power boards, unused
SORT_MOTOR_ORDEROverride the sort order of the motor boards
SORT_SERVO_ORDEROverride the sort order of the servo boards
SORT_ARDUINO_ORDEROverride the sort order of the arduino boards, unused
SORT_LED_ORDEROverride the sort order of the led boards, unused
SORT_TIME_ORDEROverride the sort order of the time interface, unused

You can also configure these settings as environment variables, by prepending the prefix SBOT_. For example, ENABLE_DEBUG_LOGGING can be set as SBOT_ENABLE_DEBUG_LOGGING. Some settings can only be configured as environment variables. These are:

Environment VariableDescription
OPENCV_CALIBRATIONSOverride the location to look for additional camera calibrations, defaults to the working directory
SBOT_METADATA_PATHOverride the location to look for metadata files, normally configured by the runner
SBOT_PYTESTSet to 1 when running unit tests, to disable automatic discovery on import
SBOT_MQTT_URLThe URI to use for the MQTT broker, normally configured by the runner
run_uuidThe UUID to include in all MQTT messages, normally configured by the runner
WEBOTS_SIMULATORSet to 1 when running in the Webots simulator, used to detect the simulator environment
WEBOTS_ROBOTList of socket URIs to connect to for the simulated boards, configured by the runner
WEBOTS_DEVICE_LOGGINGSet to the log level name to use for logging of the simulated boards, defaults to WARNING

Developer Notes

There are a number of considerations that have been made in the design of this API. Some of these may not be immediately obvious, so they are documented below.

  • tuple is used to prevent the user from adding, removing or overwriting items in any parts of the API that would return a list.
  • __slots__ is used to prevent the user from adding, removing or overwriting attributes in any parts of the API.
  • sbot.serial_wrapper.SerialWrapper handles automatic reconnection to the serial port if the connection is lost and impleents 3 retries on any serial operation before raising a BoardDisconnectionError.
  • The old API is still available under sbot.historic, though this might change.