What problem does it solve? Writing a ros2_control controller from scratch involves many framework-specific decisions—choosing between ControllerInterface and ChainableControllerInterface, configuring command/state interfaces, keeping update() real-time safe, generating parameters, and exporting the pluginlib plugin—and mistakes in any of these cause runtime failures that are hard to diagnose. ## Core Features & Use Cases - Base-class selection guidance: Decision table mapping your goal (command writer, chainable controller, read-only broadcaster) to the correct base class and overrides. - Complete package skeleton: Header, interface configuration, lifecycle callbacks, RT-safe update(), generate_parameter_library YAML, pluginlib XML, CMakeLists.txt, and the PLUGINLIB_EXPORT_CLASS macro. - Testing and pitfalls: Mock-interface unit test strategy plus a checklist of common errors like non-RT-safe work in update() or claiming interfaces in on_configure. - Use Case: You need a custom velocity controller for a new actuator. Follow the skeleton to produce a compilable plugin package with generated parameters, correct interface claims, and a passing unit test. ## Quick Start Ask the AI to create a new ros2_control controller package for your joint using the ros2_controller_creation skill.