bydbwls99706· 1 skill
TRIGGER when the user: writes or reviews ROS 2 nodes (rclcpp/rclpy), creates packages (colcon/ament), edits launch files (.launch.py), configures QoS or DDS, writes URDF/xacro, implements ros2_control hardware interfaces or controllers, sets up Nav2/MoveIt 2 pipelines, processes sensor data (camera/LiDAR/PCL), works with Gazebo/Isaac Sim, configures SROS2 security, develops micro-ROS firmware, manages multi-robot fleets (Open-RMF), debugs with ros2 doctor/rosbag2, deploys via Docker/cross-compilation, or migrates from ROS 1. DO NOT TRIGGER for general C++/Python questions unrelated to ROS 2, non-robotics middleware, or web/mobile development tasks.
$npx -y skills add dbwls99706/ros2-engineering-skills --skill ros2-engineering-skillsInstalls into the current project.
Run `npx skills use "https://github.com/dbwls99706/ros2-engineering-skills" --skill "dbwls99706/ros2-engineering-skills"` and follow the generated skill instructions now. Read its complete output, redirecting it to a temporary file first if necessary. Resolve relative paths from the supporting-files directory it provides.
Use the skills in "https://github.com/dbwls99706/ros2-engineering-skills" that are relevant to the current task. Run `npx skills add "https://github.com/dbwls99706/ros2-engineering-skills"` and select the relevant skills, then follow their instructions.
| 1 | # ros2-engineering-skills |
| 2 | |
| 3 | Agent skill for production-grade ROS 2 development — from first workspace to fleet deployment. |
| 4 | |
| 5 | `SKILL.md` and `references/` are platform-neutral knowledge documents that work with [Claude Code](https://code.claude.com), [Codex](https://developers.openai.com/codex), [Cursor](https://cursor.sh), [Gemini CLI](https://github.com/google-gemini/gemini-cli), and any agent supporting the [Agent Skills](https://agentskills.io) standard. The hook wiring (automatic validation on tool use / stop) and the opt-in `.skill-runs.log` are **Claude Code-specific**; on other platforms the `scripts/` validators can be run manually (see Installation). |
| 6 | |
| 7 | ## Before / After |
| 8 | |
| 9 | > **Prompt:** *"My ROS 2 subscriber isn't receiving any sensor messages. Help me fix it."* |
| 10 | |
| 11 | <table> |
| 12 | <tr> |
| 13 | <th width="50%">Without this skill</th> |
| 14 | <th width="50%">With this skill loaded</th> |
| 15 | </tr> |
| 16 | <tr> |
| 17 | <td> |
| 18 | |
| 19 | ```python |
| 20 | # "Check your topic name and make sure |
| 21 | # the publisher is running" |
| 22 | sub = node.create_subscription( |
| 23 | Image, '/camera/image_raw', |
| 24 | callback, 10) |
| 25 | ``` |
| 26 | |
| 27 | Generic advice — misses the real issue. |
| 28 | |
| 29 | </td> |
| 30 | <td> |
| 31 | |
| 32 | ```python |
| 33 | # Diagnoses QoS mismatch (DDS RxO rules): |
| 34 | # Sensor drivers default to BEST_EFFORT, |
| 35 | # but queue depth "10" implies RELIABLE. |
| 36 | from rclpy.qos import qos_profile_sensor_data |
| 37 | |
| 38 | sub = node.create_subscription( |
| 39 | Image, '/camera/image_raw', |
| 40 | callback, qos_profile_sensor_data) |
| 41 | # ^^^^^^^^^^^^^^^^^^^^^^ |
| 42 | # BEST_EFFORT + VOLATILE — matches sensor pub |
| 43 | ``` |
| 44 | |
| 45 | Identifies the root cause, explains DDS Request-vs-Offered semantics, and applies the correct `qos_profile_sensor_data` preset. |
| 46 | |
| 47 | </td> |
| 48 | </tr> |
| 49 | </table> |
| 50 | |
| 51 | > **Prompt:** *"Create a C++ driver package for my LiDAR sensor."* |
| 52 | |
| 53 | <table> |
| 54 | <tr> |
| 55 | <th width="50%">Without this skill</th> |
| 56 | <th width="50%">With this skill loaded</th> |
| 57 | </tr> |
| 58 | <tr> |
| 59 | <td> |
| 60 | |
| 61 | ```text |
| 62 | my_lidar_driver/ |
| 63 | ├── src/main.cpp # rclcpp::Node |
| 64 | ├── CMakeLists.txt |
| 65 | └── package.xml |
| 66 | ``` |
| 67 | |
| 68 | Bare `Node`, no lifecycle, no tests, no launch file, `ament_target_dependencies` (deprecated in Kilted). |
| 69 | |
| 70 | </td> |
| 71 | <td> |
| 72 | |
| 73 | ```text |
| 74 | my_lidar_driver/ |
| 75 | ├── include/my_lidar_driver/ |
| 76 | │ └── my_lidar_driver_node.hpp # LifecycleNode |
| 77 | ├── src/ |
| 78 | │ ├── my_lidar_driver_node.cpp # on_configure/activate/… |
| 79 | │ └── main.cpp |
| 80 | ├── launch/bringup.launch.py # auto-configure + activate |
| 81 | ├── config/params.yaml |
| 82 | ├── test/test_my_lidar_driver.cpp # gtest |
| 83 | ├── CMakeLists.txt # target_link_libraries |
| 84 | └── package.xml # format 3, Apache-2.0 |
| 85 | ``` |
| 86 | |
| 87 | LifecycleNode with managed transitions, launch file with auto-activation, gtest scaffolding, modern CMake (`target_link_libraries` over deprecated `ament_target_dependencies`), and distro-aware defaults. |
| 88 | |
| 89 | </td> |
| 90 | </tr> |
| 91 | </table> |
| 92 | |
| 93 | ## What this is |
| 94 | |
| 95 | A `SKILL.md`-based knowledge module that gives AI coding agents deep ROS 2 engineering expertise. Instead of a shallow cheat sheet, it provides: |
| 96 | |
| 97 | - **Decision frameworks** — when to use rclcpp vs rclpy, which QoS profile, lifecycle vs plain node |
| 98 | - **Progressive disclosure** — compact routing in `SKILL.md`, detailed patterns in `references/` |
| 99 | - **Full spectrum** — workspace setup through real-time tuning, Nav2, MoveIt 2, ros2_control, DDS configuration, cross-compilation, and CI/CD |
| 100 | - **Distro-aware** — explicit Humble / Jazzy / Kilted / Rolling differences with migration paths |
| 101 | - **Anti-pattern documentation** — what breaks in production and why |
| 102 | |
| 103 | ## How it differs from existing ROS 2 skills |
| 104 | |
| 105 | | Aspect | Typical ROS 2 skill | This project | |
| 106 | |---|---|---| |
| 107 | | Depth | Basic QoS + lifecycle intro | DDS vendor tuning, custom executors, intra-process zero-copy, type adapters | |
| 108 | | Scope | Single SKILL.md file | 23 reference files via progressive disclosure | |
| 109 | | Hardware | Mentioned in passing | ros2_control hardware interface patterns, serial/CAN/EtherCAT, controller chaining | |
| 110 | | Real-time | Not covered | PREEMPT_RT, realtime_tools, memory allocation, callback group strategies | |
| 111 | | Simulation | Mentioned in passing | Gazebo version matrix, gz_ros2_control, Isaac Sim, sim-to-real | |
| 112 | | Security | Not covered | SROS2, DDS security plugins, certificate management, supply chain | |
| 113 | | Embedded | Not covered | micro-ROS, rclc, XRCE-DDS, ESP32/STM32/RP2040 | |
| 114 | | Multi-robot | Not covered | Open-RMF, fleet adapters, DDS discovery at scale, NTP/PTP sync | |
| 115 | | Testing | "Use pytest" | launch_testing, gtest, industrial_ci, simulation-in-the-loop CI | |
| 116 | | Deployment | Not covered | Docker multi-stage, cross-compile, fleet OTA, Zenoh routing | |
| 117 | |
| 118 | ## Installation |
| 119 | |
| 120 | ### Claude Code |
| 121 | |
| 122 | ```bash |
| 123 | # From plugin marketplace (terminal) |
| 124 | claude plugin marketplace add dbwls99706/ros2-engineering-skills |
| 125 | claude plugin install ros2-engineering@ros2-engineering-skills |
| 126 | |
| 127 | # Or use slash commands (inside Claude Code) |
| 128 | /plugin marketplace add dbwls99706/ros2-engineering-skills |
| 129 | /plugin install ros2-engineering@ros2-engineering-skills |
| 130 | |
| 131 | # Or clone directly |
| 132 | git clone https://github.com/dbwls99706/ros2-engineering-skills.git ~/.claude/skills/ros2-engineering-skills |
| 133 | ``` |
| 134 | |
| 135 | ### Codex / Gemini CLI / OpenCode |
| 136 | |
| 137 | ```ba |