Additional ICON Extensions
ICON Extensions API is not enabled by default.
Apart from the ICON Client API, the real-time control framework ICON offers additional extension points to extend its real-time control and hardware support capabilities. For most robot motion features, you can use existing skills or author a new skill that uses the ICON client. A custom skill cannot modify real-time control functions, but it can perform arbiratry motion planning (and other non-realtime operations) and build new state machines that combine existing real-time actions. In addition, there are two more interfaces to extend ICON for more sensor-based control and hardware driver features. Contrary to the ICON Client API, these more are more advanced interfaces, where implementations needs to be real-time safe so that they don't block the main control loop.
The ICON extensions programming interface is available in the https://github.com/intrinsic-ai/sdk/tree/main/intrinsic/icon/.
Custom actions
An ICON custom action is an advanced feature to modify and extend the robot control stack. A custom action is a C++ class that implements a new real-time robot control behavior. It can read sensor inputs in real-time, implement a custom control law, and send control signals. While a custom action is running, the ICON robot controller invokes functions on that action in every control cycle.
Follow the custom action tutorial to add new (sensor-based) motion control capabilities.
Note that you cannot run a custom action directly from the Flowstate Editor. Alternatively, you can write a custom skill that calls the custom action, and run that from the frontend.
Custom hardware modules
The hardware abstraction layer (HAL) of ICON is extensible by running custom hardware modules, which drive the connection to a new type of hardware. You can add support for new robotic hardware to ICON by implementing a custom hardware module that receives control setpoints and forwards them on a fieldbus or other physical connection.
Follow the custom hardware module tutorial to get started on adding new hardware support.
For defining custom geometry and kinematics, see the tutorial to Install custom robot kinematics.