Energid Technologies Logo
Company Products Services Projects News Careers Knowledge Center
Energid Technologies - Robotics
Actin
Features & Benefits
Applications
Robot Control
Robot Simulation
Supported Control Systems
Technologies
Core Software
Core Control Algorithms
Selectin
Codec
Core Software

Velocity Control System

Large, fielded control systems are typically complex, with many patches and logical paths added by the development team. Though based on logically encapsulated equations from textbooks and academic papers, fielded control systems transcend them. The Actin™ Toolkit embraces this phenomenon by organizing the control system, the robust extension, and all supporting mathematics into a flexible logical tree that can be represented in XML.

This logical tree can better represent the additions and modifications that otherwise might be informally added to the control system. It also provides a method of organization that supports dynamic programming-the storage of subproblem solutions to prevent duplicate calculation. This dynamic-programming/logical-tree approach to velocity control is among the most important components of the Actin™ Toolkit. The control system is a combination of flexible software with a powerful algorithm.

Containers

A control expression container performs three tasks. It 1) holds a single expression element, which is the root of a tree, 2) knows how to create any type of expression element that may can lie in the tree beneath it, and 3) provides access to system information. This is illustrated in the figure below.

Robotic Velocity Control - Containers

Figure 1 The three roles of the container. Each container holds a single expression element, a pointer to system information, and the ability to create any type of expression element in the tree below it from a string token.

Expression Elements

Expression elements are the building blocks of the control system tree. All expression elements have the following in common:

  • Every expression element returns a two-dimensional array of values when queried.
  • Every expression element holds a pointer to the top-most container in the tree.
  • Using the container pointer, every expression element can read and write its description (including the tree below it) from and to an XML stream.

There are two categories of expression elements: branch and leaf elements. Branch elements have children that are expression elements. Unary branch elements have a single child, binary branch elements have two children, and multiary branch elements have more than two children. Leaf elements have no children. The control expression tree is formed using branch elements terminated by leaf elements. In the C++ code, each type of expression element is represented using a different class. In the XML description, each expression element uses a unique string identifier of its type.

The most basic expression elements are simple mathematical operations, such as multiplication and addition. All operations are supported on two-dimensional arrays in an intuitive manner. Addition is performed element-by-element and multiplication is performed as matrix multiplication. When the dimensions of quantities do not agree, the operation is performed on the maximum compatible subset. The figure below illustrates a simple expression tree that returns an array that is a function of a manipulator joint value.

The memory management in the tree is self organizing. Standard Template Library (STL) data structures are allocated from the heap based on the size of values returned from child expression elements. In so doing, as long as the children return the same size data (the typical case), no memory is allocated on subsequent use of the tree. This allows fast operation of the control system. Despite very high flexibility, there is no dynamic memory allocation at run time.

Robot Velocity Control - Tree Structure

Figure 2 An example expression tree. A container holds the top element, which is the root of a tree that is the root of a tree composed of branch (white) and leaf (blue) elements. All elements hold a pointer to the container (only two are illustrated). For programming, the container object holds a map of functions to create any type of expression element from a string token.

Would you like to learn more about Actin's software architecture? Please contact us.