Skip to content

AI智能轨迹

项目文件与模型下载

https://luoxue.lanzout.com/b0fpmq8ah

lua
-- 常量
local MAX_POINTS = 500
local FPS = 60
local TARGET_RADIUS = 15
local WIDTH_AIM = 800
local HEIGHT_AIM = 600
StartMJPEGServer()

-- 随机整数函数
local function randi(lo, hi)
    return math.random(lo, hi)
end
print("运行成功后点右上角预览功能,选择一个预览方式即可看到效果")
-- 1. 初始化 AI 预测器
local ai = TrajectoryPredictor_B("D6ADE61C_20250906_214559.hmm",640,0)

-- 2. 初始位置和目标
local curr_x, curr_y = 100.0, 100.0
local tgt_x, tgt_y   = 600.0, 400.0

-- 轨迹记录
local trail = {}
table.insert(trail, {x=curr_x, y=curr_y})


-- 创建画布
local canvas = createBlank(WIDTH_AIM, HEIGHT_AIM, 0, 0, 0)

while true do
    -- 计算与目标的偏移
    local dx_t = tgt_x - curr_x
    local dy_t = tgt_y - curr_y
    local dist = math.sqrt(dx_t*dx_t + dy_t*dy_t)

    local vx, vy = 0.0, 0.0
    if dist < 10.0 then
        -- 到达目标 -> 产生新目标
        tgt_x = randi(50, WIDTH_AIM - 50)
        tgt_y = randi(50, HEIGHT_AIM - 50)
    else
        -- 进行轨迹推理
        local dx_step, dy_step = ai:Predict(dx_t, dy_t)
        vx = dx_step
        vy = dy_step
    end

    curr_x = curr_x + vx
    curr_y = curr_y + vy

    -- 记录轨迹
    table.insert(trail, {x=curr_x, y=curr_y})
    if #trail > MAX_POINTS then
        table.remove(trail, 1)
    end

    -- 绘制
    canvas = createBlank(WIDTH_AIM, HEIGHT_AIM, 0, 0, 0)

    -- 目标(红色)
    drawCircle(canvas, math.floor(tgt_x), math.floor(tgt_y),
               TARGET_RADIUS, 0, 0, 255, -1)

    -- 轨迹(绿色)
    for _, p in ipairs(trail) do
        drawCircle(canvas, math.floor(p.x), math.floor(p.y), 2, 0,255,0, -1)
    end

    -- 当前点(蓝色)
    drawCircle(canvas, math.floor(curr_x), math.floor(curr_y), 5, 255, 0, 0, -1)

    -- 推送处理后的图片到前端
    StreamPushFrame(canvas)

    -- FPS帧率控制器
    sleep((1000 / FPS) / 1000)

end