To start, if you are unfamiliar with robot control, consider reading this tutorial for a detailed introduction to the basic mathematics behind model based nonlinear robot control. The tutorial includes an introduction into whole-body control, and discusses how to perform motor tasks by projecting actuator forces through an articulated body’s nonlinear kinematics. For the post’s remainder, I will assume that you are already somewhat familiar with force control, and with potential issues with controlling task-redundant robots.
Let us first consider the task of controlling a force at a robot’s hand. We first present the kinematic Jacobian, which relates velocities and forces in task coordinates and the robot’s generalized coordinates.
Where x and (q, gc) are the task and generalized coordinates respectively. Using these identities, one may compute hand velocities when given joint velocities, and may compute joint (motor) torques given a desired force to be applied at the hand.
At times, however, one must invert the Jacobian, which is an underconstrained problem when robots have more degrees-of-freedom than the task at hand. Jacobian inverses are useful while performing multiple tasks if one wants to ensure that tasks don’t interfere with each other. One way to do this, presented in the tutorial and in a paper by Khatib (Khatib ’90), is to constrain the inverse by requiring its null space to be an acceleration null space. i.e., If
then the null space generalized forces must not be able to induce either velocity or an acceleration changes in the task coordinates when filtered through the task’s null space . That way, a lower priority task may be projected into the null space, which would prevent it from interfering with the higher priority task.
Please note that unlike our notation, which uses indicative subscripts, Khatib’s notation uses different symbols for forces and inertias in different coordinates. So we have generalized inertias , task space inertias , generalized forces etc.
The question then, is how one might compute this acceleration null space. Note that since the Jacobian relates velocities, a generic Moore-Penrose pseudoinverse‘s null space is already a velocity null space. Redundant robots, however, have infinitely many velocity null spaces corresponding to different generalized inverses, but only have a unique acceleration null space. This corresponds to the dynamically consistent generalized inverse given in Khatib’s paper:
If you did not understand how this was derived, please read the “Energy Equivalence and Operational Dynamics : Hand” section in Samir’s control tutorial.
Using this formulation, you can do cool stuff like pressing a doorbell with a robot’s hand while balancing a tray of cupcakes (yum!) on the robot’s elbow. An acceleration null space will guarantee that the elbow’s motions won’t interfere with the hand. Try it out!