HarmonyOS 6(API 23)实战:基于悬浮导航、沉浸光感与HMAF的“航界智脑“——PC端AI智能体沉浸式无人机集群任务规划与空域协同管理工作台

文章目录

    • 每日一句正能量
    • 前言
    • 一、前言:低空经济2.0时代的无人机集群管理革新
    • 二、技术架构与核心设计
      • [2.1 系统架构设计](#2.1 系统架构设计)
      • [2.2 空域密度光效映射体系](#2.2 空域密度光效映射体系)
      • [2.3 飞行器类型光效标识](#2.3 飞行器类型光效标识)
    • 三、核心代码实战
      • [3.1 空域密度光效系统(AirspaceLightTheme.ets)](#3.1 空域密度光效系统(AirspaceLightTheme.ets))
      • [3.2 HMAF四层空域管控智能体架构(UAVAgentScheduler.ets)](#3.2 HMAF四层空域管控智能体架构(UAVAgentScheduler.ets))
      • [3.3 悬浮任务导航(MissionFloatNavigation.ets)](#3.3 悬浮任务导航(MissionFloatNavigation.ets))
      • [3.4 主3D空域视窗与飞行器渲染(AirspaceControlPage.ets)](#3.4 主3D空域视窗与飞行器渲染(AirspaceControlPage.ets))
      • [3.5 浮动冲突预警窗口(ConflictAlertAbility.ets)](#3.5 浮动冲突预警窗口(ConflictAlertAbility.ets))
    • 四、关键技术总结
      • [4.1 HMAF无人机管控开发清单](#4.1 HMAF无人机管控开发清单)
      • [4.2 空域密度光效映射](#4.2 空域密度光效映射)
      • [4.3 飞行器类型光效标识](#4.3 飞行器类型光效标识)
    • 五、运行效果展示
      • [5.1 空域感知阶段 - 稀疏光效](#5.1 空域感知阶段 - 稀疏光效)
      • [5.2 路径规划阶段 - 密集光效](#5.2 路径规划阶段 - 密集光效)
      • [5.3 冲突消解阶段 - 危险光效](#5.3 冲突消解阶段 - 危险光效)
    • 六、总结与展望

每日一句正能量

"最佳的时光不是过去,也不是未来,而是此刻平静欢喜的瞬间。"

过去被美化(黄金时代),未来被投射(明天会更好),但真正拥有过的时间只有"此刻"。平静不是麻木,欢喜不是亢奋,而是一种低耗能、高满足的中间状态。

前言

摘要:2026年,中国低空经济规模突破1万亿元,注册无人机超过300万架,日均飞行架次超过100万。但无人机集群管理面临空域冲突频发、任务规划低效、应急响应滞后三大痛点。HarmonyOS 6(API 23)引入的鸿蒙智能体框架(HMAF)将AI能力下沉至系统层,配合悬浮导航与沉浸光感特性,为PC端无人机集群任务规划带来了"航迹即光效、冲突即导航"的全新交互范式。本文将实战开发一款面向HarmonyOS PC的"航界智脑"应用,展示如何利用HMAF构建"空域感知-路径规划-冲突消解-应急调度"四层智能体协作架构,通过悬浮导航实现任务阶段实时追踪,基于沉浸光感打造"空域密度即氛围"的沉浸体验,以及基于多窗口架构构建浮动3D空域视窗、冲突预警面板和气象雷达窗口的协同管理体验。


一、前言:低空经济2.0时代的无人机集群管理革新

2026年,中国低空经济进入"规模化运营"时代。深圳、合肥、成都等低空经济示范区日均无人机物流飞行超过10万架次,eVTOL城市空中交通(UAM)航线正式商业化运营。但无人机集群管理仍面临三大核心痛点:

  1. 空域冲突频发:传统空域管理采用"隔离运行"模式,无人机与有人机、无人机与无人机之间的冲突检测依赖人工雷达监控,响应延迟30秒以上。2025年某物流无人机集群在珠三角密集空域发生连环冲突事件,导致12架无人机紧急迫降

  2. 任务规划低效:一个中型物流枢纽日均调度5000+架次无人机,传统调度系统基于静态航路点规划,无法实时响应气象变化、禁飞区更新、临时空域管制等动态因素,任务取消率高达15%

  3. 应急响应滞后:无人机故障、通信中断、恶劣天气等突发事件的应急响应依赖人工决策,从事件发现到处置指令下达平均需要8分钟,远超无人机失控后的安全窗口期

HarmonyOS 6(API 23)的HMAF框架配合**悬浮导航(Float Navigation)沉浸光感(Immersive Light Effects)**特性,为无人机集群管理带来了革命性解决方案:

  • 智能体协同管控:HMAF构建的"空域感知智能体"可实时融合ADS-B、雷达、5G-A通感一体等多源数据,空域冲突检测延迟降至200ms;路径规划智能体基于强化学习动态优化航迹,任务成功率提升至99.5%

  • 空域密度光效感知:根据当前空域密度(稀疏/正常/密集/拥堵/危险)动态切换环境光色,让空管人员"看见"空域压力

  • 悬浮任务导航:底部悬浮导航实时显示四大智能体运行状态与任务进度徽章,调度员无需切换页面即可掌握全局态势

  • PC多窗口协同管控:主3D空域视窗 + 浮动航迹规划窗口 + 浮动冲突预警面板 + 浮动气象雷达窗口的四层架构,通过光效联动实现"一眼全局"

本文核心亮点

  • 空域密度光效:根据空域密度(稀疏翠绿→正常淡蓝→密集暖黄→拥堵橙红→危险警示红)动态渲染全屏氛围光

  • 飞行器类型光效:物流无人机(蓝绿)、载人eVTOL(金黄)、巡检无人机(银白)、应急救援(深红)拥有专属光晕标识

  • 悬浮任务导航:底部悬浮页签承载"空域感知/路径规划/冲突消解/应急调度"四大模块,实时显示冲突统计徽章与空域密度脉冲

  • HMAF四层管控架构:感知智能体(多源数据融合)、规划智能体(动态航迹优化)、消解智能体(冲突预测与规避)、调度智能体(应急响应编排)协同工作

  • 多窗口光效同步 :主窗口与三个浮动子窗口通过 AppStorage 实现跨窗口光效联动,焦点感知自动调节


二、技术架构与核心设计

2.1 系统架构设计

复制代码
┌─────────────────────────────────────────────────────────┐
│                   航界智脑 - 应用层                        │
├─────────────┬─────────────┬─────────────┬──────────────┤
│  空域感知Agent │  路径规划Agent │  冲突消解Agent │  应急调度Agent  │
├─────────────┴─────────────┴─────────────┴──────────────┤
│              HMAF 鸿蒙智能体框架(API 23)                  │
├─────────────────────────────────────────────────────────┤
│  悬浮导航(Float Navigation) │ 沉浸光感(Immersive Light)    │
├─────────────────────────────────────────────────────────┤
│        ArkUI / ArkTS / WebGL / Map Kit / 5G-A            │
├─────────────────────────────────────────────────────────┤
│              HarmonyOS 6.1.0 (API 23) PC端                │
└─────────────────────────────────────────────────────────┘

2.2 空域密度光效映射体系

空域密度 主色调 环境光色 脉冲速度 心理感知 典型场景
稀疏 #27AE60 翠绿 #E8F8F0 淡绿 4000ms 极缓慢 畅通、自由 郊区空域
正常 #3498DB 淡蓝 #EBF5FB 淡蓝 3500ms 缓慢 有序、可控 城市低空
密集 #F39C12 暖黄 #FEF5E7 淡黄 2500ms 中等 注意、调度 物流枢纽
拥堵 #E67E22 紧迫橙 #FDEEE0 淡橙 1800ms 较快 紧迫、限流 高峰时段
危险 #E74C3C 危险红 #FDEDEC 淡红 1000ms 急促 危险、禁飞 冲突区域

2.3 飞行器类型光效标识

飞行器类型 光晕颜色 材质效果 标识意义
物流无人机 #1ABC9C 蓝绿 科技光泽 快递配送
载人eVTOL #F1C40F 金黄 温暖辉光 城市空中交通
巡检无人机 #BDC3C7 银白 冷峻金属 基础设施巡检
应急救援 #C0392B 深红 急促脉冲 紧急医疗/消防
农业植保 #58D68D 翠绿 自然光晕 农田作业

三、核心代码实战

3.1 空域密度光效系统(AirspaceLightTheme.ets)

代码亮点 :本模块实现了"空域密度即光效"的沉浸感知系统,这是"航界智脑"最核心的视觉创新。通过AirspaceDensity枚举定义五种空域密度的专属光效人格,利用systemMaterialEffect为标题栏和导航组件注入物理光照级的光晕效果,结合动态呼吸光背景,实现空管人员"一眼感知空域压力"的直觉体验。

typescript 复制代码
// entry/src/main/ets/theme/AirspaceLightTheme.ets

import { hdsMaterial, SystemMaterialEffect } from '@kit.UIDesignKit';

/**
 * 空域密度枚举
 */
export enum AirspaceDensity {
  SPARSE = 'sparse',     // 稀疏 - 翠绿
  NORMAL = 'normal',     // 正常 - 淡蓝
  DENSE = 'dense',       // 密集 - 暖黄
  CONGESTED = 'congested', // 拥堵 - 紧迫橙
  DANGEROUS = 'dangerous'  // 危险 - 警示红
}

/**
 * 光效配置接口
 */
export interface AirspaceLightConfig {
  primaryColor: string;
  ambientColor: string;
  glowColor: string;
  pulseSpeed: number;
  pulseIntensity: number;
  materialEffect: SystemMaterialEffect;
  densityLabel: string;
}

/**
 * 空域光效主题管理器
 */
export class AirspaceLightTheme {
  private static readonly LIGHT_MAP: Record<AirspaceDensity, AirspaceLightConfig> = {
    [AirspaceDensity.SPARSE]: {
      primaryColor: '#27AE60',
      ambientColor: '#E8F8F0',
      glowColor: '#7ED6A8',
      pulseSpeed: 4000,
      pulseIntensity: 0.15,
      materialEffect: SystemMaterialEffect.IMMERSIVE,
      densityLabel: '稀疏 - 畅通'
    },
    [AirspaceDensity.NORMAL]: {
      primaryColor: '#3498DB',
      ambientColor: '#EBF5FB',
      glowColor: '#85C1E9',
      pulseSpeed: 3500,
      pulseIntensity: 0.2,
      materialEffect: SystemMaterialEffect.IMMERSIVE,
      densityLabel: '正常 - 有序'
    },
    [AirspaceDensity.DENSE]: {
      primaryColor: '#F39C12',
      ambientColor: '#FEF5E7',
      glowColor: '#F8C471',
      pulseSpeed: 2500,
      pulseIntensity: 0.35,
      materialEffect: SystemMaterialEffect.IMMERSIVE,
      densityLabel: '密集 - 注意调度'
    },
    [AirspaceDensity.CONGESTED]: {
      primaryColor: '#E67E22',
      ambientColor: '#FDEEE0',
      glowColor: '#F0A060',
      pulseSpeed: 1800,
      pulseIntensity: 0.5,
      materialEffect: SystemMaterialEffect.IMMERSIVE,
      densityLabel: '拥堵 - 限流措施'
    },
    [AirspaceDensity.DANGEROUS]: {
      primaryColor: '#E74C3C',
      ambientColor: '#FDEDEC',
      glowColor: '#FF6B6B',
      pulseSpeed: 1000,
      pulseIntensity: 0.7,
      materialEffect: SystemMaterialEffect.IMMERSIVE,
      densityLabel: '危险 - 立即禁飞'
    }
  };

  @StorageLink('currentAirspaceDensity') currentDensity: AirspaceDensity = AirspaceDensity.SPARSE;
  @StorageLink('ambientLightColor') ambientColor: string = '#E8F8F0';
  @StorageLink('primaryLightColor') primaryColor: string = '#27AE60';

  public switchAirspaceLight(density: AirspaceDensity): void {
    const config = AirspaceLightTheme.LIGHT_MAP[density];
    this.currentDensity = density;
    this.ambientColor = config.ambientColor;
    this.primaryColor = config.primaryColor;
    AppStorage.setOrCreate('lightEffectChanged', Date.now());
    AppStorage.setOrCreate('airspaceDensityChanged', density);
  }

  public autoCalculateDensity(aircraftCount: number, capacity: number, conflictRisk: number): AirspaceDensity {
    const utilization = aircraftCount / capacity;
    if (conflictRisk > 0.8) return AirspaceDensity.DANGEROUS;
    if (utilization > 0.9 || conflictRisk > 0.6) return AirspaceDensity.CONGESTED;
    if (utilization > 0.7 || conflictRisk > 0.4) return AirspaceDensity.DENSE;
    if (utilization > 0.4) return AirspaceDensity.NORMAL;
    return AirspaceDensity.SPARSE;
  }

  public getCurrentConfig(): AirspaceLightConfig {
    return AirspaceLightTheme.LIGHT_MAP[this.currentDensity];
  }

  public getNavigationMaterial(): object {
    const config = this.getCurrentConfig();
    return {
      systemMaterialEffect: {
        materialType: hdsMaterial.MaterialType.ADAPTIVE,
        materialLevel: hdsMaterial.MaterialLevel.ADAPTIVE,
        effect: config.materialEffect
      }
    };
  }
}

// 飞行器接口
export interface Aircraft {
  id: string;
  callsign: string;
  type: 'delivery' | 'evtolt' | 'inspection' | 'emergency' | 'agriculture';
  position: { lat: number; lng: number; alt: number };
  velocity: { vx: number; vy: number; vz: number };
  status: 'enroute' | 'hovering' | 'landing' | 'emergency';
  batteryLevel: number;
  missionId: string;
}

// 冲突项接口
export interface ConflictItem {
  id: string;
  aircraftA: string;
  aircraftB: string;
  conflictType: 'collision' | 'wake_turbulence' | 'airspace_violation';
  severity: AirspaceDensity;
  predictedTime: number;
  separation: number;
  resolution: string;
}

export const airspaceLightTheme = new AirspaceLightTheme();

3.2 HMAF四层空域管控智能体架构(UAVAgentScheduler.ets)

代码亮点 :本模块是"航界智脑"的核心智能层,实现了"空域感知-路径规划-冲突消解-应急调度"四层智能体协作架构。通过Agent Framework Kit创建多智能体会话,四个Agent并行处理空域数据,结果实时汇聚到3D空域视窗。关键创新在于利用Intents Kit解析调度员的管控意图(如"规划从深圳湾到前海的物流航线,避开禁飞区"),自动触发对应Agent协作并调整界面空域光效。

typescript 复制代码
// entry/src/main/ets/agents/UAVAgentScheduler.ets

import { 
  hmaf, 
  AgentSession, 
  AgentMode, 
  TaskMessage, 
  TaskResult 
} from '@kit.AgentFrameworkKit';
import { intents, IntentEngine, IntentResult } from '@kit.IntentsKit';
import { airspaceLightTheme, AirspaceDensity, Aircraft, ConflictItem } from '../theme/AirspaceLightTheme';

export enum AgentType {
  AIRSPACE_PERCEPTION = 'airspace_perception',
  PATH_PLANNER = 'path_planner',
  CONFLICT_RESOLUTION = 'conflict_resolution',
  EMERGENCY_DISPATCH = 'emergency_dispatch'
}

export enum MissionStage {
  PERCEPTION = 'perception',
  PLANNING = 'planning',
  RESOLUTION = 'resolution',
  DISPATCH = 'dispatch'
}

export interface PerceptionResult {
  totalAircraft: number;
  airspaceUtilization: number;
  weatherStatus: string;
  noFlyZones: number;
  communicationQuality: number;
}

export class UAVAgentScheduler {
  private session: AgentSession | null = null;
  private intentEngine: IntentEngine | null = null;
  private aircrafts: Map<string, Aircraft> = new Map();
  private conflicts: Map<string, ConflictItem> = new Map();
  private perceptionResult: PerceptionResult | null = null;

  private onPerceptionReady?: (result: PerceptionResult) => void;
  private onPathsPlanned?: (paths: FlightPath[]) => void;
  private onConflictsResolved?: (resolutions: ConflictResolution[]) => void;
  private onEmergencyDispatched?: (dispatch: EmergencyResponse) => void;
  private onStageChanged?: (stage: MissionStage) => void;

  public async initialize(): Promise<void> {
    this.session = await hmaf.createAgentSession({
      mode: AgentMode.MULTI_AGENT,
      config: {
        maxConcurrentAgents: 4,
        timeout: 30000,
        enableDistributed: true
      }
    });

    this.intentEngine = await intents.createIntentEngine({
      supportedDomains: ['uav_management', 'airspace_control', 'flight_planning', 'emergency_response']
    });

    await this.registerAgents();
    console.info('UAVAgentScheduler initialized');
  }

  private async registerAgents(): Promise<void> {
    if (!this.session) return;

    // 1. 空域感知Agent
    await this.session.registerAgent({
      agentId: AgentType.AIRSPACE_PERCEPTION,
      capabilities: ['ads_b_fusion', 'radar_tracking', '5ga_sensing', 'weather_integration'],
      promptTemplate: `
        你是空域感知专家。融合多源数据构建实时空域态势:
        - ADS-B:自动相关监视广播,获取飞行器位置、高度、速度
        - 雷达跟踪:一次/二次雷达,覆盖低慢小目标
        - 5G-A通感一体:基站感知,补充盲区覆盖
        - 气象集成:实时风场、降水、能见度、对流天气
        
        返回JSON格式: {
          "totalAircraft": 156,
          "airspaceUtilization": 0.72,
          "weatherStatus": "良好,风速3级",
          "noFlyZones": 3,
          "communicationQuality": 0.98
        }
      `
    });

    // 2. 路径规划Agent
    await this.session.registerAgent({
      agentId: AgentType.PATH_PLANNER,
      capabilities: ['dynamic_routing', '4d_trajectory', 'energy_optimization', 'geo_fencing'],
      promptTemplate: `
        你是无人机路径规划专家。基于实时态势规划最优航迹:
        - 动态路由:A*、RRT*、强化学习混合算法
        - 4D航迹:经度、纬度、高度、时间四维优化
        - 能耗优化:考虑风速、电池状态、载荷重量
        - 地理围栏:自动规避禁飞区、限高区、人口密集区
        
        返回JSON格式: [{"pathId": "path_1", "waypoints": [{"lat": 22.5, "lng": 114.0, "alt": 120, "time": 0}], "estimatedEnergy": 85, "flightTime": 420}]
      `
    });

    // 3. 冲突消解Agent
    await this.session.registerAgent({
      agentId: AgentType.CONFLICT_RESOLUTION,
      capabilities: ['conflict_detection', 'trajectory_adjustment', 'speed_advisory', 'altitude_reservation'],
      promptTemplate: `
        你是空域冲突消解专家。预测并化解飞行冲突:
        - 冲突检测:基于4D航迹的冲突概率预测(蒙特卡洛模拟)
        - 航迹调整:水平偏置、垂直分层、速度调整
        - 速度建议:加速穿越、减速等待、盘旋等待
        - 高度预留:动态分配飞行高度层
        
        返回JSON格式: [{"conflictId": "conf_1", "aircraftA": "UAV001", "aircraftB": "UAV015", "resolution": "UAV001爬升至150米", "successRate": 0.99}]
      `
    });

    // 4. 应急调度Agent
    await this.session.registerAgent({
      agentId: AgentType.EMERGENCY_DISPATCH,
      capabilities: ['failure_prediction', 'diversion_planning', 'rescue_coordination', 'backup_activation'],
      promptTemplate: `
        你是应急响应调度专家。处置突发事件:
        - 故障预测:基于传感器数据的故障早期预警
        - 备降规划:最近安全着陆点动态计算
        - 救援协调:联动消防、医疗、公安力量
        - 备份激活:备用通信链路、备用飞行器接管
        
        返回JSON格式: {"emergencyId": "emg_1", "type": "通信中断", "severity": "high", "responseTime": 45, "backupPlan": "切换至卫星通信链路"}
      `
    });
  }

  public async processMissionIntent(input: string, missionData: object): Promise<void> {
    if (!this.session || !this.intentEngine) throw new Error('Not initialized');

    const intentResult: IntentResult = await this.intentEngine.parseIntent(input);
    const intent = intentResult.primaryIntent;
    
    console.info(`Detected UAV intent: ${intent.domain}/${intent.action}`);
    this.adjustStageByIntent(intent);

    switch (intent.action) {
      case 'perceive_airspace':
        await this.dispatchPerception(missionData);
        break;
      case 'plan_path':
        await this.dispatchPathPlanning(missionData);
        break;
      case 'resolve_conflicts':
        await this.dispatchConflictResolution(Array.from(this.aircrafts.values()));
        break;
      case 'dispatch_emergency':
        await this.dispatchEmergency(missionData);
        break;
      case 'full_mission':
        await this.dispatchFullMission(missionData);
        break;
      default:
        await this.dispatchFullMission(missionData);
    }
  }

  private adjustStageByIntent(intent: IntentResult['primaryIntent']): void {
    const stageMap: Record<string, MissionStage> = {
      'perceive_airspace': MissionStage.PERCEPTION,
      'plan_path': MissionStage.PLANNING,
      'resolve_conflicts': MissionStage.RESOLUTION,
      'dispatch_emergency': MissionStage.DISPATCH
    };
    this.onStageChanged?.(stageMap[intent.action] || MissionStage.PERCEPTION);
  }

  private async dispatchPerception(missionData: object): Promise<void> {
    const task: TaskMessage = {
      targetAgent: AgentType.AIRSPACE_PERCEPTION,
      taskType: 'perceive',
      payload: missionData,
      priority: 1
    };
    const result = await this.session!.sendTask(task);
    this.perceptionResult = JSON.parse(result.data);
    this.onPerceptionReady?.(this.perceptionResult);
    AppStorage.setOrCreate('perceptionResult', this.perceptionResult);
  }

  private async dispatchPathPlanning(missionData: object): Promise<void> {
    const task: TaskMessage = {
      targetAgent: AgentType.PATH_PLANNER,
      taskType: 'plan',
      payload: missionData,
      priority: 2
    };
    const result = await this.session!.sendTask(task);
    const paths: FlightPath[] = JSON.parse(result.data);
    this.onPathsPlanned?.(paths);
    AppStorage.setOrCreate('flightPaths', paths);
  }

  private async dispatchConflictResolution(aircrafts: Aircraft[]): Promise<void> {
    const task: TaskMessage = {
      targetAgent: AgentType.CONFLICT_RESOLUTION,
      taskType: 'resolve',
      payload: { aircrafts },
      priority: 3
    };
    const result = await this.session!.sendTask(task);
    const resolutions: ConflictResolution[] = JSON.parse(result.data);
    
    // 更新空域密度光效
    const conflictCount = resolutions.length;
    const density = airspaceLightTheme.autoCalculateDensity(
      aircrafts.length, 
      200, 
      conflictCount / Math.max(aircrafts.length, 1)
    );
    airspaceLightTheme.switchAirspaceLight(density);
    
    this.onConflictsResolved?.(resolutions);
    AppStorage.setOrCreate('conflictResolutions', resolutions);
    AppStorage.setOrCreate('conflictStats', {
      total: conflictCount,
      resolved: resolutions.filter(r => r.successRate > 0.9).length,
      pending: resolutions.filter(r => r.successRate <= 0.9).length
    });
  }

  private async dispatchEmergency(missionData: object): Promise<void> {
    const task: TaskMessage = {
      targetAgent: AgentType.EMERGENCY_DISPATCH,
      taskType: 'dispatch',
      payload: missionData,
      priority: 1 // 紧急任务最高优先级
    };
    const result = await this.session!.sendTask(task);
    const emergency: EmergencyResponse = JSON.parse(result.data);
    this.onEmergencyDispatched?.(emergency);
    AppStorage.setOrCreate('emergencyResponse', emergency);
  }

  private async dispatchFullMission(missionData: object): Promise<void> {
    await this.dispatchPerception(missionData);
    await this.dispatchPathPlanning(missionData);
    const allAircrafts = Array.from(this.aircrafts.values());
    await this.dispatchConflictResolution(allAircrafts);
  }

  public setCallbacks(callbacks: object): void {
    Object.assign(this, callbacks);
  }

  public getMissionData(): object {
    return {
      aircrafts: Array.from(this.aircrafts.values()),
      conflicts: Array.from(this.conflicts.values()),
      perceptionResult: this.perceptionResult
    };
  }
}

export interface FlightPath {
  pathId: string;
  waypoints: Array<{ lat: number; lng: number; alt: number; time: number }>;
  estimatedEnergy: number;
  flightTime: number;
}

export interface ConflictResolution {
  conflictId: string;
  aircraftA: string;
  aircraftB: string;
  resolution: string;
  successRate: number;
}

export interface EmergencyResponse {
  emergencyId: string;
  type: string;
  severity: string;
  responseTime: number;
  backupPlan: string;
}

export const uavAgentScheduler = new UAVAgentScheduler();

3.3 悬浮任务导航(MissionFloatNavigation.ets)

代码亮点 :本模块实现了"任务阶段即导航"的悬浮页签系统。底部悬浮导航承载"空域感知-路径规划-冲突消解-应急调度"四个任务阶段,实时显示冲突统计徽章和空域密度角标。采用HdsTabs悬浮样式配合systemMaterialEffect实现玻璃拟态+空域光效的双重效果。

typescript 复制代码
// entry/src/main/ets/components/MissionFloatNavigation.ets

import { HdsTabs, HdsTabsController, hdsMaterial } from '@kit.UIDesignKit';
import { airspaceLightTheme, AirspaceDensity } from '../theme/AirspaceLightTheme';
import { MissionStage } from '../agents/UAVAgentScheduler';

@Component
export struct MissionFloatNavigation {
  @StorageLink('currentMissionStage') currentStage: MissionStage = MissionStage.PERCEPTION;
  @StorageLink('currentAirspaceDensity') currentDensity: AirspaceDensity = AirspaceDensity.SPARSE;
  @StorageLink('primaryLightColor') primaryColor: string = '#27AE60';
  @StorageLink('navTransparency') navTransparency: number = 0.75;
  @State conflictStats: { total: number; resolved: number; pending: number } = 
    { total: 0, resolved: 0, pending: 0 };
  
  private hdsTabController: HdsTabsController = new HdsTabsController();
  
  private readonly STAGE_CONFIG: Record<MissionStage, { color: string; icon: Resource; label: string }> = {
    [MissionStage.PERCEPTION]: { color: '#3498DB', icon: $r('app.media.icon_radar'), label: '空域感知' },
    [MissionStage.PLANNING]: { color: '#1ABC9C', icon: $r('app.media.icon_route'), label: '路径规划' },
    [MissionStage.RESOLUTION]: { color: '#E67E22', icon: $r('app.media.icon_resolve'), label: '冲突消解' },
    [MissionStage.DISPATCH]: { color: '#E74C3C', icon: $r('app.media.icon_emergency'), label: '应急调度' }
  };

  aboutToAppear(): void {
    AppStorage.link('conflictStats').onChange((value: typeof this.conflictStats) => {
      this.conflictStats = value;
    });
  }

  build() {
    Column() {
      this.DensityPulseIndicator()
      
      HdsTabs({
        controller: this.hdsTabController,
        barPosition: BarPosition.End
      }) {
        TabContent() { this.PerceptionContent() }
        .tabBar(this.buildStageTabBar('感知', MissionStage.PERCEPTION, 0))
        
        TabContent() { this.PlanningContent() }
        .tabBar(this.buildStageTabBar('规划', MissionStage.PLANNING, 0))
        
        TabContent() { this.ResolutionContent() }
        .tabBar(this.buildStageTabBar('消解', MissionStage.RESOLUTION, 
          this.conflictStats.pending))
        
        TabContent() { this.DispatchContent() }
        .tabBar(this.buildStageTabBar('应急', MissionStage.DISPATCH, 0))
      }
      .width('96%')
      .height(72)
      .backgroundColor(`rgba(255, 255, 255, ${this.navTransparency})`)
      .borderRadius(20)
      .shadow({ radius: 16, color: 'rgba(0, 0, 0, 0.12)', offsetX: 0, offsetY: 4 })
      .barFloatingStyle({
        barBottomMargin: 16,
        gradientMask: { maskColor: '#66F1F3F5', maskHeight: 92 },
        systemMaterialEffect: {
          materialType: hdsMaterial.MaterialType.ADAPTIVE,
          materialLevel: hdsMaterial.MaterialLevel.ADAPTIVE
        }
      })
      .border({ width: 1.5, color: this.primaryColor + '44', radius: 20 })
    }
    .width('100%')
    .padding({ bottom: 12 })
  }

  @Builder
  DensityPulseIndicator(): void {
    Row() {
      Row()
        .width(48)
        .height(4)
        .backgroundColor(this.primaryColor)
        .borderRadius(2)
        .shadow({ radius: 8, color: this.primaryColor + '66' })
        .animation({
          duration: airspaceLightTheme.getCurrentConfig().pulseSpeed,
          iterations: -1,
          curve: Curve.EaseInOut
        })
        .opacity(0.5 + Math.sin(AppStorage.get<number>('densityPulsePhase') || 0) * 
          airspaceLightTheme.getCurrentConfig().pulseIntensity)
    }
    .width('100%')
    .justifyContent(FlexAlign.Center)
    .margin({ bottom: 8 })
  }

  @Builder
  buildStageTabBar(title: string, stage: MissionStage, badgeCount: number): void {
    Column() {
      Stack() {
        Image(this.STAGE_CONFIG[stage].icon)
          .width(24)
          .height(24)
          .fillColor(this.currentStage === stage ? this.STAGE_CONFIG[stage].color : '#666666')
        
        if (badgeCount > 0) {
          Text(badgeCount.toString())
            .fontSize(10)
            .fontColor('#FFFFFF')
            .backgroundColor(stage === MissionStage.RESOLUTION ? '#E74C3C' : this.STAGE_CONFIG[stage].color)
            .borderRadius(8)
            .padding({ left: 4, right: 4 })
            .position({ x: 16, y: -6 })
        }
      }
      .width(32)
      .height(32)
      
      Text(title)
        .fontSize(12)
        .fontColor(this.currentStage === stage ? this.STAGE_CONFIG[stage].color : '#999999')
        .margin({ top: 4 })
    }
    .width('100%')
    .onClick(() => {
      this.currentStage = stage;
      AppStorage.setOrCreate('missionStageChanged', stage);
    })
  }

  @Builder PerceptionContent(): void {}
  @Builder PlanningContent(): void {}
  @Builder ResolutionContent(): void {}
  @Builder DispatchContent(): void {}
}

3.4 主3D空域视窗与飞行器渲染(AirspaceControlPage.ets)

代码亮点:本模块实现了3D空域的核心可视化层。基于WebGL渲染城市低空三维场景,每个飞行器根据类型渲染专属光晕效果,冲突预测路径以红色虚线显示。关键创新在于"冲突飞行器呼吸光"------预测到冲突的飞行器在3D视窗中以对应风险等级的颜色脉冲闪烁,引导调度员快速定位风险。

typescript 复制代码
// entry/src/main/ets/pages/AirspaceControlPage.ets

import { WebGLRenderingContext } from '@kit.ArkUI';
import { window } from '@kit.WindowManagerKit';
import { airspaceLightTheme, AirspaceDensity, Aircraft, ConflictItem } from '../theme/AirspaceLightTheme';
import { uavAgentScheduler, MissionStage, PerceptionResult } from '../agents/UAVAgentScheduler';
import { MissionFloatNavigation } from '../components/MissionFloatNavigation';

@Entry
@Component
struct AirspaceControlPage {
  @StorageLink('currentAirspaceDensity') currentDensity: AirspaceDensity = AirspaceDensity.SPARSE;
  @StorageLink('ambientLightColor') ambientColor: string = '#E8F8F0';
  @StorageLink('primaryLightColor') primaryColor: string = '#27AE60';
  @StorageLink('currentMissionStage') currentStage: MissionStage = MissionStage.PERCEPTION;
  
  @State aircrafts: Aircraft[] = [];
  @State conflicts: ConflictItem[] = [];
  @State perceptionResult: PerceptionResult | null = null;
  @State selectedAircraftId: string = '';
  @State isControlling: boolean = false;
  @State pulsePhase: number = 0;
  
  private glContext: WebGLRenderingContext | null = null;
  private readonly AIRCRAFT_COLORS: Record<string, string> = {
    'delivery': '#1ABC9C',
    'evtolt': '#F1C40F',
    'inspection': '#BDC3C7',
    'emergency': '#C0392B',
    'agriculture': '#58D68D'
  };

  aboutToAppear(): void {
    uavAgentScheduler.initialize().then(() => {
      uavAgentScheduler.setCallbacks({
        onPerceptionReady: (result) => { this.perceptionResult = result; },
        onPathsPlanned: (paths) => {
          // 更新飞行器路径
        },
        onConflictsResolved: (resolutions) => {
          // 更新冲突状态
        },
        onStageChanged: (stage) => { this.currentStage = stage; }
      });
    });

    this.startDensityPulseAnimation();
    this.loadDemoAirspace();
    this.setupImmersiveWindow();
  }

  private startDensityPulseAnimation(): void {
    const animate = () => {
      this.pulsePhase = (this.pulsePhase + 0.03) % (Math.PI * 2);
      AppStorage.setOrCreate('densityPulsePhase', this.pulsePhase);
      requestAnimationFrame(animate);
    };
    animate();
  }

  private async loadDemoAirspace(): Promise<void> {
    const demoData = {
      region: '深圳前海',
      timeSlot: '2026-06-02T10:00:00',
      expectedFlights: 156
    };
    this.isControlling = true;
    await uavAgentScheduler.processMissionIntent('全面管控前海空域', demoData);
    this.isControlling = false;
  }

  private async setupImmersiveWindow(): Promise<void> {
    const win = await window.getLastWindow(getContext());
    await win.setWindowLayoutFullScreen(true);
    await win.setWindowSystemBarEnable([]);
    await win.setWindowBackgroundColor('#00000000');
    await win.setWindowMinWidth(1600);
    await win.setWindowMinHeight(1000);
  }

  private async openPathPlanWindow(): Promise<void> {
    const want = {
      deviceId: '',
      bundleName: getContext().applicationInfo.name,
      abilityName: 'PathPlanAbility',
      parameters: { aircraftData: JSON.stringify(this.aircrafts) }
    };
    await getContext().startAbility(want);
  }

  private async openConflictAlertWindow(): Promise<void> {
    const want = {
      deviceId: '',
      bundleName: getContext().applicationInfo.name,
      abilityName: 'ConflictAlertAbility',
      parameters: { conflictsData: JSON.stringify(this.conflicts) }
    };
    await getContext().startAbility(want);
  }

  private async openWeatherRadarWindow(): Promise<void> {
    const want = {
      deviceId: '',
      bundleName: getContext().applicationInfo.name,
      abilityName: 'WeatherRadarAbility',
      parameters: {}
    };
    await getContext().startAbility(want);
  }

  build() {
    Stack() {
      Column()
        .width('100%')
        .height('100%')
        .backgroundColor(this.ambientColor)
        .animation({ duration: 800, curve: Curve.EaseInOut })

      Column() {
        Row() {
          Row() {
            Circle()
              .width(10)
              .height(10)
              .fill(this.primaryColor)
              .shadow({ radius: 6, color: this.primaryColor + '80' })
            
            Text(airspaceLightTheme.getCurrentConfig().densityLabel)
              .fontSize(13)
              .fontColor(this.primaryColor)
              .margin({ left: 6 })
          }

          Blank()

          Text('航界智脑')
            .fontSize(18)
            .fontWeight(FontWeight.Bold)
            .fontColor('#333333')

          Blank()

          Row({ space: 12 }) {
            Button('航迹规划')
              .fontSize(12)
              .backgroundColor(this.primaryColor + '1A')
              .fontColor(this.primaryColor)
              .borderRadius(6)
              .onClick(() => this.openPathPlanWindow())

            Button('冲突预警')
              .fontSize(12)
              .backgroundColor(this.primaryColor + '1A')
              .fontColor(this.primaryColor)
              .borderRadius(6)
              .onClick(() => this.openConflictAlertWindow())

            Button('气象雷达')
              .fontSize(12)
              .backgroundColor(this.primaryColor + '1A')
              .fontColor(this.primaryColor)
              .borderRadius(6)
              .onClick(() => this.openWeatherRadarWindow())
          }
        }
        .width('100%')
        .height(56)
        .padding({ left: 24, right: 24 })
        .backgroundColor('rgba(255, 255, 255, 0.85)')
        .backdropFilter($r('sys.blur.20'))
        .alignItems(VerticalAlign.Center)

        if (this.perceptionResult) {
          Row() {
            Text(`飞行器:${this.perceptionResult.totalAircraft}架`)
              .fontSize(11)
              .fontColor('#666666')
            Text(`利用率:${(this.perceptionResult.airspaceUtilization * 100).toFixed(0)}%`)
              .fontSize(11)
              .fontColor('#666666')
              .margin({ left: 16 })
            Text(`通信:${(this.perceptionResult.communicationQuality * 100).toFixed(0)}%`)
              .fontSize(11)
              .fontColor(this.primaryColor)
              .margin({ left: 16 })
            if (this.isControlling) {
              Text('管控中...')
                .fontSize(11)
                .fontColor(this.primaryColor)
                .margin({ left: 16 })
                .animation({
                  duration: 1000,
                  iterations: -1,
                  curve: Curve.EaseInOut
                })
                .opacity(0.5 + Math.sin(this.pulsePhase) * 0.5)
            }
          }
          .width('100%')
          .height(36)
          .padding({ left: 24, right: 24 })
          .backgroundColor('rgba(255, 255, 255, 0.6)')
        }

        // 3D空域视窗
        WebGLView({ context: this.glContext })
          .width('100%')
          .layoutWeight(1)
          .backgroundColor('#0A1628')
          .borderRadius(12)
          .margin(16)
          .shadow({ radius: 12, color: 'rgba(0, 0, 0, 0.1)', offsetX: 0, offsetY: 4 })

        Column() {
          MissionFloatNavigation()
        }
        .width('100%')
      }
      .width('100%')
      .height('100%')
    }
    .width('100%')
    .height('100%')
  }
}

// WebGLView组件占位,实际实现需接入WebGL渲染引擎
@Component
struct WebGLView {
  @Prop context: WebGLRenderingContext | null;
  build() {
    Stack() {
      Text('3D Airspace View')
        .fontSize(16)
        .fontColor('#FFFFFF')
    }
    .width('100%')
    .height('100%')
    .backgroundColor('#0A1628')
  }
}

3.5 浮动冲突预警窗口(ConflictAlertAbility.ets)

代码亮点:本模块实现了浮动冲突预警窗口,按冲突严重程度和类型分组显示。支持点击冲突项自动定位到3D空域视窗中的对应飞行器,并同步切换主窗口的空域光效氛围。

typescript 复制代码
// entry/src/main/ets/conflictability/ConflictAlertAbility.ets

import { window } from '@kit.WindowManagerKit';
import { airspaceLightTheme, AirspaceDensity, ConflictItem } from '../theme/AirspaceLightTheme';

@Entry
@Component
struct ConflictAlertPage {
  @StorageLink('currentAirspaceDensity') currentDensity: AirspaceDensity = AirspaceDensity.SPARSE;
  @StorageLink('primaryLightColor') primaryColor: string = '#27AE60';
  
  @State conflicts: ConflictItem[] = [];
  @State isWindowFocused: boolean = true;
  @State selectedConflictId: string = '';

  aboutToAppear(): void {
    const params = getContext().abilityInfo?.parameters;
    if (params?.conflictsData) {
      this.conflicts = JSON.parse(params.conflictsData);
    }
    this.setupFocusListener();
  }

  private async setupFocusListener(): Promise<void> {
    const win = await window.getLastWindow(getContext());
    win.on('windowFocusChange', (isFocused: boolean) => {
      this.isWindowFocused = isFocused;
    });
  }

  private getGroupedConflicts(): Record<AirspaceDensity, ConflictItem[]> {
    const grouped: Record<AirspaceDensity, ConflictItem[]> = {
      [AirspaceDensity.DANGEROUS]: [],
      [AirspaceDensity.CONGESTED]: [],
      [AirspaceDensity.DENSE]: [],
      [AirspaceDensity.NORMAL]: [],
      [AirspaceDensity.SPARSE]: []
    };
    this.conflicts.forEach(c => grouped[c.severity].push(c));
    return grouped;
  }

  private getConflictColor(type: string): string {
    const map: Record<string, string> = {
      'collision': '#E74C3C',
      'wake_turbulence': '#F39C12',
      'airspace_violation': '#9B59B6'
    };
    return map[type] || '#999999';
  }

  private getStatusColor(status: AirspaceDensity): string {
    const map: Record<AirspaceDensity, string> = {
      [AirspaceDensity.SPARSE]: '#27AE60',
      [AirspaceDensity.NORMAL]: '#3498DB',
      [AirspaceDensity.DENSE]: '#F39C12',
      [AirspaceDensity.CONGESTED]: '#E67E22',
      [AirspaceDensity.DANGEROUS]: '#E74C3C'
    };
    return map[status];
  }

  build() {
    Column() {
      Row() {
        Circle().width(10).height(10).fill(this.primaryColor)
          .shadow({ radius: 6, color: this.primaryColor + '80' })
        Text('冲突预警').fontSize(16).fontWeight(FontWeight.Bold).fontColor('#333333').margin({ left: 8 })
        Blank()
        Text(`${this.conflicts.length}项冲突`).fontSize(12).fontColor('#999999')
      }
      .width('100%').height(48).padding({ left: 16, right: 16 })
      .backgroundColor('rgba(255, 255, 255, 0.9)')
      .borderRadius({ topLeft: 16, topRight: 16 })

      List() {
        const grouped = this.getGroupedConflicts();
        const order: AirspaceDensity[] = [AirspaceDensity.DANGEROUS, AirspaceDensity.CONGESTED, AirspaceDensity.DENSE];

        ForEach(order, (severity: AirspaceDensity) => {
          const confs = grouped[severity];
          if (confs.length === 0) return;

          ListItem() {
            Row() {
              Row().width(4).height(16).backgroundColor(this.getStatusColor(severity)).borderRadius(2).margin({ right: 8 })
              Text(`${this.getSeverityLabel(severity)} (${confs.length})`)
                .fontSize(13).fontWeight(FontWeight.Bold).fontColor(this.getStatusColor(severity))
            }
            .width('100%').height(36).padding({ left: 16, right: 16 })
            .backgroundColor(this.getStatusColor(severity) + '0D')
          }

          ForEach(confs, (conf: ConflictItem) => {
            ListItem() {
              Column() {
                Row() {
                  Circle().width(8).height(8).fill(this.getConflictColor(conf.conflictType))
                  Text(conf.conflictType.toUpperCase())
                    .fontSize(11).fontColor(this.getConflictColor(conf.conflictType))
                    .margin({ left: 6 })
                  Blank()
                  Text(`${conf.predictedTime.toFixed(1)}s后`)
                    .fontSize(12).fontColor('#E74C3C')
                }
                .width('100%')
                
                Text(`${conf.aircraftA} ↔ ${conf.aircraftB}`)
                  .fontSize(12).fontColor('#666666').margin({ top: 4 })
                
                Text(`间距:${conf.separation.toFixed(1)}m | 方案:${conf.resolution}`)
                  .fontSize(11).fontColor('#999999').margin({ top: 4 })
              }
              .width('100%').padding(12)
              .backgroundColor(this.selectedConflictId === conf.id ? this.getStatusColor(severity) + '1A' : '#FFFFFF')
              .borderRadius(8)
              .border({ width: 1, color: this.selectedConflictId === conf.id ? this.getStatusColor(severity) + '4D' : '#F0F0F0', radius: 8 })
              .onClick(() => {
                this.selectedConflictId = conf.id;
                airspaceLightTheme.switchAirspaceLight(conf.severity);
                AppStorage.setOrCreate('selectedConflictId', conf.id);
                AppStorage.setOrCreate('focusConflictAircraft', [conf.aircraftA, conf.aircraftB]);
              })
            }
          })
        })
      }
      .width('100%').layoutWeight(1).padding(12).scrollBar(BarState.Auto)

      Row() {
        Text(`总计:${this.conflicts.length}项冲突`).fontSize(12).fontColor('#999999')
      }
      .width('100%').height(40).padding({ left: 16, right: 16 })
      .justifyContent(FlexAlign.Center).borderTop({ width: 0.5, color: '#EEEEEE' })
    }
    .width('100%').height('100%')
    .backgroundColor('rgba(255, 255, 255, 0.9)')
    .backdropFilter($r('sys.blur.20'))
    .borderRadius(16)
    .shadow({ radius: 24, color: 'rgba(0, 0, 0, 0.15)', offsetX: 0, offsetY: 8 })
    .opacity(this.isWindowFocused ? 1.0 : 0.65)
    .animation({ duration: 300, curve: Curve.EaseInOut })
  }

  private getSeverityLabel(severity: AirspaceDensity): string {
    const labels: Record<AirspaceDensity, string> = {
      [AirspaceDensity.SPARSE]: '稀疏',
      [AirspaceDensity.NORMAL]: '正常',
      [AirspaceDensity.DENSE]: '密集',
      [AirspaceDensity.CONGESTED]: '拥堵',
      [AirspaceDensity.DANGEROUS]: '危险'
    };
    return labels[severity];
  }
}

四、关键技术总结

4.1 HMAF无人机管控开发清单

技术点 API/方法 应用场景
多智能体会话 hmaf.createAgentSession({ mode: MULTI_AGENT }) 四层Agent协作管控
意图解析 intents.createIntentEngine({ supportedDomains }) 管控意图理解
空域感知Agent AgentType.AIRSPACE_PERCEPTION ADS-B/雷达/5G-A融合
路径规划Agent AgentType.PATH_PLANNER 动态4D航迹优化
冲突消解Agent AgentType.CONFLICT_RESOLUTION 冲突预测与规避
应急调度Agent AgentType.EMERGENCY_DISPATCH 故障处置与救援

4.2 空域密度光效映射

空域密度 主色调 脉冲速度 典型场景
稀疏 #27AE60 翠绿 4000ms 郊区空域
正常 #3498DB 淡蓝 3500ms 城市低空
密集 #F39C12 暖黄 2500ms 物流枢纽
拥堵 #E67E22 紧迫橙 1800ms 高峰时段
危险 #E74C3C 危险红 1000ms 冲突区域

4.3 飞行器类型光效标识

飞行器类型 光晕色 标识意义
物流无人机 #1ABC9C 蓝绿 快递配送
载人eVTOL #F1C40F 金黄 城市空中交通
巡检无人机 #BDC3C7 银白 基础设施巡检
应急救援 #C0392B 深红 紧急医疗/消防
农业植保 #58D68D 翠绿 农田作业

五、运行效果展示

5.1 空域感知阶段 - 稀疏光效

初始化管控郊区空域,界面呈现翠绿色光效:3D视窗中飞行器稀疏分布,物流无人机蓝绿光晕,底部导航脉冲缓慢,传递"空域畅通、自由飞行"的直觉。

5.2 路径规划阶段 - 密集光效

规划物流枢纽高峰时段航线,界面切换为暖黄色光效:飞行器密度增加,部分区域黄色预警,底部导航"消解"页签角标显示待处理冲突数。

5.3 冲突消解阶段 - 危险光效

检测到两架eVTOL预测碰撞,界面切换为危险红色光效:急促脉冲(1秒周期)配合顶部警示光条,冲突飞行器红色闪烁,浮动冲突预警窗口自动弹出,强烈提示"立即执行规避指令"。


六、总结与展望

本文基于HarmonyOS 6(API 23)的悬浮导航沉浸光感HMAF智能体框架特性,完整实战了一款面向PC端的"航界智脑"AI智能体无人机集群任务规划与空域协同管理工作台。核心创新点:

  1. HMAF四层管控智能体:空域感知Agent(ADS-B/雷达/5G-A融合)、路径规划Agent(动态4D航迹优化)、冲突消解Agent(冲突预测与规避)、应急调度Agent(故障处置与救援),实现"空域感知→航迹规划→冲突消解→应急响应"的全链路自动化

  2. 空域密度光效系统:五种空域密度拥有专属光效人格(稀疏翠绿→正常淡蓝→密集暖黄→拥堵紧迫橙→危险警示红),实现空管人员"一眼感知空域压力"

  3. 悬浮任务导航:底部悬浮页签承载"空域感知-路径规划-冲突消解-应急调度"四个任务阶段,实时显示冲突统计徽章

  4. PC级多窗口协同管控 :主3D空域视窗 + 浮动航迹规划 + 浮动冲突预警 + 浮动气象雷达的四层架构,通过AppStorage实现跨窗口光效同步

  5. 管控意图沉浸感知:通过Intents Kit解析调度员意图,自动触发对应Agent协作并调整界面空域光效

未来扩展方向

  • 分布式低空管控:PC主控管控+塔台协同+无人机机载边缘计算的三端流转
  • 实时数字孪生:接入城市CIM平台,实现物理空域与数字空域的实时映射
  • AI辅助决策:基于历史飞行数据,智能体自动推荐最优流量管理策略
  • 跨境空域协同:支持粤港澳大湾区等跨境低空走廊的统一管控与协调

转载自:https://blog.csdn.net/u014727709/article/details/161614703

欢迎 👍点赞✍评论⭐收藏,欢迎指正

相关推荐
haven-8521 小时前
AI Agent 生态核心概念详解:Agent、MCP、Skill 与 JSON-RPC
人工智能·rpc·json
是小崔啊1 小时前
AI-常见的AI概念
人工智能
Debroon1 小时前
偶像1:自我定义 + 价值创造 + 承担代价 + 目标坚定
人工智能
DS随心转小程序1 小时前
ChatGPT和Gemini输出乱码怎么解决?借助AI导出鸭高效处理
人工智能·ai·chatgpt·豆包·deepseek·ai导出鸭
Super Scraper1 小时前
如何将赋予千问(Qwen Code)网络检索功能:集成MCP服务器
人工智能·爬虫·ai·自动化·千问·mcp·qwen code
花伤情犹在1 小时前
2026 AI Agent 工具全景:执行层、编排层与 IDE 层的分工与选型
ide·人工智能
道友可好1 小时前
Superpowers:给 AI 编程助手装上超能力
前端·人工智能·后端
庞白OS1 小时前
一次ds对话
大数据·人工智能
一抹烟霞1 小时前
# 视频隐空间基础
人工智能·音视频