library/specializations/robotics-simulation/skills/ros-integration/SKILL.md
Deep integration with ROS/ROS2 middleware for node development, launch files, package management, and robot communication. Execute ros2 commands, create and validate packages, configure publishers/subscribers/services/actions, and debug topic connectivity.
npx skillsauth add a5c-ai/babysitter ros-integrationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are ros-integration - a specialized skill for ROS/ROS2 middleware integration, providing deep capabilities for robot software development, node creation, and system configuration.
This skill enables AI-powered ROS/ROS2 development including:
Generate complete ROS2 packages with proper structure:
# Create a new ROS2 package
ros2 pkg create --build-type ament_python my_robot_pkg \
--dependencies rclpy std_msgs sensor_msgs geometry_msgs
# For C++ packages
ros2 pkg create --build-type ament_cmake my_robot_cpp_pkg \
--dependencies rclcpp std_msgs sensor_msgs
my_robot_pkg/
├── my_robot_pkg/
│ ├── __init__.py
│ ├── my_node.py
│ └── utils/
├── launch/
│ └── robot_launch.py
├── config/
│ └── params.yaml
├── resource/
│ └── my_robot_pkg
├── test/
├── package.xml
├── setup.py
└── setup.cfg
Generate Python launch files for ROS2:
from launch import LaunchDescription
from launch_ros.actions import Node
from launch.actions import DeclareLaunchArgument
from launch.substitutions import LaunchConfiguration
from ament_index_python.packages import get_package_share_directory
import os
def generate_launch_description():
# Get package share directory
pkg_share = get_package_share_directory('my_robot_pkg')
# Declare launch arguments
use_sim_time = DeclareLaunchArgument(
'use_sim_time',
default_value='false',
description='Use simulation time'
)
# Node configuration
robot_node = Node(
package='my_robot_pkg',
executable='my_node',
name='robot_controller',
output='screen',
parameters=[
os.path.join(pkg_share, 'config', 'params.yaml'),
{'use_sim_time': LaunchConfiguration('use_sim_time')}
],
remappings=[
('/cmd_vel', '/robot/cmd_vel'),
('/odom', '/robot/odom')
]
)
return LaunchDescription([
use_sim_time,
robot_node
])
Create ROS2 nodes with publishers, subscribers, services, and actions:
import rclpy
from rclpy.node import Node
from rclpy.qos import QoSProfile, ReliabilityPolicy, HistoryPolicy
from std_msgs.msg import String
from geometry_msgs.msg import Twist
from sensor_msgs.msg import LaserScan
class RobotController(Node):
def __init__(self):
super().__init__('robot_controller')
# Declare parameters
self.declare_parameter('max_speed', 1.0)
self.declare_parameter('safety_distance', 0.5)
# QoS profile for sensor data
sensor_qos = QoSProfile(
reliability=ReliabilityPolicy.BEST_EFFORT,
history=HistoryPolicy.KEEP_LAST,
depth=10
)
# Publishers
self.cmd_vel_pub = self.create_publisher(
Twist, '/cmd_vel', 10
)
# Subscribers
self.laser_sub = self.create_subscription(
LaserScan, '/scan', self.laser_callback, sensor_qos
)
# Timer for control loop
self.timer = self.create_timer(0.1, self.control_loop)
self.get_logger().info('Robot controller initialized')
def laser_callback(self, msg):
# Process laser scan data
self.latest_scan = msg
def control_loop(self):
# Main control logic
max_speed = self.get_parameter('max_speed').value
# ... control logic ...
def main(args=None):
rclpy.init(args=args)
node = RobotController()
rclpy.spin(node)
node.destroy_node()
rclpy.shutdown()
if __name__ == '__main__':
main()
Generate custom message definitions:
# msg/RobotStatus.msg
std_msgs/Header header
string robot_name
float64 battery_level
bool is_moving
geometry_msgs/Pose current_pose
float64[] joint_positions
Service definition:
# srv/SetMode.srv
string mode
---
bool success
string message
Action definition:
# action/Navigate.action
# Goal
geometry_msgs/PoseStamped target_pose
float64 timeout
---
# Result
bool success
string message
float64 elapsed_time
---
# Feedback
float64 distance_remaining
float64 estimated_time_remaining
Configure Quality of Service policies for different use cases:
from rclpy.qos import QoSProfile, QoSReliabilityPolicy, QoSHistoryPolicy, QoSDurabilityPolicy
# Sensor data (high frequency, lossy)
sensor_qos = QoSProfile(
reliability=QoSReliabilityPolicy.BEST_EFFORT,
history=QoSHistoryPolicy.KEEP_LAST,
depth=5
)
# Control commands (reliable)
control_qos = QoSProfile(
reliability=QoSReliabilityPolicy.RELIABLE,
history=QoSHistoryPolicy.KEEP_LAST,
depth=10
)
# Parameters and configuration (transient local)
config_qos = QoSProfile(
reliability=QoSReliabilityPolicy.RELIABLE,
durability=QoSDurabilityPolicy.TRANSIENT_LOCAL,
history=QoSHistoryPolicy.KEEP_LAST,
depth=1
)
Debug ROS2 systems:
# List all nodes
ros2 node list
# Get node info
ros2 node info /robot_controller
# List topics
ros2 topic list -t
# Echo topic
ros2 topic echo /cmd_vel
# Topic bandwidth/frequency
ros2 topic hz /scan
ros2 topic bw /camera/image_raw
# Service list and call
ros2 service list
ros2 service call /set_mode my_robot_pkg/srv/SetMode "{mode: 'autonomous'}"
# Parameter operations
ros2 param list /robot_controller
ros2 param get /robot_controller max_speed
ros2 param set /robot_controller max_speed 2.0
# TF2 debugging
ros2 run tf2_tools view_frames
ros2 run tf2_ros tf2_echo base_link odom
This skill can leverage the following MCP servers for enhanced capabilities:
| Server | Description | Installation | |--------|-------------|--------------| | ros-mcp-server (robotmcp) | ROS/ROS2 bridge via MCP | GitHub | | ros2-mcp-server (kakimochi) | Python-based ROS2 MCP integration | Glama | | roba-labs-mcp | ROS documentation and learning resources | Glama |
This skill integrates with the following processes:
robot-system-design.js - System architecture with ROS nodesrobot-calibration.js - Calibration node developmentgazebo-simulation-setup.js - ROS-Gazebo integrationnav2-navigation-setup.js - Navigation stack configurationmulti-robot-coordination.js - Multi-robot ROS communicationWhen executing operations, provide structured output:
{
"operation": "create-package",
"packageName": "my_robot_pkg",
"buildType": "ament_python",
"status": "success",
"artifacts": [
"my_robot_pkg/package.xml",
"my_robot_pkg/setup.py",
"my_robot_pkg/my_robot_pkg/__init__.py"
],
"nextSteps": [
"Add node implementation",
"Create launch file",
"Build with colcon build"
]
}
development
Model documentation skill for generating model cards following Google's model card framework.
development
MLflow integration skill for experiment tracking, model registry, and artifact management. Enables LLMs to log experiments, compare runs, manage model lifecycle, and retrieve artifacts through the MLflow API.
data-ai
LIME-based local explanation skill for individual predictions across tabular, text, and image data.
devops
Kubeflow Pipelines skill for ML workflow orchestration, component management, and Kubernetes-native ML.