One of the controller’s program buffers is needed to continuously calculate the inverse kinematic equations, whose arguments are updated every controller cycle by the MPU. This is because the motion profile generated by the MPU is in terms of commanded variables and servo needs to be given its commands in terms of the controlled variables. The CONNECT function does not need to be executed every cycle, since the controller automatically evaluates its argument every cycle.

The inverse kinematics buffer starts by defining all of the x, y, and z positions of the base and platform joints. Then, the initial logical axis (APOS) and physical axis (RPOS) variables are set (where the motors are known to be at their starting positions), after which the first calculation of the inverse kinematics is done. Then, the CONNECT function is issued for all axes, and the loop is entered, which continuously calculates the inverse kinematics and corresponding leg lengths that are used by the CONNECT functions.

Using inverse kinematics as described above, it is possible to send commands in terms of commanded variables and let the servo algorithm work in terms of controlled variables. But once the user commands a move, how does he/she know what is actually happening in terms of the commanded variables? Or, if the axis is disabled, how does the user know the positions of the commanded variables?

A specific example regarding the hexapod would be the following: A user disables the hexapod at a certain position. After some time, the user wishes to know: what are values of the commanded variables? Have they changed since disabling the motors at the last commanded position? In this situation, it is likely that the legs have moved some amount, even though the user has not commanded any movement.

Solving this problem requires forward kinematic equations. Simply put, the forward kinematics equations tell the user: what are the values of the commanded variables, given the values of the controlled variables. For the hexapod application, forward kinematics tells the user the position of the platform given the lengths of the legs. Just as we did for the inverse kinematic equation, the forward kinematic equation can be written mathematically as a vector function F2:

F2 (l_{1}, l_{2}, l_{3}, l_{4}, l_{5}, l_{6} )= (x, y, z, α, β, γ)

For the hexapod in this application, there is not a closed form solution to this problem that is practical for real-time execution. Instead, the solution is most readily obtained by performing an iterative process involving estimating the solution, evaluating the estimation, forming a new estimation, evaluating the new estimation, and so on until the estimation is below some error threshold. This iterative process is also done in one of the controller’s program buffers.

For both forward and inverse kinematics, the ACS SPiiPlus controller can be used to calculate the values of both the commanded and controlled variables.

*This article was written by Jason Goerges, control and applications engineer, ACS Motion Control Inc., Plymouth, MN. For more information, please contact Mr. Goerges at This email address is being protected from spambots. You need JavaScript enabled to view it., or visit http://info.hotims.com/15132-326.*