Motion Stack

Synchronization of 6 robots

ubuntu ros python mit

rtb doit test

From modular robots with distributed computation, to a simple robotic arm, the motion stack provides control for (multi-)limbed systems. The goal of the project is maximum flexibility reflecting the flexibility of modular robotics, while abstracting away the complexity of such systems.

Features


  • Modular – any limb anywhere on the robot.

  • Distributed – any process anywhere on the network (ROS2 interface).

  • Runtime hardware agnosticism – adapts in real-time to robot characteristics.

  • Separation of concerns – team-member implementations and robot specificities, minimally impacts the other systems.

  • Inverse Kinematics – 3Dof and above.

  • Multi-limb synchronization

  • TUI included – control your robot through a Terminal User Interface.

  • Customizable interfaces – Use the API and override the source-code for your robot and team.

  • URDF parser

  • Flexible launch system

  • Documented example of Moonbot Zero

_images/landingx3.gif

Motion-Stack API synchronizing 3 different robots over the network, totaling 6 end-effectors.

Upcomming Features


  • Deprecation of lvl 3, 4 Level 3 and 4 have been replaced by the much safer and versatile high level API.

Ros2 Structure Overview


The current basic structure can be interpreted as the following tree:

|                       levels
|   00    |     01      |     02   |   03   |    04   |    05   |
| Motor X -- Joint 0 -- |
| Motor X -- Joint 1 -- +- IK 0 -- Leg 0 -- |
| Motor X -- Joint 2 -- |                   |
|                                           |
| Motor X -- Joint 0 -- |                   |
| Motor X -- Joint 1 -- +- IK 1 -- Leg 1 -- +-  Mover  -- Gait
| Motor X -- Joint 2 -- |                   |
|                                           |
|                                   ...  -- |

The power of this structure lies in its modularity. Packages responsible for a level can be swapped in/out for other packages responsible for the same level.

For example: - When using the real robot, dynamixel_hotplug_ros2_python is used. - When testing without the robot, rviz_basic is used.

|                       levels
|      00       |    01   |   02  |   03  |   04   |  05   |
| ---------------------packages----------------------------
|               |             motion stack
| ---------------------------------------------------------
|   rviz basic  |
| ---------------------------------------------------------
| dynamixel...  |
| ---------------------------------------------------------
| Maxon motr... |

All robots are different. You can easily override relevant parts of the code and use it like an API in which you inject your custom code. Examples and tools are provided for this purpose. This way, you do not need to create a new, complex ROS2 node to adapt to the quirks of your robot—just change what you need directly.

|                       levels
|      00       |    01   |   02  |   03  |   04   |  05   |
| ---------------------packages----------------------------
|               |             motion stack
| ---------------------------------------------------------
| Overrides for my robot  |                        |  Robot-Agnostic API
| ---------------------------------------------------------