diff --git a/agv_app/app.py b/agv_app/app.py index da6e303..ea63817 100644 --- a/agv_app/app.py +++ b/agv_app/app.py @@ -1010,13 +1010,20 @@ def api_arm_get_angles(): @app.route("/api/arm/set_angles", methods=["POST"]) def api_arm_set_angles(): """设置关节角度""" - data = request.json + data = request.json or {} angles = data.get("angles", []) speed = data.get("speed", 500) + if not isinstance(angles, list) or len(angles) != 6: + return jsonify({"ok": False, "error": "角度数据必须包含 6 个关节值"}), 400 + try: + angles = [float(a) for a in angles] + speed = int(speed) + except (TypeError, ValueError): + return jsonify({"ok": False, "error": "角度或速度格式错误"}), 400 if not gs.arm_client: return jsonify({"ok": False, "error": "未连接机械臂"}), 400 ok = gs.arm_client.set_angles(angles, speed) - return jsonify({"ok": ok}) + return jsonify({"ok": ok, "error": None if ok else "机械臂执行失败"}) @app.route("/api/arm/set_angle", methods=["POST"]) def api_arm_set_angle(): diff --git a/agv_app/config.py b/agv_app/config.py index ada87a7..7aad0e2 100644 --- a/agv_app/config.py +++ b/agv_app/config.py @@ -8,7 +8,7 @@ BASE_DIR = os.path.dirname(os.path.abspath(__file__)) # ========== 网络配置(集中管理所有 IP 地址 — 修改此处即可全局生效)========== AGV_HOST = "192.168.50.93" -ARM_HOST = "192.168.50.90" +ARM_HOST = "192.168.50.91" # ========== AGV 参数 ========== AGV_CONFIG = { @@ -89,4 +89,4 @@ class State: class PhotoType: FRONT = "front" BACK = "back" - NAMEPLATE = "nameplate" \ No newline at end of file + NAMEPLATE = "nameplate" diff --git a/agv_app/static/js/setting.js b/agv_app/static/js/setting.js index bcab131..03535f9 100644 --- a/agv_app/static/js/setting.js +++ b/agv_app/static/js/setting.js @@ -858,12 +858,24 @@ createApp({ }) }, async applyAngles(angles = null) { - const targetAngles = angles || this.angleInputs - await fetch(API + '/api/arm/set_angles', { + const targetAngles = Array.isArray(angles) ? angles : this.angleInputs + if (!Array.isArray(targetAngles) || targetAngles.length !== 6) { + alert('角度数据无效,请先刷新角度') + return false + } + const res = await fetch(API + '/api/arm/set_angles', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ angles: targetAngles, speed: 500 }) }) + const data = await res.json() + if (!data.ok) { + alert('应用角度失败: ' + (data.error || '机械臂未响应')) + return false + } + this.angleInputs = [...targetAngles] + setTimeout(() => this.refreshAngles(), 2000) + return true }, async mirrorAngles() { // 镜像角度:只取反 J1,其它不变 @@ -872,7 +884,8 @@ createApp({ // 应用到机械臂 try { - await this.applyAngles(mirrored) + const ok = await this.applyAngles(mirrored) + if (!ok) return this.angleInputs = mirrored // 只有在成功后才更新显示 alert('✅ 角度已镜像并应用(仅 J1 取反)') } catch (e) { diff --git a/agv_app/templates/setting.html b/agv_app/templates/setting.html index a3e14aa..f8af5f8 100644 --- a/agv_app/templates/setting.html +++ b/agv_app/templates/setting.html @@ -509,7 +509,7 @@