feat: demo suite - autorun/stop/mapping/yolo/vlm modes, .env.defaults
This commit is contained in:
parent
c8186aa573
commit
b047c6c145
|
|
@ -0,0 +1,25 @@
|
|||
# ================================================================
|
||||
# 演示方案默认环境变量
|
||||
# 容器重启后 autorun.sh 会自动加载此文件
|
||||
# ================================================================
|
||||
|
||||
# 视觉后端模式:yolo | vlm | hybrid
|
||||
# yolo : YOLOv8n CPU 检测(轻量、快速)
|
||||
# vlm : Qwen2.5-VL-3B GPU 检测(语义理解强)
|
||||
# hybrid: YOLO 持续 + VLM 定期深度分析
|
||||
export VISION_BACKEND="${VISION_BACKEND:-yolo}"
|
||||
|
||||
# VLM 采样间隔(秒)
|
||||
export VLM_INTERVAL="${VLM_INTERVAL:-5.0}"
|
||||
|
||||
# VLM 模型名称(本地路径优先)
|
||||
export VLM_MODEL="${VLM_MODEL:-Qwen/Qwen2.5-VL-3B-Instruct}"
|
||||
|
||||
# VLM 提示词(空则使用内置默认)
|
||||
export VLM_PROMPT="${VLM_PROMPT:-}"
|
||||
|
||||
# HuggingFace / ModelScope 缓存目录
|
||||
export HF_HOME="${HF_HOME:-/workspace/.cache/huggingface}"
|
||||
|
||||
# 默认地图路径(localization 模式使用)
|
||||
export NAV2_MAP_PATH="${NAV2_MAP_PATH:-/workspace/turtlebot3_simulations/turtlebot3_gazebo/map/office_map.yaml}"
|
||||
|
|
@ -0,0 +1,69 @@
|
|||
# 机器人巡检演示方案
|
||||
|
||||
## 快速开始
|
||||
|
||||
### 1. 默认自动运行(容器重启后自动执行)
|
||||
```bash
|
||||
# 容器启动后自动执行 autorun.sh:
|
||||
# mapping + explore + gzweb,不运行 detector
|
||||
```
|
||||
|
||||
### 2. 手动控制
|
||||
|
||||
```bash
|
||||
# 停止所有仿真进程
|
||||
./run_all_stop.sh
|
||||
|
||||
# 纯制图(无 detector)
|
||||
./run_mapping.sh
|
||||
|
||||
# YOLO CPU 视觉巡检
|
||||
./run_yolo.sh
|
||||
|
||||
# VLM GPU 视觉巡检(需要 GPU 实例)
|
||||
./run_vlm.sh
|
||||
|
||||
# VLM 混合模式(YOLO + VLM 互补)
|
||||
VISION_BACKEND=hybrid ./run_vlm.sh
|
||||
```
|
||||
|
||||
### 3. 高级参数
|
||||
|
||||
```bash
|
||||
# 自定义 VLM 采样间隔
|
||||
VLM_INTERVAL=3.0 ./run_vlm.sh
|
||||
|
||||
# 使用 AWQ 量化版(显存 3-4GB)
|
||||
VLM_MODEL=Qwen/Qwen2.5-VL-3B-Instruct-AWQ ./run_vlm.sh
|
||||
|
||||
# 不启动 gzweb(节省资源)
|
||||
./run_mapping.sh --no-rviz
|
||||
|
||||
# 使用已有地图定位导航
|
||||
./run_all.sh localization --map /path/to/map.yaml
|
||||
```
|
||||
|
||||
## 文件结构
|
||||
|
||||
| 文件 | 说明 |
|
||||
|------|------|
|
||||
| `autorun.sh` | 容器默认启动脚本(mapping + explore,无 detector) |
|
||||
| `run_all.sh` | 统一启动器(支持 mapping/localization + 各种选项) |
|
||||
| `run_all_stop.sh` | 干净停止所有仿真进程 |
|
||||
| `run_mapping.sh` | 便捷脚本:纯制图 |
|
||||
| `run_yolo.sh` | 便捷脚本:YOLO CPU 视觉巡检 |
|
||||
| `run_vlm.sh` | 便捷脚本:VLM GPU 视觉巡检 |
|
||||
| `.env.defaults` | 默认环境变量配置 |
|
||||
|
||||
## 日志与输出
|
||||
|
||||
| 位置 | 内容 |
|
||||
|------|------|
|
||||
| `/workspace/logs/run_all_*/` | 各进程运行日志 |
|
||||
| `/workspace/vision_output/YYYYMMDD_HHMMSS/` | 摄像头画面 + 标注图像 |
|
||||
| `/workspace/camera_latest.jpg` | 最新摄像头画面 |
|
||||
| `/workspace/.vlm_model_path` | VLM 本地模型路径 |
|
||||
|
||||
## TODO
|
||||
|
||||
- [ ] 自然语言 CLI 控制("去冰箱前"等指令)
|
||||
|
|
@ -1,6 +1,9 @@
|
|||
#!/usr/bin/env bash
|
||||
# 与 run_all.sh mapping --gzweb 相同,但不起 workspace 内 gzweb-demo 的 npm run dev。
|
||||
# 浏览器使用镜像内 foundation 已在 /opt/gzweb(8000)起的页面;本脚本仍起 gz sim、websocket.sdf(9002)、Nav2 等。
|
||||
# autorun.sh — 容器启动后自动执行:移动巡检 + 自动制图
|
||||
# 默认不运行 detector,保持最稳定的基础行为
|
||||
# 如需启用 detector,手动运行:
|
||||
# VISION_BACKEND=yolo ./run_all.sh mapping --explore --gzweb --no-gzweb-vite --vision
|
||||
# VISION_BACKEND=vlm ./run_all.sh mapping --explore --gzweb --no-gzweb-vite --vision
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
exec bash "${ROOT}/run_all.sh" mapping --explore --gzweb --no-gzweb-vite --vision
|
||||
exec bash "${ROOT}/run_all.sh" mapping --explore --gzweb --no-gzweb-vite
|
||||
|
|
|
|||
|
|
@ -1,5 +1,10 @@
|
|||
#!/bin/bash
|
||||
set -euo pipefail
|
||||
# 加载默认环境变量
|
||||
if [[ -f "${ROOT}/.env.defaults" ]]; then
|
||||
set -a; source "${ROOT}/.env.defaults"; set +a
|
||||
fi
|
||||
|
||||
# Link pip deps from EFS vendor if /workspace/.site-packages is missing
|
||||
ROOT="/workspace/"
|
||||
if [[ ! -d "${ROOT}/.site-packages" && -d "/opt/vendor/yolov8" ]]; then
|
||||
|
|
|
|||
|
|
@ -1,13 +1,31 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
# run_all_stop.sh — send stop signal to run_all.sh loop mode
|
||||
# run_all_stop.sh — 干净停止所有仿真、导航、视觉进程
|
||||
|
||||
echo "[run_all_stop] Stopping all simulation processes..."
|
||||
|
||||
# 1. 发送循环停止信号(让 run_all.sh 优雅退出)
|
||||
touch /workspace/.run_all_stop
|
||||
echo "[run_all_stop] stop signal sent. run_all.sh will exit after current exploration cycle."
|
||||
|
||||
# Also send SIGTERM to run_all.sh directly (excluding this script)
|
||||
PIDS=$(ps aux | grep -E "run_all\.sh" | grep -v grep | grep -v run_all_stop | awk '{print $2}' || true)
|
||||
# 2. 发送 SIGTERM 给 run_all.sh(触发其 cleanup trap)
|
||||
PIDS=$(pgrep -f "run_all\.sh" | grep -v $$ || true)
|
||||
if [[ -n "$PIDS" ]]; then
|
||||
echo "[run_all_stop] sending SIGTERM to run_all.sh pids: $PIDS"
|
||||
echo "[run_all_stop] Sending SIGTERM to run_all.sh: $PIDS"
|
||||
kill $PIDS 2>/dev/null || true
|
||||
fi
|
||||
|
||||
# 3. 等待优雅退出
|
||||
sleep 3
|
||||
|
||||
# 4. 强制清理残留的 ROS2 / Gazebo / 视觉进程
|
||||
echo "[run_all_stop] Force killing remaining processes..."
|
||||
pkill -9 -f "gz sim\|gz launch\|ros2 launch\|ros2 run" 2>/dev/null || true
|
||||
pkill -9 -f "explore_lite\|nav2_bringup\|turtlebot3_gazebo" 2>/dev/null || true
|
||||
pkill -9 -f "vision_yolo\|vision_daemon" 2>/dev/null || true
|
||||
pkill -9 -f "selkies-gstreamer\|code-server" 2>/dev/null || true
|
||||
|
||||
# 5. 清理状态文件
|
||||
rm -f /workspace/.run_all_stop
|
||||
rm -f /workspace/.vision_daemon_stop
|
||||
|
||||
echo "[run_all_stop] All processes stopped."
|
||||
|
|
|
|||
|
|
@ -0,0 +1,4 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
exec bash "${ROOT}/run_all.sh" mapping --explore --gzweb --no-gzweb-vite "$@"
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
export VISION_BACKEND=vlm
|
||||
export VLM_INTERVAL="${VLM_INTERVAL:-5.0}"
|
||||
export VLM_MODEL="${VLM_MODEL:-Qwen/Qwen2.5-VL-3B-Instruct}"
|
||||
# 如果 install_vlm.sh 预下载了本地模型,优先使用
|
||||
if [[ -f /workspace/.vlm_model_path ]]; then
|
||||
source /workspace/.vlm_model_path
|
||||
fi
|
||||
exec bash "${ROOT}/run_all.sh" mapping --explore --gzweb --no-gzweb-vite --vision "$@"
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
export VISION_BACKEND=yolo
|
||||
exec bash "${ROOT}/run_all.sh" mapping --explore --gzweb --no-gzweb-vite --vision "$@"
|
||||
Loading…
Reference in New Issue