TriPed Simulation

TriPed_sim

Goal

To accelerate the development of the TriPed project, it was necessary to parallelize the development of the different layers of the control architectures.

This necessitated the development of a simulation that could provide interfaces at different abstraction levels.

Problem/Complication

There was a multitude of problems and considerations when designing the simulation. One of which being that the kinematic calculation was relatively slow. This is because each calculation requires the solving of a complicated closure equation (discussed here).

While a more streamlined and faster calculation was being worked on, walking experiments were much slower than real-time, hampering the development of gait generators.

Contribution

The simulation was a joint effort between Max Goebels and me. He laid the foundation of this simulation in his bachelor thesis, which I supervised.

Since then, I have fixed mistakes relating to sensor output conventions and streamlined the simulation, improving its speed by over 1000% while retaining the same accuracy. This was done by optimizing the choice of solvers and using relaxation techniques to circumvent complicated algebraic constraints. At the same time, suitable initial conditions for the solver were chosen to prevent the system from oscillating between the multiple solutions of the inverse kinematics: mult_inv_kin

In addition, I implemented a second simplified simulation, which abstracts the mechanical subsystem requiring the solving of a closure equation using a single joint. Once again, the solution space had to be constrained to make the simplified simulation congruent with the full simulation. redundant

Additionally, I restructured the simulation with the help of Max Goebels into a library enabling arbitrary leg models and configurations.

Result

The final simulation was open-sourced, including several example scenarios that showcase the capabilities TriPed. It can be found here.

triped_orientation

What I learned

On the theoretical side, the project taught me mutch about optimizing computational models to increase performance. Such as the importance of choosing the right solver for the right problem and methods to circumvent model redundancy and undesirable multiple solutions.

On a practical side, I learned a lot about the ins and outs of what Simulink does behind the scenes and how a Git-based workflow can be used with Matlab in general.