← ClaudeAtlas

ros1-developmentlisted

Best practices, design patterns, and common pitfalls for ROS1 (Robot Operating System 1) development. Use this skill when building ROS1 nodes, packages, launch files, or debugging ROS1 systems. Trigger whenever the user mentions ROS1, catkin, rospy, roscpp, roslaunch, roscore, rostopic, tf, actionlib, message types, services, or any ROS1-era robotics middleware. Also trigger for migrating ROS1 code to ROS2, maintaining legacy ROS1 systems, or building ROS1-ROS2 bridges. Covers catkin workspaces, nodelets, dynamic reconfigure, pluginlib, and the full ROS1 ecosystem.
vicky23383/robotics-agent-skills · ★ 5 · AI & Automation · score 77
Install: claude install-skill vicky23383/robotics-agent-skills
# ROS1 Development Skill ## When to Use This Skill - Building or maintaining ROS1 packages and nodes - Writing launch files, message types, or services - Debugging ROS1 communication (topics, services, actions) - Configuring catkin workspaces and build systems - Working with tf/tf2 transforms, URDF, or robot models - Using actionlib for long-running tasks - Optimizing nodelets for zero-copy transport - Planning ROS1 → ROS2 migration ## Core Architecture Principles ### 1. Node Design **Single Responsibility Nodes**: Each node should do ONE thing well. Resist the temptation to build monolithic "do-everything" nodes. ```python # BAD: Monolithic node class RobotNode: def __init__(self): self.sub_camera = rospy.Subscriber('/camera/image', Image, self.camera_cb) self.sub_lidar = rospy.Subscriber('/lidar/points', PointCloud2, self.lidar_cb) self.pub_cmd = rospy.Publisher('/cmd_vel', Twist, queue_size=10) self.pub_map = rospy.Publisher('/map', OccupancyGrid, queue_size=1) # This node does perception, planning, AND control # GOOD: Decomposed nodes class PerceptionNode: # Fuses sensor data → publishes /obstacles class PlannerNode: # Subscribes /obstacles → publishes /path class ControllerNode: # Subscribes /path → publishes /cmd_vel ``` **Node Initialization Pattern**: ```python #!/usr/bin/env python import rospy from std_msgs.msg import String class MyNode: def __init__(self): rospy.init_node('my_node', anonym