Refactor infrastructure scripts and add mock hardware support
Changes: - Refactor project scripts for better dev/prod workflow separation - Add mock_hardware.py for local development without real hardware - Add Makefile for common commands - Add .env.example for environment variable reference - Split scripts into dev-backend.sh, dev-frontend.sh, prod-backend.sh - Add stop.sh for clean shutdown Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
+35
-9
@@ -12,13 +12,32 @@ import requests
|
||||
from flask import Flask, render_template, jsonify, request, Response, send_from_directory
|
||||
from flask_cors import CORS
|
||||
|
||||
from config import SERVER_CONFIG, ARM_CONFIG, AGV_CONFIG, UPLOAD_CONFIG, MAP_CONFIG, ARM_CAMERA_CONFIG, CAMERA_CONFIG, DATA_DIR, State, ZHIJIAN_BASE_URL, ZHIJIAN_AUTH_TOKEN, set_api_mode
|
||||
from utils.arm_client import ArmClient
|
||||
from utils.agv_controller_ros2 import AGVController
|
||||
from utils.qr_scanner import QRScanner
|
||||
from config import (
|
||||
SERVER_CONFIG, ARM_CONFIG, AGV_CONFIG, UPLOAD_CONFIG, MAP_CONFIG,
|
||||
ARM_CAMERA_CONFIG, CAMERA_CONFIG, DATA_DIR, State, ZHIJIAN_BASE_URL,
|
||||
ZHIJIAN_AUTH_TOKEN, set_api_mode, MOCK_HARDWARE
|
||||
)
|
||||
|
||||
# 根据 MOCK_HARDWARE 配置选择导入真实或 Mock 实现
|
||||
if MOCK_HARDWARE:
|
||||
print("[启动] ===========================================")
|
||||
print("[启动] Mock 硬件模式 - 本地开发环境")
|
||||
print("[启动] ===========================================")
|
||||
from utils.mock_hardware import (
|
||||
MockArmClient as ArmClient,
|
||||
MockAGVController as AGVController,
|
||||
MockQRScanner as QRScanner,
|
||||
MockNav2Navigator as Nav2Navigator,
|
||||
MockNav2Status as Nav2Status
|
||||
)
|
||||
else:
|
||||
from utils.arm_client import ArmClient
|
||||
from utils.agv_controller_ros2 import AGVController
|
||||
from utils.qr_scanner import QRScanner
|
||||
from utils.nav2_navigator import Nav2Navigator, Nav2Status
|
||||
|
||||
from utils.image_uploader import ImageUploader
|
||||
from utils.mission_executor import MissionExecutorV3
|
||||
from utils.nav2_navigator import Nav2Navigator, Nav2Status
|
||||
|
||||
# 配置日志
|
||||
logging.basicConfig(
|
||||
@@ -133,9 +152,17 @@ try:
|
||||
import threading
|
||||
def _auto_connect_all():
|
||||
time.sleep(2) # 等待 Flask 完全就绪
|
||||
# 连接 AGV
|
||||
if MOCK_HARDWARE:
|
||||
print("[启动] Mock 模式跳过硬件自动连接")
|
||||
# Mock 模式下也创建实例供 API 使用
|
||||
gs.agv_controller = AGVController()
|
||||
gs.arm_client = ArmClient(ARM_CONFIG["host"], ARM_CONFIG["port"])
|
||||
gs.qr_scanner = QRScanner(CAMERA_CONFIG["device_index"])
|
||||
gs.navigator = Nav2Navigator()
|
||||
return
|
||||
|
||||
# 连接 AGV(真实硬件)
|
||||
try:
|
||||
from utils.agv_controller_ros2 import AGVController
|
||||
gs.agv_controller = AGVController()
|
||||
if gs.agv_controller.connect():
|
||||
print("[启动] AGV 自动连接成功")
|
||||
@@ -143,9 +170,8 @@ try:
|
||||
print("[启动] AGV 自动连接失败,请手动连接")
|
||||
except Exception as e:
|
||||
print(f"[启动] AGV 自动连接异常: {e}")
|
||||
# 连接机械臂
|
||||
# 连接机械臂(真实硬件)
|
||||
try:
|
||||
from utils.arm_client import ArmClient
|
||||
gs.arm_client = ArmClient(ARM_CONFIG["host"], ARM_CONFIG["port"])
|
||||
if gs.arm_client.connect():
|
||||
gs.arm_client.power_on()
|
||||
|
||||
Reference in New Issue
Block a user