TORA stands for Trajectory Optimization for Robot Arms.

To get started, see the Tutorial.


This package allows users to define tasks for robot manipulators with simple high-level descriptions. Then, TORA.jl does the heavy-lifting! It converts those descriptions into numerical optimization problems, which are in turn tackled by state-of-the-art solvers. The final result of the optimization is a full trajectory (joint positions, joint velocities, and joint torques) taking into account the whole-body dynamics of the system. These trajectories can be commanded to your favourite robot, either in simulation or in real life.

Diagram 1. Intended use of this package.


Currently, the highlights of TORA.jl are as follows:

  • Simple interface to define constrained motion-planning problems
  • Formulation of the optimal control problem using Direct Transcription
  • Optimization of NLP problems using state-of-the-art solvers (Ipopt.jl and KNITRO.jl)
  • Full system dynamics enforced with either forward or inverse dynamics (RigidBodyDynamics.jl)
  • Automatic differentiation of sparse Jacobians (ForwardDiff.jl and SparseDiffTools.jl)
  • Automatic sparsity detection of Jacobians (SparsityDetection.jl)
  • Visualization of robot models and motion plans (MeshCat.jl)


Overall, the direct transcription technique implemented in TORA.jl stems from: