Software Architect

  • Gerald Brantner


Project Overview

The purpose of this project is the implementation of operational-space control in OpenSim. This kind of controller has a number of advantages over commonly used generalized coordinate (torque) controllers:

  • Generates more "natural human motion"
  • Generalized coordinate (GC) torques are computed implicitly
  • Dimension m = #task_coordinates << n = #joint_DOF
  • No inverse kinematics required

It is particularly suitable for many biomechanical applications, such as

  • Reaching
  • Manipulation
  • Athletics
  • Marker tracking

The implemented framework includes an operational-space position task controller and a posture controller that operates in the task's null-space. For a more detailed mathematical background please refer to the attached presentation or the References section.

Plan for Success

  1. Set up Simbody and OpenSim on Ubuntu -- DONE (I will make a tutorial on confluence)
  2. Generate simple articulated body system as a test platform -- DONE
  3. Set up control inputs to generalized coordinates (GC) -- DONE
  4. Set up GC controller (nonlinear dynamic decoupling) -- DONE
  5. Un-hardcode to make GC controller applicable to arbitrary systems -- DONE
  6. Set up operational-space controller -- DONE
  7. Implement null-space damping -- DONE
  8. Implement posture controller -- DONE
  9. Set up keyboard input to make the simulation interactive -- DONE
  10. Set up more complex models (arm, whole body) -- DONE
  11. Clean up code and improve performance --DONE

Final Presentation



I would like to thank the BIOE485 teaching team for their support throughout this project, in particular Michael Sherman, Tim Dorn, and Tom Uchida (randomly arranged).


  1. Khatib, Oussama, et al. "Whole-body dynamic behavior and control of human-like robots." International Journal of Humanoid Robotics 1.01 (2004): 29–43.
  2. Khatib, Oussama. "A unified approach for motion and force control of robot manipulators: The operational space formulation." IEEE Journal of Robotics and Automation 3.1 (1987): 43–53.