This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
ROS2 Humble multi-workspace repository for Autonomous Mobile Robots (AMRs) and robotic arm manipulators. Supports Isaac Sim/Lab/ROS for simulation-to-reality deployment. Targets amd64 (simulation+real) and arm64 (real only).
# After clone, pull, or branch switch - ALWAYS run this first:
./scripts/post_install.sh
# Force mode if files conflict:
./scripts/post_install.sh -f
# Build and run a workspace:
cd <workspace_name>/docker
docker compose build
docker compose up -d
docker compose exec <service_name> bash
# Pull pre-built images (faster than building):
cd <workspace_name>/docker
docker compose pull
# Create a new workspace:
./scripts/create_workspace.sh <new_workspace_name>
# Run linting tests:
./tests/test_all.shEach workspace is independent and follows this pattern:
docker/compose.yaml- Primary build/run configuration with module argsdocker/Dockerfile- Multi-arch image definition (referencesmodules/scripts).devcontainer/- VS Code Dev Container configurationsrc/- ROS2 packages (colcon builds these inside container)
Shared install scripts (e.g., install_ros.sh, install_isaac_sim.sh) that get hard-linked into workspace docker/modules/ directories via post_install.sh. This enables Docker build context to access shared scripts.
Modules are enabled/disabled via build.args in compose.yaml:
args:
CARTOGRAPHER: "YES" # or "" to disable
RTABMAP: "YES"
ISAAC_SIM_VERSION: "5.1.0" # or "" to skip
ISAAC_LAB_VERSION: "2.3.2"template_ws/- Base workspace used as reference for creating new workspacesdocs/- MkDocs documentation source (each workspace hasdocs/<workspace-name>/)scripts/setup_docker_modules_link.sh- Creates hard links for docker modulesscripts/setup_docker_volume.sh- Sets up shared Docker volumes
- Run
./scripts/post_install.shafter any repo change affecting docker_modules - Set
export USER_UID=$(id -u)in host shell for container user permissions - Workspaces share Docker volumes:
ros2-gazebo-cache,ros2-isaac-sim-cache,ros2-isaac-ros-assets template_wsDocker cache is shared by other workspaces to save build time
The tests/ directory contains Python linting scripts:
lint_compose.py- Validates compose.yaml fileslint_dockerfile.py- Validates Dockerfileslint_comp_template.py- Checks workspace compliance with templatelint_filenames.py- Validates file naming conventionslint_gitignore.py- Checks gitignore consistencylint_workflows.py- Validates GitHub Actions workflowslint_mkdocs.py- Validates documentation structurelint_readme.py- Checks README files
Set IGNORED_WORKSPACES env var to skip specific workspaces during linting.