AgentStack
Browse Sign in
Browse Why AgentStack Sell Docs
Sign in
SKILL verified MIT Self-run

Ros2 Control

skill-leehyunbin0131-claude-ros2-skills-ros2-control · by Leehyunbin0131

ros2_control: controller manager, hardware interfaces, URDF ros2_control tags, controller spawners.

No reviews yet
0 installs
14 views
0.0% view→install

Install

$ agentstack add skill-leehyunbin0131-claude-ros2-skills-ros2-control

✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.

Security review

✓ Passed

No issues found. Passed automated security review. · v0.1.0 How review works →

  • Prompt-injection patterns
  • Secret / credential exfiltration
  • Dangerous shell & filesystem operations
  • Untrusted network calls
  • Known-malicious package signatures

What it can access

  • Network access No
  • Filesystem access No
  • Shell / process execution No
  • Environment & secrets No
  • Dynamic code execution No

From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.

View the full security report →

Verified badge

Passed review? Show it. Paste this badge into your README, it links to the public security report.

AgentStack Verified badge Links to your public security report.
[![AgentStack Verified](https://agentstack.voostack.com/badges/verified.svg)](https://agentstack.voostack.com/security/report/skill-leehyunbin0131-claude-ros2-skills-ros2-control)

Reliability & compatibility

Security review passed
0 installs to date
no reviews yet
18d ago

Declared compatibility

Claude CodeClaude Desktop

Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.

Preview Execution monitoring

We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.

How agent discovery & health will work →
Are you the author of Ros2 Control? Claim this listing to set pricing, connect Stripe payouts, and keep 70% of every sale.
Sign up to claim

About

ros2_control Development Instructions (Ubuntu 24.04 LTS & ROS 2 Jazzy)

1. Core Principles & Architecture

  • Target OS & ROS Distro: Ubuntu 24.04 LTS & ROS 2 Jazzy Jalisco.
  • Hardware Abstraction: ros2_control decouples robot hardware drivers (hardware_interface::SystemInterface, ActuatorInterface, SensorInterface) from controller logic (diff_drive_controller, joint_trajectory_controller).
  • Zero-Hallucination Policy: Always verify C++ hardware interface class inheritance, state/command interface names (position, velocity, effort), and URDF `` XML tags against official documentation.

2. Official Documentation Catalog

A. Master Documentation Portals

  • ros2_control Main Documentation: https://control.ros.org/jazzy/index.html
  • Getting Started Guide: https://control.ros.org/jazzy/doc/getting_started/getting_started.html
  • ros2_control Core Architecture: https://control.ros.org/jazzy/doc/ros2_control/doc/index.html
  • ros2_controllers Index: https://control.ros.org/jazzy/doc/ros2_controllers/doc/controllers_index.html
  • Official ros2_control Demos: https://control.ros.org/jazzy/doc/ros2_control_demos/doc/index.html
  • Simulation Integration (Gazebo / Ignition): https://control.ros.org/jazzy/doc/simulators/simulators.html

3. Key Concepts & Patterns

A. URDF `` Tag Structure


  
    gz_ros2_control/GazeboSimSystem
  
  
    
      -10
      10
    
    
    
  

B. Controller Spawning via Launch

joint_state_broadcaster_spawner = Node(
    package="controller_manager",
    executable="spawner",
    arguments=["joint_state_broadcaster", "--controller-manager", "/controller_manager"],
)

diff_drive_spawner = Node(
    package="controller_manager",
    executable="spawner",
    arguments=["diff_drive_controller", "--controller-manager", "/controller_manager"],
)

4. Symptom -> Root Cause -> Action

| Symptom | Likely root cause | Action | | :--- | :--- | :--- | | Spawner times out waiting for /controller_manager | controllermanager not running, wrong namespace, or use_sim_time mismatch delaying clock | Check ros2 node list for controllermanager; pass --controller-manager with the actual namespace | | Controller activation fails with resource/interface conflict | Two controllers claim the same command_interface | ros2 control list_hardware_interfaces — check which interfaces are claimed; deactivate the conflicting controller | | /joint_states silent, robot model gray in RViz | joint_state_broadcaster never spawned (it is NOT automatic) | Spawn joint_state_broadcaster before other controllers | | Controller loads then fails to configure | Params YAML not passed to controllermanager, or controller type string wrong | Verify params file reaches the ros2_control_node/gz_ros2_control node; check type: matches installed plugin (ros2 control list_controller_types) | | Hardware activates but robot doesn't move on commands | Command interface names in URDF ` don't match what the controller expects (velocity vs position), or hardware write() not implemented | Compare ros2 control listhardwareinterfaces vs controller's required interfaces | | Odometry from diffdrivecontroller drifts vs real distance | wheelradius / wheelseparation don't match the physical chassis | Measure the real chassis; verify with scripts/checkodom_direction.py` after fixing | | Robot drives backward on forward command, logs look fine | Wheel joint axis flipped in URDF, or motor polarity inverted in hardware interface | Fix sign at the hardware interface or joint axis — never patch it in application code |

5. Calibration Baselines (diff_drive_controller)

Real hardware never matches CAD — measure, then use the built-in calibration knobs instead of fudging geometry:

  1. wheel_radius: drive a measured straight line (e.g. 2.0 m by tape). Reported/actual ratio -> correct via left_wheel_radius_multiplier / right_wheel_radius_multiplier (baseline 1.0).
  2. wheel_separation: rotate the robot exactly 5 full turns in place; error in reported yaw -> correct via wheel_separation_multiplier (baseline 1.0). Tire deformation under load makes the effective value differ from the measured chassis.
  3. Re-verify after every tire/load change with scripts/check_odom_direction.py; straight-line drift to one side usually means the two radius multipliers need to differ slightly.

Source & license

This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.

Install and usage instructions live in the source repository linked above.

Reviews

No reviews yet, be the first.

Versions

  • v0.1.0 Imported from the upstream source.