AGV 智能巡检系统 — 脚本说明
目录结构
scripts/
├── prod-backend.sh ← 生产环境完整启动(ROS2 + Nav2 + Flask)
├── stop_all.sh ← 生产环境完整停止
├── dev-backend.sh ← 本地后端开发启动(Mock 硬件模式)
├── dev-frontend.sh ← 本地前端开发启动
└── stop.sh ← 停止本地开发服务
scan_fixer/ 是生产启动链路的一部分:clock_publisher.py 发布 /clock,
fix_scan_timestamp_v6.py 将 /scan 重发为 /scan_corrected,供 Nav2/AMCL 使用。
使用场景
0. 初始化 Python 环境
项目使用 uv 统一管理 Python 虚拟环境,依赖声明在仓库根目录 pyproject.toml,锁定版本在 uv.lock。
# 如系统尚未安装 uv,先安装 uv
curl -LsSf https://astral.sh/uv/install.sh | sh
# 在仓库根目录执行
cd ~/work/smart-inspection
uv sync
uv sync 会按 .python-version 创建 Python 3.10 虚拟环境到 .venv。ROS2 Humble 仍使用系统环境 /opt/ros/humble,不要把 ROS2 系统包写入 pyproject.toml。
系统依赖仍需通过系统包管理器安装:
sudo apt install -y ffmpeg libzbar0
1. 首次开机 / 完整重启
# 在 AGV 上执行
cd ~/work/smart-inspection
./scripts/stop_all.sh # 先彻底清理
./scripts/prod-backend.sh # 完整启动
2. 修改代码后重新启动生产后端
# 部署文件到 AGV 后
ssh elephant@192.168.60.80 'cd ~/work/smart-inspection && ./scripts/prod-backend.sh'
3. 本地开发调试(不连硬件)
# 在本机执行,仅启动 Mock 后端
./scripts/dev-backend.sh
# 访问 http://127.0.0.1:5000
4. 本地前端开发
./scripts/dev-frontend.sh
环境变量
所有脚本支持通过环境变量覆盖默认路径:
| 变量 | 默认值 | 说明 |
|---|---|---|
AGV_PROJECT_DIR |
/home/elephant/work/smart-inspection |
仓库根目录 |
AGV_APP_DIR |
$AGV_PROJECT_DIR/agv_app |
Flask 应用目录 |
AGV_ROS2_DIR |
/home/elephant/agv_pro_ros2 |
ROS2 工作空间 |
ROS_SETUP |
/opt/ros/humble/setup.bash |
ROS2 环境脚本 |
ROS_WORKSPACE_SETUP |
$AGV_ROS2_DIR/install/setup.bash |
ROS2 工作空间环境脚本 |
SCAN_FIXER_DIR |
$AGV_PROJECT_DIR/scan_fixer |
时间戳修正工具目录 |
LOG_DIR |
/tmp |
日志目录 |
FASTRTPS_SHM_DIR |
/dev/shm |
FastRTPS 共享内存目录 |
AGV_CONTROLLER_DEVICE |
/dev/agvpro_controller |
AGV 控制器设备 |
ROS_DOMAIN_ID |
1 |
ROS2 通信域 ID |
日志位置(AGV 上)
| 组件 | 日志 |
|---|---|
| bringup (激光雷达) | /tmp/ros2_bringup.log |
| Nav2 导航 | /tmp/ros2_nav2.log |
| scan fixer | /tmp/scan_fixer.log |
| Flask | /tmp/agv_flask.log |
机械臂端
机械臂 (Pi) 的启动由 systemd 托管,在 Pi 上执行:
cd ~/work/smart-inspection
uv sync
sudo systemctl start arm_server # 启动
sudo systemctl status arm_server # 查看状态
sudo systemctl enable arm_server # 开机自启
配置见 arm_server/arm_server.service。