【滤波跟踪】基于自适应卡尔曼滤波器来实现无人机对无人车的追踪附matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。

🍎 往期回顾关注个人主页:Matlab科研工作室

 👇 关注我领取海量matlab电子书和数学建模资料 

🍊个人信条:格物致知,完整Matlab代码获取及仿真咨询内容私信。

🔥 内容介绍 

一、背景

(一)无人机追踪无人车应用场景

在现代科技发展背景下,无人机对无人车的追踪在多个领域具有重要应用。在智能交通系统中,无人机可追踪无人车,用于实时监测交通流量、路况,辅助无人车规划最优路径,提高整体交通效率。在物流配送场景里,无人机能追踪运输货物的无人车,实时掌握运输状态,及时发现潜在问题,如车辆故障、偏离路线等,保障货物按时、准确送达。在安防监控领域,无人机追踪无人车可用于边境巡逻、重要区域安保等任务,增强安全防控能力。

(二)追踪面临的挑战

然而,实现无人机对无人车的精确追踪面临诸多挑战。一方面,无人车的运动具有不确定性,其行驶速度、方向可能因路况、任务需求等因素频繁变化,这使得准确预测其位置变得困难。另一方面,环境因素会对追踪造成干扰,如恶劣天气(暴雨、沙尘等)会影响传感器性能,导致获取的无人车位置信息不准确;复杂地形(山区、城市高楼林立区域)可能遮挡信号,使无人机与无人车之间的通信中断或数据传输不完整。此外,无人机自身的运动也存在噪声和误差,如飞行姿态的微小变动会影响其对无人车位置的测量精度。

(三)自适应卡尔曼滤波器的优势

自适应卡尔曼滤波器为解决这些挑战提供了有效途径。与传统卡尔曼滤波器相比,它能够根据系统状态的变化自动调整滤波器参数,更好地适应无人车运动的不确定性以及环境干扰。自适应卡尔曼滤波器可以实时估计系统噪声和测量噪声的统计特性,从而在不同的情况下都能保持较高的追踪精度,增强追踪系统的鲁棒性和可靠性,满足无人机对无人车追踪在复杂多变环境下的需求。

二、原理

(一)卡尔曼滤波器基础原理

(二)自适应卡尔曼滤波器原理

  1. 噪声估计与调整:自适应卡尔曼滤波器的核心在于能够实时估计过程噪声协方差 Qk 和观测噪声协方差 Rk。常见的自适应方法有基于极大似然估计、自适应遗忘因子等。以基于极大似然估计为例,通过对观测数据的统计分析,计算出使得观测数据出现概率最大的噪声协方差值。具体来说,假设在一段时间内收集了一系列观测值 {zi}i=1k,根据卡尔曼滤波器的预测和更新公式,建立关于 Qk 和 Rk 的似然函数 L(Qk,Rk),通过优化算法(如梯度下降法)求解使 L(Qk,Rk) 最大的 Qk 和 Rk 值。这样,当无人车运动状态发生变化(如突然加速、转弯)或环境干扰改变(如进入不同天气区域)时,自适应卡尔曼滤波器能够自动调整噪声协方差,使滤波器更好地适应实际情况,提高追踪精度。
  2. 模型自适应调整:除了噪声协方差的自适应估计,自适应卡尔曼滤波器还可以对状态转移模型和观测模型进行自适应调整。例如,当发现无人车的运动模式与原状态转移模型假设不符时(如原本假设无人车做匀速直线运动,实际开始做曲线运动),可以通过对观测数据的分析和机器学习算法,调整状态转移矩阵 Fk 的参数,使其更符合无人车的实际运动。同样,对于观测模型,如果发现传感器在某些情况下测量误差较大,可以调整观测矩阵 Hk 或增加观测方程的补偿项,以提高观测数据与实际状态之间的映射准确性。这种模型的自适应调整进一步增强了自适应卡尔曼滤波器在复杂多变环境下追踪无人车的能力。

通过基于自适应卡尔曼滤波器,无人机能够更准确地追踪无人车,克服无人车运动不确定性和环境干扰带来的挑战,为相关应用场景提供可靠的追踪解决方案。

⛳️ 运行结果

📣 部分代码

clc; clear;

%% Load Data

load('uav_ekf_output.mat');  % Should contain: v_uav, omega_uav

load('ugv_ekf_output.mat');  % Should contain: v_ugv, omega_ugv

tags = readtable('noisy_apriltag_data.csv');

v_ugv = [vx_ugv, vy_ugv,zeros(1000,1)];

v_uav = [vx_uav',vy_uav',vz_uav'];

% Extract measurements

z_meas = [tags.rel_x, tags.rel_y, tags.rel_z];

% Time step (assumed constant)

dt = 0.025;  % 40 Hz sampling

% Data length

N = size(z_meas, 1);

%% EKF Initialization

x_est = zeros(6, N);          % [x, y, z, vx, vy, vz]

P = eye(6);                   % Initial state covariance

% Process noise covariance (Q)

Q = diag([0.01, 0.01, 0.01, 0.1, 0.1, 0.1]);

% Measurement noise covariance (R)

R = diag([0.05, 0.05, 0.05]);   % Tuned for AprilTag noise

% State transition matrix (linearized)

F = [eye(3), dt * eye(3);

     zeros(3), eye(3)];

% Observation model (H)

H = [eye(3), zeros(3)];

tic

%% EKF Loop

for k = 2:N-1

    % Relative velocity = ugv - uav

    rel_v = v_ugv(k, :) - v_uav(k, :);

    %% Prediction Step

    x_pred = F * x_est(:, k-1);

    x_pred(4:6) = rel_v';  % Update velocity directly from inputs

    P_pred = F * P * F' + Q;

    %% Measurement Update

    z = z_meas(k, :)';

    z_pred = H * x_pred;

    y = z - z_pred;                         % Innovation

    S = H * P_pred * H' + R;                % Innovation covariance

    K = P_pred * H' / S;                    % Kalman gain

    x_est(:, k) = x_pred + K * y;           % State update

    P = (eye(6) - K * H) * P_pred;          % Covariance update

end

ex_time = toc

%% Plot Results

time = (0:N-1) * dt;

time = (0:N-1);

figure;

plot(time, x_est(1,:), 'r-', time, z_meas(:,1), 'b--');grid on,

ylabel('Relative X [m]'); legend('EKF', 'AprilTag');

xlabel('Time');

ylim([-30 25]);

figure,

plot(time, x_est(2,:), 'r-', time, z_meas(:,2), 'b--');grid on,

ylabel('Relative Y [m]'); legend('EKF', 'AprilTag');

xlabel('Time');

ylim([-25 20]);

figure,

plot(time, x_est(3,:), 'r-', time, z_meas(:,3), 'b--');grid on,

ylabel('Relative Z [m]'); legend('EKF', 'AprilTag');

xlabel('Time');

ylim([-10 10]);

🔗 参考文献

[1] 朱自谦.一种用于机动目标跟踪的新自适应卡尔曼滤波算法[C]//1990年控制理论及其年会应用论文集(3).1990.DOI:10.1007/BF02943552.

[2] 唐思嘉,王其,马云鹏,等.基于阈值过滤的自适应无迹卡尔曼滤波在农业无人机组合导航中的应用[J].安徽科技学院学报, 2024, 38(6):94-103.

🍅往期回顾扫扫下方二维码

Read more

ubuntu上安装OpenClaw并接入飞书机器人

ubuntu上安装OpenClaw并接入飞书机器人

大家好,我是一根甜苦瓜。今天来分享如何在本地安装openclaw并接入飞书,实现让AI给我打工。 最近AI圈更新太快了,从github copilot到cursor 到claud code ,再到codex,然后是最近火爆了的小龙虾(OpenClaw),可谓是百花齐放,应接不暇。本人也是github copilot+codex的深度用户,确实不错,所以最近打算折腾一下小龙虾,顺带教大家如何把智谱GLM 接入OpenClaw。 1. 前言 1.1 什么是openclaw 2026 年开年,AI 圈突然冒出一匹“野生黑马”——OpenClaw。这个开源个人 AI 助手项目在 GitHub 上只用了 两周时间就狂揽 15 万 Star,速度堪比开挂。 简单说,它就像给你配了一个 24 小时不下班的数字打工人: 把它部署在自己的电脑或服务器上,它就能接入 WhatsApp、Telegram、

企业微信群通知机器人添加点击链接教程(图文 / Markdown 两种方式)

在使用企业微信群通知机器人时,很多开发者会有 “能否添加可点击链接” 的需求 —— 比如推送文档地址、业务系统入口、数据报表链接等。答案是:完全可以!本文将详细介绍两种核心实现方式(图文消息 / Markdown 消息),附完整代码示例和注意事项,新手也能快速上手。 一、前置准备:已获取群机器人 Webhook 地址 在添加链接前,需先完成群机器人的创建并获取 Webhook 地址,步骤回顾: 1. 进入企业微信目标群聊 → 点击右上角 “...” → 选择 “添加群机器人” → 新建机器人并命名; 2. 创建成功后,复制系统生成的 Webhook 地址(格式类似 https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxx),后续发送请求需用到该地址。 二、两种添加点击链接的实现方式

【大模型应用篇】用 OpenClaw + 飞书打造 7x24 小时服务器运维机器人

【大模型应用篇】用 OpenClaw + 飞书打造 7x24 小时服务器运维机器人

前言 本文基于OpenClaw,也是最近超火的可在本地运行的AI Agent网关,记录从零搭建通过飞书对话管理服务器运维机器人的全过程。该机器人支持随时随地通过飞书查看服务器状态、检索日志、管理进程,其核心机制在于:由OpenClaw将聊天平台(飞书等)的消息路由至大模型,模型调用本地工具(如Shell、文件系统、浏览器)执行相应任务,最终将结果自动返回至飞书会话中,实现自动化运维交互。 架构概览 飞书 App (WebSocket 长连接)         ↕ OpenClaw Gateway (服务器上 systemd 常驻)         ↕ AI 模型 (DeepSeek v3.2/GLM 4.7)         ↕ 服务器 Shell (受白名单限制的命令执行) 核心组件: * OpenClaw Gateway:Agent 网关,管理会话、工具调用、渠道连接 * 飞书插件:通过

《机器人实践开发①:Foxglove 开发环境完整搭建指南(含常见坑位) 》

《机器人实践开发①:Foxglove 开发环境完整搭建指南(含常见坑位) 》

导语: 在机器人项目中,调试工具往往比算法本身更耗时间。Foxglove 作为新一代机器人可视化平台,提供了强大的话题订阅、视频显示、3D 展示和日志分析能力。本篇从零开始,手把手带你完成 Foxglove 的环境搭建,包含依赖安装、连接配置以及常见踩坑点。 《机器人实践开发》系列文章索引 《机器人实践开发①:Foxglove 开发环境完整搭建指南(含常见坑位)》 《机器人实践开发②:Foxglove 嵌入式移植 + CMake 集成》 《机器人实践开发③:Foxglove可视化机器人的眼睛-视频》 《机器人实践开发④:Foxglove可视化机器人的耳朵-声音》 《机器人实践开发⑤:Foxglove可视化机器人的3D显示》 《机器人实践开发⑥:Foxglove可视化机器人传感器数据》 《机器人实践开发⑦:Foxglove可视化机器人的日志显示》 《机器人实践开发⑧:Foxglove可视化机器人的地图显示》 《机器人实践开发⑨:Foxglove可视化机器人的MyBag 数据回放》 foxglove 官网 Foxglove 是一个专为机器人团队打造的平台,用于收