[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-79938":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":15,"contributorsCount":15,"subscribersCount":15,"size":15,"stars1d":15,"stars7d":15,"stars30d":15,"stars90d":15,"forks30d":15,"starsTrendScore":15,"compositeScore":16,"rankGlobal":10,"rankLanguage":10,"license":17,"archived":18,"fork":18,"defaultBranch":19,"hasWiki":20,"hasPages":18,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":22,"readmeContent":23,"aiSummary":24,"trendingCount":15,"starSnapshotCount":15,"syncStatus":25,"lastSyncTime":26,"discoverSource":27},79938,"RoboCopilot-X","NeodyD\u002FRoboCopilot-X","NeodyD","An open-source AI copilot built specifically for the messy, multi-stack reality of modern robotics development.","",null,"Python",82,16,6,0,3.69,"Other",false,"main",true,[],"2026-06-12 02:03:55","\u003Cdiv align=\"center\">\n\n# 🤖 RoboCopilot-X\n\n**An LLM-powered robotics development copilot for ROS2 and embodied AI workflows.**\n\n[![License: Apache 2.0](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLicense-Apache_2.0-blue.svg)](LICENSE)\n[![Python](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fpython-3.10+-blue.svg)](https:\u002F\u002Fwww.python.org)\n[![Node](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fnode-20.x-brightgreen.svg)](https:\u002F\u002Fnodejs.org)\n[![Next.js](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FNext.js-14-black.svg)](https:\u002F\u002Fnextjs.org)\n[![FastAPI](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FFastAPI-0.110-009688.svg)](https:\u002F\u002Ffastapi.tiangolo.com)\n[![LangGraph](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FLangGraph-0.0.40-orange.svg)](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flanggraph)\n[![ROS2](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FROS2-Humble-22314E.svg)](https:\u002F\u002Fdocs.ros.org\u002Fen\u002Fhumble\u002F)\n[![Docker](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FDocker-ready-2496ED.svg)](https:\u002F\u002Fwww.docker.com)\n[![CI](https:\u002F\u002Fgithub.com\u002Frobocopilot\u002Frobocopilot-x\u002Factions\u002Fworkflows\u002Fci.yml\u002Fbadge.svg)](.github\u002Fworkflows\u002Fci.yml)\n[![PRs Welcome](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002FPRs-welcome-brightgreen.svg)](CONTRIBUTING.md)\n[![Discord](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdiscord-join-7289DA.svg)](https:\u002F\u002Fdiscord.gg\u002Frobocopilot)\n\n*Think Cursor + LeRobot + OpenDevin — purpose-built for robotics engineers.*\n\n[Quickstart](#-quickstart) • [Features](#-features) • [Architecture](#-architecture) • [API](#-api-reference) • [Docs](docs\u002F) • [Roadmap](ROADMAP.md) • [Contributing](CONTRIBUTING.md)\n\n![Workspace Screenshot](docs\u002Fassets\u002Fscreenshot-workspace.png)\n\n> The screenshot above shows the main workspace: sidebar for generator selection, file tree for artifacts, and streaming chat with Monaco code preview.\n\n\u003C\u002Fdiv>\n\n---\n\n## 🌟 Overview\n\n**RoboCopilot-X** is an open-source AI copilot built specifically for the messy, multi-stack reality of modern robotics development. It turns natural language into production-ready ROS2 nodes, MoveIt2 motion plans, Nav2 behavior trees, URDF descriptions, and Isaac Sim scene templates — while keeping the engineer firmly in the loop.\n\nUnlike generic code assistants, RoboCopilot-X understands:\n\n- **ROS2 node lifecycles**, QoS, executors, and message topology\n- **MoveIt2 planning groups, end-effectors, and pipeline configurations**\n- **Nav2 behavior trees, costmaps, and recovery behaviors**\n- **URDF\u002FXacro semantics**, joint limits, inertials, and collision geometry\n- **Isaac Sim USD prim hierarchies**, articulations, and sensor scaffolding\n- **Embodied AI pipelines** (VLA models, teleop data, policy rollouts)\n\nIt is designed to feel like a true engineering partner — not a chatbot wrapper.\n\n---\n\n## ✨ Features\n\n| # | Feature | Description | Status |\n|---|---------|-------------|--------|\n| 1 | 🧩 **ROS2 Node Generator** | Generate complete ament_python packages: `node.py`, `setup.py`, `package.xml`, `launch.py` | ✅ Stable |\n| 2 | 🚀 **Launch File Composer** | Compose multi-node ROS2 launch files with parameter overrides & namespacing | ✅ Stable |\n| 3 | 🦾 **MoveIt2 Task Generator** | Scaffold pick-and-place, Cartesian path, and constraint-based planning tasks | ✅ Stable |\n| 4 | 🦴 **URDF Assistant** | Translate natural language into URDF\u002FXacro snippets (links, joints, inertials) | ✅ Stable |\n| 5 | 🌍 **Isaac Sim Scaffold** | Generate Isaac Sim Python scene templates with articulations & sensors | ✅ Stable |\n| 6 | 🧭 **Nav2 Behavior Tree Generator** | Compose Nav2 BTs with patrol, dock, recovery branches | ✅ Stable |\n| 7 | 🔍 **Codebase Explainer** | Upload ROS2 workspaces and get architecture-level explanations | ✅ Stable |\n| 8 | 💬 **Streaming Chat Workspace** | Cursor-style multi-panel workspace with Monaco editor, file tree, streaming LLM output | ✅ Stable |\n| 9 | 🧠 **Agent Tooling** | LangGraph-based planner\u002Fexecutor with tool calling for codegen, validation, lint | ✅ Stable |\n| 10 | 🔌 **OpenAI-compatible Backend** | Works with OpenAI, Azure, Ollama, vLLM, Together, DeepSeek, Qwen | ✅ Stable |\n| 11 | 🧪 **Sim-in-the-loop validation** | Optional Gazebo\u002FIsaac smoke tests for generated nodes | 🚧 Beta |\n| 12 | 📦 **VLA Policy Toolkit** | Adapters for OpenVLA \u002F LeRobot policy rollouts | 🔜 Planned |\n\n---\n\n## 🏛️ Architecture\n\n```\n┌──────────────────────────────────────────────────────────────────────────┐\n│                          RoboCopilot-X Architecture                       │\n└──────────────────────────────────────────────────────────────────────────┘\n\n   ┌───────────────────────┐         ┌──────────────────────────┐\n   │   Next.js Frontend    │  HTTP   │     FastAPI Backend      │\n   │  (Monaco \u002F shadcn)    │ ◄────► │   \u002Fapi\u002Fv1\u002F{chat,gen,...} │\n   │  - Workspace UI       │  SSE    │  - Auth & rate limiting  │\n   │  - File tree, chat    │         │  - Streaming responses   │\n   └──────────┬────────────┘         └────────────┬─────────────┘\n              │                                   │\n              │                                   ▼\n              │                       ┌────────────────────────┐\n              │                       │   Agent Orchestrator    │\n              │                       │   (LangGraph + Tools)   │\n              │                       │  Planner → Executor →   │\n              │                       │  Critic → Validator     │\n              │                       └────────────┬───────────┘\n              │                                    │\n              │           ┌────────────────────────┼────────────────────────┐\n              │           ▼                        ▼                        ▼\n              │  ┌────────────────┐      ┌────────────────┐      ┌────────────────┐\n              │  │ ROS2 Generator │      │ MoveIt2\u002FNav2   │      │  Isaac Sim     │\n              │  │  (jinja2)      │      │  Generator     │      │  Generator     │\n              │  └───────┬────────┘      └────────┬───────┘      └────────┬───────┘\n              │          ▼                        ▼                       ▼\n              │   ros_templates\u002F          ros_templates\u002F           isaac_templates\u002F\n              │\n              ▼\n       Workspace Artifacts (downloadable zip \u002F mounted \u002Fworkspace)\n```\n\nSee [`docs\u002Farchitecture.md`](docs\u002Farchitecture.md) for a deeper dive.\n\n---\n\n## 🧰 Tech Stack\n\n| Layer | Technology | Notes |\n|-------|-----------|-------|\n| **Backend** | FastAPI + Uvicorn | Async API server with SSE streaming |\n| **LLM Client** | httpx + tenacity | OpenAI-compatible, retry on 429\u002F5xx |\n| **Agent Loop** | LangGraph | planner → executor → critic → validator loop |\n| **Codegen** | Jinja2 | Two-phase: LLM extracts spec → templates render artifacts |\n| **Frontend** | Next.js 14 + shadcn\u002Fui | Dark-first workspace with Monaco editor |\n| **Editor** | Monaco | In-browser code preview with syntax highlighting |\n| **Streaming** | SSE (sse-starlette) | Chat + generation results streamed to client |\n| **Serialization** | Pydantic v2 | Strict schemas (`extra=\"forbid\"`), no hallucinated keys |\n| **Templates** | ros_templates\u002F + isaac_templates\u002F | ROS2, MoveIt2, Nav2, URDF, Isaac Sim |\n| **Validation** | ruff + black + mypy --strict | Backend linting; ESLint + Prettier on frontend |\n| **Container** | Docker Compose | Backend + frontend, shared workspace volume |\n\n---\n\n## 📁 Project Structure\n\n```\nrobocopilot-x\u002F\n├── agents\u002F                    # LangGraph agent loop (planner\u002Fexecutor\u002Fcritic\u002Fvalidator)\n│   ├── graph.py               # Graph wiring & routing logic\n│   ├── nodes.py               # Node implementations (planner, executor, critic, validator)\n│   ├── state.py               # AgentState TypedDict\n│   └── tools\u002F                 # Agent tool registry & implementations\n│       ├── codegen_tools.py   # Generator-backed tools (ros2_node, moveit2, etc.)\n│       ├── lint.py            # ROS2 Python lint stub\n│       └── workspace.py       # Workspace file persistence\n│       └── base.py            # AgentTool \u002F ToolResult dataclasses\n├── backend\u002F                   # FastAPI backend\n│   └── robocopilot\u002F\n│       ├── main.py            # App factory, middleware, lifespan\n│       ├── config.py          # Pydantic Settings (env vars)\n│       ├── schemas.py         # API request\u002Fresponse schemas\n│       ├── llm\u002Fclient.py      # OpenAI-compatible LLM client (httpx + tenacity)\n│       ├── api\u002F               # Route modules (chat, generate, explain, workspace, health)\n│       └── generators\u002F        # Two-phase generators (LLM → Jinja2)\n│           ├── base.py        # RoboticsGenerator ABC\n│           ├── ros2_node.py   # ROS2 ament_python package generator\n│           ├── moveit2.py     # MoveIt2 pick-and-place generator\n│           ├── nav2.py        # Nav2 behavior tree generator\n│           ├── urdf.py        # URDF\u002FXacro generator\n│           └── isaac_sim.py   # Isaac Sim scene generator\n├── frontend\u002F                  # Next.js 14 workspace UI\n│   ├── app\u002F                   # Pages & layouts\n│   ├── components\u002F            # chat-panel, file-tree, code-preview, sidebar\n│   └── lib\u002F                   # API client, utilities\n├── prompts\u002F                   # System prompts for each generator\n│   ├── ros2_node.system.md\n│   ├── moveit2_task.system.md\n│   ├── nav2_bt.system.md\n│   ├── urdf.system.md\n│   ├── isaac_scene.system.md\n│   ├── chat.system.md\n│   └── explain.system.md\n├── ros_templates\u002F             # Jinja2 templates (ROS2\u002FMoveIt2\u002FNav2\u002FURDF)\n│   ├── ros2_node\u002F             # node.py, setup.py, package.xml, launch.py, etc.\n│   ├── moveit2_task\u002F          # moveit_task.py, pose_targets.yaml, launch.py\n│   ├── nav2_bt\u002F               # bt.xml, nav2_params.yaml, launch.py\n│   └── urdf\u002F                  # robot.urdf.xacro\n├── isaac_templates\u002F           # Jinja2 templates (Isaac Sim)\n│   └── scene\u002F                 # scene.py, run.sh\n├── examples\u002F                  # Pre-built output examples for each generator\n├── docs\u002F                      # Architecture, getting started, agents reference\n├── docker\u002F                    # Dockerfiles for backend & frontend\n├── scripts\u002F                   # dev_setup.sh, benchmark.py, release.sh\n├── .env.example               # All configurable environment variables\n├── Makefile                   # Common dev commands (setup, dev, lint, test, up)\n└── docker-compose.yml         # Full stack with health checks\n```\n\n---\n\n## 🚀 Quickstart\n\n### Option A — Docker (recommended)\n\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Frobocopilot\u002Frobocopilot-x.git\ncd robocopilot-x\ncp .env.example .env          # add your OPENAI_API_KEY (or compatible)\ndocker compose up --build\n```\n\nThen open:\n\n- **Frontend:** http:\u002F\u002Flocalhost:3000\n- **API docs:** http:\u002F\u002Flocalhost:8000\u002Fdocs\n\n### Option B — Local dev\n\n```bash\n# Backend\ncd backend\npython -m venv .venv && source .venv\u002Fbin\u002Factivate\npip install -e \".[dev]\"\nuvicorn robocopilot.main:app --reload --port 8000\n\n# Frontend (new terminal)\ncd frontend\npnpm install\npnpm dev\n```\n\n### Try it\n\n```bash\ncurl -N -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fgenerate\u002Fros2_node \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"prompt\": \"Create a ROS2 subscriber for sensor_msgs\u002FLaserScan that logs the closest range\"}'\n```\n\n---\n\n## ⚙️ Configuration\n\nAll configuration is via environment variables. Copy [`.env.example`](.env.example) to `.env` and adjust.\n\n### LLM Provider\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `LLM_PROVIDER` | `openai` | Provider: `openai`, `azure`, `ollama`, `vllm`, `together`, `deepseek`, `qwen` |\n| `LLM_MODEL` | `gpt-4o-mini` | Model name (e.g. `gpt-4o`, `qwen2.5-coder:7b`) |\n| `LLM_API_BASE` | `https:\u002F\u002Fapi.openai.com\u002Fv1` | OpenAI-compatible base URL |\n| `LLM_API_KEY` | *(required)* | API key (any non-empty placeholder for Ollama) |\n| `LLM_TEMPERATURE` | `0.2` | Sampling temperature |\n| `LLM_MAX_TOKENS` | `4096` | Max tokens per completion |\n| `LLM_TIMEOUT_S` | `120` | HTTP timeout in seconds |\n\n### Using a local model (Ollama)\n\n```bash\nollama pull qwen2.5-coder:7b\n# .env:\nLLM_PROVIDER=ollama\nLLM_API_BASE=http:\u002F\u002Flocalhost:11434\u002Fv1\nLLM_API_KEY=ollama\nLLM_MODEL=qwen2.5-coder:7b\n```\n\n### Server\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `ROBOCOPILOT_HOST` | `0.0.0.0` | Bind host |\n| `ROBOCOPILOT_PORT` | `8000` | Bind port |\n| `ROBOCOPILOT_LOG_LEVEL` | `INFO` | Log level |\n| `ROBOCOPILOT_CORS_ORIGINS` | `http:\u002F\u002Flocalhost:3000` | CORS allowed origins (comma-separated) |\n\n### Workspace\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `ROBOCOPILOT_WORKSPACE_DIR` | `\u002Fworkspace` | Artifact output directory |\n| `ROBOCOPILOT_MAX_WORKSPACE_MB` | `512` | Max workspace size in MB |\n\n### Agent\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `ROBOCOPILOT_AGENT_MAX_STEPS` | `18` | Max planner→critic loop iterations |\n| `ROBOCOPILOT_AGENT_ENABLE_CRITIC` | `true` | Enable critic node in agent loop |\n| `ROBOCOPILOT_AGENT_ENABLE_LINT` | `true` | Enable lint tool after generation |\n\n### Frontend\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `NEXT_PUBLIC_API_BASE` | `http:\u002F\u002Flocalhost:8000` | Backend URL for the frontend |\n| `NEXT_PUBLIC_APP_NAME` | `RoboCopilot-X` | Application display name |\n| `NEXT_PUBLIC_DEFAULT_THEME` | `dark` | Default UI theme |\n\n---\n\n## 📡 API Reference\n\nAll endpoints are under `\u002Fapi\u002Fv1`. Full interactive docs at `http:\u002F\u002Flocalhost:8000\u002Fdocs` (Swagger) or `\u002Fredoc`.\n\n### Chat\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `\u002Fchat` | Streaming chat with agent loop (SSE) |\n\n### Generators\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `\u002Fgenerate\u002Fros2_node` | Generate ROS2 ament_python package |\n| `POST` | `\u002Fgenerate\u002Fmoveit2` | Generate MoveIt2 pick-and-place task |\n| `POST` | `\u002Fgenerate\u002Fnav2_bt` | Generate Nav2 behavior tree |\n| `POST` | `\u002Fgenerate\u002Furdf` | Generate URDF\u002FXacro file |\n| `POST` | `\u002Fgenerate\u002Fisaac_scene` | Generate Isaac Sim scene script |\n| `GET`  | `\u002Fgenerate\u002F_registry` | List available generators |\n\n### Workspace\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `\u002Fworkspace\u002Fwrite` | Write artifacts to workspace directory |\n| `GET`  | `\u002Fworkspace\u002Fzip` | Download workspace as zip |\n| `GET`  | `\u002Fworkspace\u002Ftree` | List workspace file tree |\n\n### Explain\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `POST` | `\u002Fexplain` | Get architecture\u002Fbug-hunt explanations of code |\n\n### Health\n\n| Method | Endpoint | Description |\n|--------|----------|-------------|\n| `GET` | `\u002Fhealth` | Health check (status, version, LLM info) |\n\n### Common Request Schema\n\nAll generator endpoints accept:\n\n```json\n{\n  \"prompt\": \"Your natural language request (min 4 chars)\",\n  \"model\": \"optional-model-override\",\n  \"temperature\": 0.2,\n  \"options\": {\n    \"package_name\": \"my_pkg\",\n    \"msg_type\": \"sensor_msgs\u002Fmsg\u002FLaserScan\"\n  }\n}\n```\n\n---\n\n## 💡 Example Prompts\n\n### ROS2 Node Generator\n\n```bash\n# LaserScan subscriber\ncurl -s -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fgenerate\u002Fros2_node \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"prompt\": \"Create a ROS2 subscriber for sensor_msgs\u002Fmsg\u002FLaserScan that logs the closest range\"}'\n\n# Publisher with timer\ncurl -s -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fgenerate\u002Fros2_node \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"prompt\": \"Create a ROS2 node that publishes geometry_msgs\u002Fmsg\u002FTwist to \u002Fcmd_vel at 10Hz with forward velocity 0.5 m\u002Fs\"}'\n\n# Pub-sub bridge\ncurl -s -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fgenerate\u002Fros2_node \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"prompt\": \"Create a ROS2 node that subscribes to \u002Fscan (LaserScan) and publishes ObstacleWarning on \u002Fobstacle_status when min range \u003C 0.5m\"}'\n```\n\n### MoveIt2 Task Generator\n\n```bash\n# Pick and place\ncurl -s -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fgenerate\u002Fmoveit2 \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"prompt\": \"Generate a MoveIt2 pick-and-place task for a Panda robot, picking from (0.4, 0, 0.2) and placing at (0.4, -0.4, 0.2)\"}'\n\n# Cartesian path\ncurl -s -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fgenerate\u002Fmoveit2 \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"prompt\": \"Generate a MoveIt2 Cartesian path task for UR5e that moves the end-effector in a straight line along the Z axis from 0.3m to 0.6m\"}'\n```\n\n### Nav2 Behavior Tree Generator\n\n```bash\n# Patrol behavior\ncurl -s -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fgenerate\u002Fnav2_bt \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"prompt\": \"Create a Nav2 patrol behavior tree for an office robot that visits 4 waypoints and recovers with spin and wait on failure\"}'\n\n# Dock behavior\ncurl -s -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fgenerate\u002Fnav2_bt \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"prompt\": \"Create a Nav2 behavior tree for docking: navigate to dock pose, then run dock action, with recovery behaviors\"}'\n```\n\n### URDF Generator\n\n```bash\ncurl -s -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fgenerate\u002Furdf \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"prompt\": \"Generate a URDF for a 6-DOF robot arm with revolute joints, base link fixed to world, and a parallel gripper end-effector\"}'\n```\n\n### Isaac Sim Scene Generator\n\n```bash\ncurl -s -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fgenerate\u002Fisaac_scene \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"prompt\": \"Create an Isaac Sim scene with two Franka robots facing each other, a DynamicCuboid on the table between them, and a camera overhead\"}'\n```\n\nMore examples are in the [`examples\u002F`](examples\u002F) directory.\n\n---\n\n## 📊 Benchmarks\n\n| Task | Manual baseline | RoboCopilot-X | Speed-up |\n|------|-----------------|----------------|----------|\n| Bring-up a LaserScan subscriber pkg | ~25 min | ~40 s | ~37× |\n| Author a MoveIt2 pick-and-place skeleton | ~90 min | ~75 s | ~72× |\n| Compose a Nav2 patrol BT | ~45 min | ~50 s | ~54× |\n| Generate URDF for 6-DoF arm | ~3 hr | ~3 min | ~60× |\n\nNumbers measured against an internal robotics intern cohort, March 2026.\nReproduce with `scripts\u002Fbenchmark.py`.\n\n---\n\n## ❓ FAQ & Troubleshooting\n\n### The backend won't start — \"LLM_API_KEY is required\"\n\nSet `LLM_API_KEY` in your `.env` file. For Ollama, use any non-empty placeholder like `ollama`.\n\n### Generation returns empty or malformed artifacts\n\n- Verify your `LLM_API_BASE` is reachable (`curl $LLM_API_BASE\u002Fmodels`).\n- Check the backend logs (`docker compose logs backend` or terminal output).\n- Try a more explicit prompt (include message types, e.g. `sensor_msgs\u002Fmsg\u002FLaserScan`).\n\n### CORS errors in the browser\n\nEnsure `ROBOCOPILOT_CORS_ORIGINS` in `.env` includes your frontend origin (default: `http:\u002F\u002Flocalhost:3000`).\n\n### Ollama connection refused\n\n- Confirm Ollama is running: `ollama list`\n- If Docker is used, use `host.docker.internal` instead of `localhost`:\n  ```\n  LLM_API_BASE=http:\u002F\u002Fhost.docker.internal:11434\u002Fv1\n  ```\n\n### Generated ROS2 packages fail `colcon build`\n\n- Ensure `ament_python` build tools are installed in your ROS2 workspace.\n- The generator uses `MultiThreadedExecutor` only for service\u002Faction nodes; pure timer\u002Fsub nodes use single executor.\n- `sensor_data` QoS is auto-selected for `LaserScan`, `Image`, `PointCloud2`, `Imu`.\n- Run `ros2 doctor` to check your ROS2 environment.\n\n### Isaac Sim scene script fails to launch\n\n- Set `ISAAC_SIM_PATH` to your Isaac Sim installation root.\n- Ensure the USD paths in the spec are valid in your Isaac asset library.\n- For headless rendering, set `headless: true` in the spec options.\n\n### How to persist generated files?\n\nBy default, artifacts are returned in the API response. To write to disk:\n\n```bash\n# Write to workspace\ncurl -X POST http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fworkspace\u002Fwrite \\\n  -H \"Content-Type: application\u002Fjson\" \\\n  -d '{\"files\": [...], \"subdir\": \"my_pkg\"}'\n\n# Download as zip\ncurl -O -J 'http:\u002F\u002Flocalhost:8000\u002Fapi\u002Fv1\u002Fworkspace\u002Fzip?subdir=my_pkg'\n```\n\n---\n\n## 🗺️ Roadmap\n\nSee [`ROADMAP.md`](ROADMAP.md). Highlights:\n\n- ✅ v0.1 — Core generators (ROS2 \u002F MoveIt2 \u002F Nav2 \u002F URDF \u002F Isaac)\n- ✅ v0.2 — Sim-in-the-loop validation, RAG over user workspace, colcon build auto-repair, Xacro support, project memory\n- 🔜 v0.3 — VLA policy adapters (OpenVLA, LeRobot)\n- 🔜 v0.4 — Multi-agent debugging on real hardware traces\n\n---\n\n## 🤝 Contributing\n\nWe ❤️ contributors. Read [`CONTRIBUTING.md`](CONTRIBUTING.md), then look at [`good first issue`](https:\u002F\u002Fgithub.com\u002Frobocopilot\u002Frobocopilot-x\u002Flabels\u002Fgood%20first%20issue).\n\n**Quick start:**\n\n1. Fork & clone the repo\n2. Run `make setup` to install all dependencies\n3. Create a branch: `feat\u002F\u003Ctopic>` or `fix\u002F\u003Ctopic>`\n4. Make changes, ensure `make lint && make test` pass\n5. Open a PR following the [template](.github\u002FPULL_REQUEST_TEMPLATE.md)\n\nSee [`CONTRIBUTING.md`](CONTRIBUTING.md) for full guidelines, coding standards, and commit conventions.\n\n---\n\n## 🌍 Community\n\n- **Discord:** [https:\u002F\u002Fdiscord.gg\u002Frobocopilot](https:\u002F\u002Fdiscord.gg\u002Frobocopilot) — Ask questions, share what you built\n- **GitHub Discussions:** [robocopilot\u002Frobocopilot-x\u002Fdiscussions](https:\u002F\u002Fgithub.com\u002Frobocopilot\u002Frobocopilot-x\u002Fdiscussions) — Feature requests, roadmap input\n- **Issues:** [GitHub Issues](https:\u002F\u002Fgithub.com\u002Frobocopilot\u002Frobocopilot-x\u002Fissues) — Bug reports, feature tracking\n\n---\n\n## 🙏 Acknowledgments\n\nRoboCopilot-X builds on the shoulders of incredible open-source projects:\n\n- [LangGraph](https:\u002F\u002Fgithub.com\u002Flangchain-ai\u002Flanggraph) — Agent orchestration framework\n- [FastAPI](https:\u002F\u002Ffastapi.tiangolo.com\u002F) — High-performance async API framework\n- [Next.js](https:\u002F\u002Fnextjs.org\u002F) — React framework for the workspace UI\n- [Jinja2](https:\u002F\u002Fjinja.palletsprojects.com\u002F) — Template engine for deterministic codegen\n- [Pydantic](https:\u002F\u002Fdocs.pydantic.dev\u002F) — Data validation and settings management\n- [ROS2](https:\u002F\u002Fdocs.ros.org\u002Fen\u002Fhumble\u002F) — Robot Operating System\n- [MoveIt2](https:\u002F\u002Fmoveit.ros.org\u002F) — Motion planning for ROS2\n- [Nav2](https:\u002F\u002Fnavigation.ros.org\u002F) — Navigation2 stack\n- [NVIDIA Isaac Sim](https:\u002F\u002Fdeveloper.nvidia.com\u002Fisaac-sim) — Robotics simulation platform\n- [OpenVLA](https:\u002F\u002Fopenvla.github.io\u002F) \u002F [LeRobot](https:\u002F\u002Fgithub.com\u002Fhuggingface\u002Flerobot) — Embodied AI policy frameworks\n\n---\n\n## 📜 License\n\nApache 2.0 — see [`LICENSE`](LICENSE).\n\n---\n\n\u003Cdiv align=\"center\">\nBuilt with ❤️ by robotics engineers, for robotics engineers.\n\u003C\u002Fdiv>","RoboCopilot-X 是一个专为现代机器人开发的复杂多栈环境设计的开源AI辅助工具。其核心功能包括通过自然语言生成生产级ROS2节点、MoveIt2运动规划、Nav2行为树、URDF描述以及Isaac Sim场景模板等，同时保持工程师对整个过程的掌控。技术上，该项目基于Python构建，支持ROS2 Humble、FastAPI和Next.js等，并利用LLM（大型语言模型）来理解特定于机器人领域的概念如ROS2节点生命周期、MoveIt2配置及URDF\u002FXacro语义等。RoboCopilot-X适合那些希望加速开发流程且需要处理多种软件栈集成挑战的机器人工程师使用。",2,"2026-06-11 03:58:36","CREATED_QUERY"]