Orthogonals

In SMACC, Orthogonals are classes, that are defined in the State Machine, then inherited by every Leaf State in that state machine, that contain at least one Client, and may contain multiple client behaviors.

Typically, each device, such as an imu, a lidar scanner, a robot arm or a robot base, that comprises a robot, will be managed in it’s own orthogonal.

Orthogonals are absolutely crucial for complex robotic state machines, because complex robots are almost by definition, amalgamations of numerous sensors, actuators, sub-assemblies, etc.

Let’s look at the examples below, and remember from the naming convention page, that…

  • OrCommLink = Communications Link Orthogonal
  • ClRadioDataLink = Radio Data Link Client
  • CbFrequencyHop = Frequency Hop Client Behavior

To see Orthogonal code, here are some examples from the sm_reference_library..

https://github.com/reelrbtx/SMACC/blob/master/smacc_sm_reference_library/sm_dance_bot/include/sm_dance_bot/orthogonals/or_navigation.h