robot-bringup

Configures systemd services, layered launch files, and udev rules for ROS2 robot startup.

Updated Aug 16, 2026
One-click install
npx skills add https://github.com/three1324/yeonjinautomotive --skill robot-bringup-three1324
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: robot-bringup
Source: https://github.com/three1324/yeonjinautomotive/tree/main/.claude/skills/robot-bringup
Command: npx skills add https://github.com/three1324/yeonjinautomotive --skill robot-bringup-three1324

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Getting a full ROS2 robot stack to start reliably on boot is error-prone: devices enumerate unpredictably, nodes start before their dependencies exist, and systemd does not source shell environments. This Skill provides production patterns for boot-time bringup of ROS2 systems on robot onboard computers. ## Core Features & Use Cases - systemd Service Units: Templates for running ROS2 launch files as long-running services with watchdog support, restart policies, resource limits via cgroups, and environment files instead of .bashrc. - Layered Launch Composition: Hardware, driver, perception, and application launch layers composed into a single bringup entry point with conditional loading for simulation vs. real hardware and robot variants. - Ordered Startup & Health Checks: Device-check scripts, wait-for-topic utilities, and lifecycle manager orchestration to eliminate boot-time race conditions. - udev Rules: Deterministic device naming for cameras, LiDARs, IMUs, and serial devices based on vendor IDs, serial numbers, and USB port paths. - Use Case: Configure a Jetson-based robot so that on power-up, udev assigns stable device names, systemd starts drivers first, waits for health checks, then brings up perception and navigation with automatic restart on failure. ## Quick Start Ask the assistant to write a systemd service unit and layered launch files that start my ROS2 Humble robot stack automatically on boot with health checks and watchdog monitoring.

Frequently Asked Questions about robot-bringup

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I start a ROS2 launch file automatically on boot with systemd?

Create a systemd service unit that uses /bin/bash to source /opt/ros/<distro>/setup.bash and your workspace setup.bash, then exec ros2 launch. Store environment variables like ROS_DOMAIN_ID and RMW_IMPLEMENTATION in an EnvironmentFile since systemd does not load .bashrc.

How to write udev rules for stable camera and LiDAR device names?

Match devices by idVendor, idProduct, serial number, or USB port path (KERNELS) and assign a SYMLINK like /dev/robot/lidar. Use udevadm info --attribute-walk to find attributes, then reload with udevadm control --reload-rules and udevadm trigger.

Why does my ROS2 node fail at boot but work when started manually?

Boot failures usually come from missing environment sourcing, devices not yet enumerated, or nodes starting before dependencies. Fix this with After=/Requires= service ordering, ExecStartPre device-check scripts, and wait-for-topic or lifecycle manager orchestration.

Does this approach support ROS2 Humble, Iron, and Jazzy?

Yes, the systemd and launch patterns apply to ROS2 Humble, Iron, and Jazzy on Ubuntu 22.04 and 24.04. The ROS_DISTRO environment variable in the env file selects which distribution's setup.bash gets sourced.

How do I prevent a broken ROS2 service from restarting forever?

Use StartLimitIntervalSec and StartLimitBurst in the unit to cap restart attempts, for example 5 attempts within 120 seconds. After the limit, the unit enters a failed state and can trigger an alert via OnFailure, then be retried with systemctl reset-failed.

How do I configure CycloneDDS for multi-machine ROS2 discovery?

Set RMW_IMPLEMENTATION=rmw_cyclonedds_cpp and CYCLONEDDS_URI pointing to a CycloneDDS XML config in the environment file, with ROS_LOCALHOST_ONLY=0. Assign each robot a unique ROS_DOMAIN_ID to avoid cross-talk between robots on the same network.