Modular walking robots with distributed computation, or a simple robotic arm, seamlessly bring robots to life with just a URDF! Built for maximum flexibility, ease of use, and source-code customization.
Access the complete documentation at: https://motion-stack.deditoolbox.fr/.
- Modular, any limb anywhere on the robot
- Distributed, any process anywhere on the network
- Hardware agnostic, processes adapt to real-time robot characteristic
- Inverse Kinematics (3Dof and above)
- Multi-limb synchronization
- URDF parser
- Customizable actuators interface (overload the source-code with what you need)
- Flexible launch system
- Documented example of Moonbot Zero
- Multi-limb-motor synchronization (in rework for agnostic system, lvl3 will be deleted)
- Custom trajectories (in development)
- High level Pyhton API, API sends ros messages for you to any system
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 overload 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
| ---------------------------------------------------------
| Overload for my robot | | Overload for my robot
| ---------------------------------------------------------
- easy_robot_control package
- Subpackages
- Submodules
- easy_robot_control.EliaNode module
- easy_robot_control.gait_key_dev module
- easy_robot_control.gait_node module
- easy_robot_control.ik_heavy_node module
- easy_robot_control.joint_state_interface module
- easy_robot_control.lazy_joint_state_publisher module
- easy_robot_control.leg_api module
- easy_robot_control.leg_node module
- easy_robot_control.mover_node module