ros2-controllisted
Install: claude install-skill Leehyunbin0131/claude-ros2-skills
# ros2_control Development Instructions (Ubuntu 24.04 LTS & ROS 2 Jazzy)
## 1. Architecture
`ros2_control` decouples hardware drivers (`hardware_interface::SystemInterface`, `ActuatorInterface`, `SensorInterface`) from controller logic (`diff_drive_controller`, `joint_trajectory_controller`). Interface names are exactly `position`, `velocity`, `effort` — verify which ones your controller requires before writing the URDF.
## 2. Documentation Entry Points
| For | Entry point |
| :--- | :--- |
| Everything (Jazzy docs root — architecture, getting started, demos) | `https://control.ros.org/jazzy/index.html` |
| Per-controller parameter reference | `https://control.ros.org/jazzy/doc/ros2_controllers/doc/controllers_index.html` |
## 3. Key Concepts & Patterns
### A. URDF `<ros2_control>` Tag Structure
```xml
<ros2_control name="RobotSystem" type="system">
<hardware>
<plugin>gz_ros2_control/GazeboSimSystem</plugin>
</hardware>
<joint name="left_wheel_joint">
<command_interface name="velocity">
<param name="min">-10</param>
<param name="max">10</param>
</command_interface>
<state_interface name="position"/>
<state_interface name="velocity"/>
</joint>
</ros2_control>
```
### B. Controller Spawning via Launch
```python
joint_state_broadcaster_spawner = Node(
package="controller_manager",
executable="spawner",
arguments=["joint_state_broadcaster", "--controller-manager", "/controller_manager"],
)
diff_drive_spawner = Node(