# Glossary

Description of common terms, notations and conventions we use.
Updated 13 Sept 2021

## Conventions and Notations

For naming conventions of matrices and vectors see the Mathematics Section.

Coordinate Orientation: Robot's local coordinate system is x forward, y to the left, z up. Global coordinates are also z up.

Roll, Pitch, Yaw: When Roll, Pitch and Yaw are in space and otherwise undefined, they are defined as a right hand rule around the x, y, z axes respectively.

Spherical Coordinates: 3-Dimensional vectors in spherical coordinates are $(\rho, \theta, \phi )$, where $\rho$ is the radial distance, $\theta$ is the polar angle, and $\phi$ is the azimuthal angle.

## Terms

Address Sanitizer/ASAN: A package you can build into your program which detects and reports memory errors when you run the program.

Affine Transform: A transform which keeps straight lines straight, and parallel lines parallel, without preserving distances or angles between lines otherwise.

Arch: A lightweight linux distribution which the NUgus robots use as their primary operating system.

Armadillo (arma): The C++ linear algebra library developed by the CSIRO, previously used by NUbots. Documentation can be found here.

Bit-Bots: A RoboCup team from the University of Hamburg, which created the quintic walk NUbots uses.

Buildkite: A platform for running fast, secure, and scalable continuous integration pipelines, which NUbots runs on machines in the NUbots lab.

Calibration Tool: NUbots automatic tool for calibrating the cameras in the head which are used for the robot's vision.

Clang: A compiler, frontend, and tooling infrastructure used for C and C++ which is part of the LLVM infrastructure.

ClangFormat: A package which formats source code according to a given set of rules.

ClangTidy: A package which statically analyses source code, generating warnings based on arbitrarily defined rules you provide.

Closed Loop Control: Control action which uses output from the system being controlled as input.

CM740: A Robotis sub-controller which gives the commands to the servos.

CMake: An open-source build system generator NUbots uses to configure and build the main codebase.

Container: An isolated environment which decouples the environment an application runs in from the environment it's developed in.

Continuous Integration: A development practice whereby frequent updates to a codebase from multiple developers are automated and integrated.

Convolution: A function which transforms two functions into another. Convolutional Neural Networks (CNNs) are very commonly used for image processing and computer vision, working by passing filters across the image and combining those outputs in further layers.

Darwin: A Robotis robot platform which was the platform NUbots used before making the NUgus.

Deep Learning: Machine learning techniques which utilise artificial neural networks with many layers.

Docker: A software service for developing containers which enable standardised cross-platform development consistency.

Dockerhub: A hosting service for docker container images.

Dynamic Motion: We tend to refer to motion which changes based on sensor data as Dynamic Motion.

Dynamixel: The Robotis servo models which NUgus uses.

Eigen: The C++ linear algebra library NUbots uses. Documentation can be found here. List of common pitfalls can be found here.

Euler Angles: Roll, Pitch, and Yaw - they describe rotation for three orthogonal axes.

Extrapolation: Estimation of unknown data points outside the range of observed points.

Forward Kinematics: Calculation of the end point of a kinematic chain based off the joint angles. The inverse of inverse-kinematics.

Gazebo: A simulation software which was used to optimise the "OldWalkEngine" with a genetic algorithm.

Git: A popular version control program used by NUbots.

GitHub: A source code repository hosting service, which uses a git backend. NUbots uses GitHub to manage the source code.

Green Horizon: The edge of the football field, as calculated by the vision system.

igus Humanoid Open Platform: The 3d printed base design which the NUgus is based on.

igus: The creators of the robotics platform NUgus is based on.

Inertial Measurement Unit (IMU): A device which measures acceleration with accelerometers and rotation using gyroscopes.

Interpolation: Estimation of unknown data points within the range of observed points. When used in reference to splines, it means finding a polynomial which satisfies the sets of points, which will be made part of the spline.

Inverse Kinematics: Calculation of joint angles for a given position and orientation for the end of the kinematic chain, relative to the start of the kinematic chain. The inverse of forward kinematics.

Kalman Filter: Control theoretic technique for estimating variables by estimating a joint probability distribution over the variables for each timeframe.

Kinematics: Mathematics which describes motion, which is used to calculate trajectories and servo outputs to control robots.

Lambda Expression: A way of defining an anonymous function in C++.

LLVM: A set of modular compiler and toolchain technologies.

Localisation: The system the robot uses to work out its position relative to its environment and objects within it.

Machine Learning: Systems and models which improve their outputs by exposure to inputs.

Mahony Filter: A complementary filter which estimates attitude, angle, and orientation using IMU data.

Motion Capture (mocap): The recording of movements of moving objects, which keeps track of specific points on the object as it moves.

Motive: The particular Motion Capture software used in the NUbots laboratory.

NatNet: The networking library that facilitates communication of Motive Motion Capture data across a network.

NimbRo: A RoboCup team from the University of Bonn, Germany.

Ninja: The build system NUbots uses for the main codebase. It uses the files and configuration generated by CMake.

NUbook: The NUbots documentation website. Source is hosted on GitHub.

NUC: Intel's portable computing platform which is used in the NUgus robots.

NUClear Binary Stream (NBS): NUClear logging file format, which is basically concatenated protobuf messages with headers.

NUClear Neutron: A message from a NUClear reactor, which is a C++ wrapped protobuf message.

NUClear Powerplant: The central message system which connects the reactors.

NUClear Reaction: The callbacks which need to run when an event or conditions indicate as such. These manifest as DSL on statements.

NUClear Reactor: A NUClear module. Modules in the NUbots codebase are reactors.

NUClear Roles: The build and messaging system used to manage the construction and messaging of NUClear for the NUbots codebase.

NUClear: The software framework which the NUbots codebase is built on. Put simply, it works by triggering callbacks when events occur. Documentation for NUClear is here.

NUFSR: A system designed to detect if a NUgus' foot is on the ground, by use of force sensitive resistors (FSRs).

NUgan: A custom cycle-gan implementation to generate more realistic images for training the vision networks.

NUgus: NUbots robots as currently used in the RoboCup humanoid league. They are modified igus Humanoid Open Platform robots, which we 3D-printed.

NUpbr: The software NUbots uses to generate Physically Based Rendered football fields, used to train vision networks.

NUSense: A secret project for sensor IO.

NUsight: NUbots' visualisation software, ran through a browser on an external computer.

Odometry: Estimation of change in position and orientation based on sensor inputs.

Old Walk Engine: A previously used walk engine, originally optimised using genetic algorithms.

Open Loop Controller: Control action that does not use output from the system being controlled as input.

OpenCL: Open Computing Language is a framework NUbots uses to create programs which can run on graphics hardware.

Particle Filter: A system which represents potential real-world-state estimates as particles which are each assigned a probability.

Protobuf: Protocol Buffers (Protobuf) is a method of serializing structured data, created by Google. Protobuf messages are the means of passing messages between NUClear reactors.

Quintic Walk: Open loop walk engine which uses quintic splines to create trajectories. Created by Bit-Bots, based off code from team Rhoban, then ported to run with NUClear.

Rhoban: The RoboCup team from Bordeaux University, who created the original quintic walk adapted by Bit-Bots, and ported to the NUbots codebase.

RoboCup Symposium: The research conference which is held after RoboCup each year, featuring research from the teams competing.

RoboCup: The robotic football world cup, held each year in different cities around the world.

Robotis: The Korean robotics manufacturer which makes the servos that NUgus uses.

ScriptRunner: The program which runs movement scripts on the robot, such as Zombie.yaml which is used to test servo installations.

ScriptTuner: A NUbots program for manually creating motion targets for movement scripts.

Simscape: A MATLAB-based simulation tool for creating models of physical systems in the Simulink environment. Also the name of the GitHub repository that contains the solution that models and simulates the NUgus robot using Simulink and Simscape.

Simulink: A MATLAB-based graphical simulation software.

Spline: A function defined piecewise by polynomials.

Static Motion: We tend to refer to motion which is fully controlled by scripts which do not change at run-time as Static Motion.

Subsumption: The priority system that determines if a neutron gets access to the servos it wants to control.

Tensorboard: Visualisation toolkit used to inspect the training performance of the visual mesh.

Tensorflow: Machine Learning library used by the Visual Mesh, which powers most of NUbots vision.

Transform: Short for transformation. Sometimes, a matrix representation of a transformation.

Transformation: A function which maps a set to itself (sometimes called an operator on that set). Often, it is used in the context of a spatial manipulation - regularly representated as a translation and a rotation.

Units: S.I. units are used for everything but time. Storage of values may have a different unit, e.g. nbs and nbs index files. In c++ units are a templated parameter to NUClear::clock::duration and NUClear::clock::time_point is unit agnostic.

TFRecord: Binary format used by the Visual Mesh to store input data - contains image, mask, and lens metadata records.

Undefined Behaviour Sanitizer/UBSAN: A package which you can build into your program to detect C++ undefined behaviour when you run your program.

VisualMesh: A computer vision technique NUbots uses which overlays a mesh over the image input to more efficiently sample it and look for objects. Source can be found here.

YAML: A markup/serialisation language NUbots uses for module configurations.

Zero Moment Point (ZMP): With relation to walking motion, it is the point with respect to which the contact force of the foot on the ground produces zero moment in the horizontal direction.