This commit is contained in:
ywb
2026-06-08 11:42:41 +08:00
parent 696bf2ef6e
commit a4f4be4c8e
8 changed files with 141 additions and 52 deletions
+28 -6
View File
@@ -126,10 +126,11 @@ try:
# Flask 2.3+ 方式
with app.app_context():
load_persisted_config()
# 启动时自动重连 AGV(异步,不阻塞 Flask 启动)
# 启动时自动连接所有设备(异步,不阻塞 Flask 启动)
import threading
def _auto_reconnect():
def _auto_connect_all():
time.sleep(2) # 等待 Flask 完全就绪
# 连接 AGV
try:
from utils.agv_controller_ros2 import AGVController
gs.agv_controller = AGVController()
@@ -139,7 +140,19 @@ try:
print("[启动] AGV 自动连接失败,请手动连接")
except Exception as e:
print(f"[启动] AGV 自动连接异常: {e}")
threading.Thread(target=_auto_reconnect, daemon=True).start()
# 连接机械臂
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()
gs.arm_client.state_on()
print("[启动] 机械臂自动连接成功")
else:
print("[启动] 机械臂自动连接失败,请手动连接")
except Exception as e:
print(f"[启动] 机械臂自动连接异常: {e}")
threading.Thread(target=_auto_connect_all, daemon=True).start()
except:
# 兼容旧版 Flask
@app.before_first_request
@@ -184,6 +197,15 @@ def api_status():
if gs.agv_controller:
agv_connected = gs.agv_controller.is_connected()
# 实时检测机械臂摄像头是否可用
try:
import requests as _armcam_req
_r = _armcam_req.get(ARM_CAMERA_CONFIG["url"], stream=True, timeout=3)
gs.arm_camera_opened = (_r.status_code == 200)
_r.close()
except:
gs.arm_camera_opened = False
return jsonify({
"state": gs.state,
"agv_connected": agv_connected,
@@ -1179,7 +1201,7 @@ def api_agv_move():
"""控制 AGV 移动(前进/后退/左转/右转/停止)"""
data = request.json
direction = data.get("direction", "stop") # forward / backward / left / right / stop
speed = data.get("speed", AGV_CONFIG.get("move_speed", 0.5))
speed = data.get("speed", AGV_CONFIG.get("move_speed", 1.0))
if not gs.agv_controller or not gs.agv_controller.is_connected():
return jsonify({"ok": False, "error": "AGV 未连接"}), 400
try:
@@ -1250,8 +1272,8 @@ def api_mission_start():
"qr_scan": bool(data.get("qr_scan", True)),
"front_photo": bool(data.get("front_photo", True)),
"back_photo": bool(data.get("back_photo", True)),
"agv_speed": float(data.get("agv_speed", 0.5)),
"arm_speed": int(data.get("arm_speed", 500)),
"agv_speed": float(data.get("agv_speed", 1.0)),
"arm_speed": int(data.get("arm_speed", 1000)),
}
print(f"[Mission] options: {options}")