# Robot Motion Control Task
## Overview
**Robotmctask** is a comprehensive C++ library designed for robot motion control task development. It provides APIs that enable robot developers to build sophisticated robot applications with integrated AI inference engines and EtherCAT protocol support.
# Key Features:
- **PLCOpen Compliance:** Support for PLCOpen motion control function blocks
- **Multi-Task Support:** Concurrent handling of multiple motion control tasks
- **Real-Time Integration:** Seamless shared memory communication between real-time and non-real-time domains
- **AI-Powered Control:** Built-in inference engine support for intelligent motion control
- **Simulation Ready:** Comprehensive motion control simulation capabilities
## Architecture Overview
The architecture is as following:
Two key blocks have been introduced to support the core architecture:
* **libectask** is a dynamic library that provides a set of public APIs for EtherCAT real-time task creation. Key capabilities include:
- **EtherCAT Integration:** Creates motion function blocks to operate EtherCAT slaves using ENI configurations
- **Network Topology Support:** Handles slave configurations and network topology definitions
- **Flexible Memory Management:** Supports custom shared memory callbacks for data restructuring between real-time and non-real-time domains
- **AI Pipeline Integration:** Enables AI inference callback registration within real-time tasks
* **libinference** is a shared library offering advanced inference capabilities with:
- **Modern C++ Interface:** New C++ classes for streamlined inference implementation
- **Reinforcement Learning Support:** Integrated RL classes optimized for robotic applications. To facilitate quick demonstrations of code functionality, provide a stable-standing ONNX model based on real robot. This model maintains whole-body balance by controlling the lower limbs while the upper body performs hand movements. Such a model enables humanoid robots to remain stable through reinforcement learning when the upper limbs are engaged in VLA tasks.
- **Performance Analytics:** Built-in statistical collection for performance monitoring
- **Intel OpenVINO integration:** Default inference engine with extensible architecture
- **Extensible Design:** Bases classes enabling custom AI model development
## Network Topology
The following diagram illustrates a typical fieldbus topology for humanoid robot applications:
## Getting Started
### Requirements
The software runs on standard PCs or servers. Since it is primarily developed in C++, porting to other operating systems is straightforward.
### Running
Please check [README](./../README.md) file for details.
### Examples
One example using Robot Motion Control Task is provided.
* [mc_rl_sample](./../examples/mc_rl_sample.cpp):
A comprehensive demonstration showcasing:
- **Multi-Topology Configuration:** Robot task setup with multiple topologies using different ENI files
- **Distributed Control:** Three separate ectasks controlling distinct EtherCAT topologies:
- Left/Right Arm Control
- Leg control systems
- **Dual Arm Integration:** Joint state publishing via shared memory for VLA(Vision-Language-Action) models or simulator integration
- **Custom Motion Algorithms:** Leg control with registered callbacks for customized motion algorithms and inference pipelines
## License
The source code is licensed under Apache License . See [LICENSE](./../LICENSE) file for details.