Skill

Documentation for each skill module in the main NUbots codebase
Updated 23 Mar 2026

Dive

Description

Executes a Dive action, intended to be used for a goalie to stop the ball.

Usage

Add this module to the role and emit a Dive Task to execute a Dive.

Consumes

  • message::skill::Dive a Task requesting to Dive to the left or right

Emits

  • message::actuation::BodySequence a Task requesting to move the body in a sequence, used to run the Dive scripts

Dependencies

  • Director
  • The script utility to load the Dive scripts

Getup

Description

A Behaviour module that will run the appropriate getup script for the robot. First a StandStill task is emitted, then the getup task is delayed so that the robot can settle into it's final position to improve side detection accuracy. Additionally, if after the delay the robot detects that it is on its left/right side, another delay will be emitted.

Usage

Include this module to allow the robot to get up after it has fallen over.

Consumes

  • message::skill::GetUp as a Task to trigger execution
  • message::input::Sensors to determine which get up script to execute

Emits

  • message::behaviour::state::Stability to update the stability when starting and finishing getting up
  • message::actuation::BodySequence as a Task containing the script sequence for getting up

Dependencies

  • Director
  • The Script extension to convert scripts into BodySequences

GPT

Description

A module that integrates with OpenAI's GPT-3.5 model to send text prompts and receive generated responses.

Usage

Include this module to allow your system to interact with OpenAI's GPT for natural language processing tasks.

Consumes

  • message::skill::GPTChatRequest: A request containing text that needs to be processed by GPT.

Emits

  • message::skill::Say: A Task requesting to speak using the output of the GPT model based on the input request.

Dependencies

  • Director
  • nlohmann::json: For JSON data serialisation and deserialisation.
  • utility::openai::openai: A utility to interface with the OpenAI API.

IKKick

Description

Performs a kick using inverse kinematics by balancing on one support foot and moving the other foot through a kick trajectory.

The module:

  • Chooses support foot from the requested kick target (y < 0 uses left support, otherwise right)
  • Transforms kick target/direction into support-foot coordinates
  • Runs a balancing phase and then a kick phase
  • Emits leg IK tasks each update until the kick sequence is complete

Usage

Provide a message::skill::Kick task together with current Sensors and KinematicsModel.

IKKick runs as a behaviour skill (Provide<Kick>) at 90 Hz and publishes LeftLegIK/RightLegIK tasks for the legs during the kick.

Configuration is read from IKKick.yaml, including:

  • servo gain/torque
  • balancer timing/geometry settings
  • active-balance controller gains
  • kick trajectory parameters (kick_velocity, follow_through, wind_up, etc.)
  • kick frame templates (lift_foot, kick, place_foot)

Consumes

  • extension::Configuration from IKKick.yaml
  • message::skill::Kick
  • message::input::Sensors
  • message::actuation::KinematicsModel

Emits

  • message::actuation::LeftLegIK
  • message::actuation::RightLegIK
  • extension::behaviour::Done (when kick sequence has finished)

Dependencies

  • Director

KickWalk

Description

Allows the robot to perform kicks while walking. This module emits a modified walk command, making the walk engine take a single large step when a kick task is emitted. These kicks integrate seamlessly with the robot's regular walk.

Usage

Include this module to allow the robot to kick while walking. This is useful for dynamic soccer gameplay where the robot needs to kick the ball while maintaining movement.

Consumes

  • message::skill::Kick Task requesting the robot to kick
  • message::skill::Walk A Task requesting to walk, containing a vector with the desired velocity target, a boolean indicating whether to kick, and the leg to use when kicking.

Emits

  • message::skill::Walk A Task requesting to walk, containing a vector with the desired velocity target, a boolean indicating whether to kick, and the leg to use when kicking.

Dependencies

  • Director

Look

Description

Moves the head so that the robot is looking in a given direction, with the option for smoothing.

Usage

Include this module to make the robot look in the given direction.

Consumes

  • message::skill::Look a Task requesting to look in a direction
  • message::input::Sensors to get the current head angles for smoothing

Emits

  • message::actuation::HeadIK to calculate and request head joint angles

Dependencies

  • Director
  • The coordinates utility

Say

Description

Module that enables the robot to vocalise specified text using a text-to-speech tool and optionally perform a nodding gesture to indicate speaking.

Usage

Include this module whenever the robot needs to vocalise or acknowledge messages via speech-like actions.

Consumes

  • message::skill::Say: A Task requesting to vocalise a text string. Contains the text to be spoken and an optional nod gesture request.

Emits

  • message::actuation::HeadSequence: A Task to instruct the robot's head to perform specific sequences, such as a nodding gesture.

Dependencies

  • Director
  • mimic3: External python based command-line text-to-speech tool.
  • aplay: Command-line sound player for Linux.

ScriptKick

Description

Executes a script for kicking.

Usage

Emit a Kick message when wanting to kick.

Consumes

  • message::skill::Kick the kick information to use when kicking.

Emits

  • message::actuation::LimbsSequence through the Script extension, which populates the requested Script/s into LimbsSequences.

Dependencies

  • Director
  • Script extension

SplineKick

Description

SplineKick module executes a kicking motion using splines for smooth and accurate movement. Waypoints for the kicking foot and torso relative to the support foot are specified in the config and executed by this module.

Usage

Add this module to allow the robot to kick.

Consumes

  • message::skill::Kick Task requesting the robot to kick

Emits

  • message::actuation::ControlLeftFoot Task requesting the left leg is moved to desired pose.
  • message::actuation::ControlRightFoot Task requesting the right leg is moved to desired pose.
  • message::actuation::LeftArm Task requesting the left arm is moved using Inverse Kinematics, containing left arm servo commands.
  • message::actuation::RightArm Task requesting the right arm is moved using Inverse Kinematics, containing right arm servo commands.

Dependencies

  • Director
  • Eigen

Walk

Description

Open loop walk engine that uses quintic splines to create swing foot and torso trajectories.

Usage

Include this module to allow the robot to walk.

Consumes

  • message::skill::Walk A Task requesting to walk, containing a vector with the desired velocity target.

Emits

  • message::behaviour::state::Stability to indicate when the robot is walking (dynamically stable) and standing.
  • message::actuation::ControlLeftFoot Task requesting the left leg is moved to desired pose.
  • message::actuation::ControlRightFoot Task requesting the right leg is moved to desired pose.
  • message::actuation::LeftArm Task requesting the left arm is moved using Inverse Kinematics, containing left arm servo commands.
  • message::actuation::RightArm Task requesting the right arm is moved using Inverse Kinematics, containing right arm servo commands.

Dependencies

  • Director
  • Eigen
Modules
Purpose
Modules
Strategy
NUbots acknowledges the traditional custodians of the lands within our footprint areas: Awabakal, Darkinjung, Biripai, Worimi, Wonnarua, and Eora Nations. We acknowledge that our laboratory is situated on unceded Pambalong land. We pay respect to the wisdom of our Elders past and present.
Copyright © 2026 NUbots - CC-BY-4.0
Deploys by Netlify