当前位置: 首页 > article >正文

四轴无人机飞控核心:深入理解MPU6050数据融合与STM32的PID控制环路

四轴无人机飞控核心深入理解MPU6050数据融合与STM32的PID控制环路当四轴无人机在风中稳稳悬停时很少有人会思考这背后精妙的控制艺术。就像杂技演员走钢丝时不断调整身体姿态一样无人机也在以每秒数百次的速度进行着微观调整。这种看似简单的稳定性背后隐藏着传感器数据融合与闭环控制的精密协作。1. MPU6050传感器无人机的内耳系统MPU6050作为六轴惯性测量单元(IMU)相当于无人机的平衡感知器官。它包含的三轴加速度计和三轴陀螺仪分别测量线性加速度和角速度但单独使用任一组数据都无法获得准确的姿态信息。1.1 传感器特性与原始数据处理加速度计通过测量重力在各轴的分量来计算姿态角在静态环境下精度较高。但在动态飞行中电机振动和运动加速度会引入显著噪声。典型的加速度计输出需要经过以下处理// 原始数据读取示例 void MpuGetData(void) { uint8_t buffer[12]; IIC_read_Bytes(MPU6050_ADDRESS, 0x3B, buffer, 6); // 读取加速度计 IIC_read_Bytes(MPU6050_ADDRESS, 0x43, buffer[6], 6); // 读取陀螺仪 for(int i0; i6; i){ pMpu[i] (((int16_t)buffer[i1]8) | buffer[(i1)1]) - MpuOffset[i]; } }陀螺仪直接测量角速度积分后可得角度变化但存在积分漂移问题。下表对比了两类传感器的特性特性加速度计陀螺仪测量物理量线性加速度(m/s²)角速度(°/s)输出噪声高频振动噪声显著相对平滑但存在温漂动态响应延迟明显(约300ms)即时响应(约5ms)长期稳定性无累积误差积分导致角度漂移适用场景低频姿态估计高频动态变化测量1.2 传感器校准精度保障的第一步在正式飞行前必须进行传感器校准以消除零偏误差。校准过程需要将无人机水平静止放置采集数百组数据求取平均值void MpuGetOffset(void) { int32_t buffer[6] {0}; // 等待传感器稳定 while(!isStable()) delay_ms(10); // 采集356组数据舍弃前100组 for(int i0; i356; i) { MpuGetData(); if(i 100) { for(int k0; k6; k) buffer[k] pMpu[k]; } } // 计算平均值作为偏移量 for(int i0; i6; i) MpuOffset[i] buffer[i]8; FLASH_write(MpuOffset, 6); // 存储到Flash }注意校准环境应远离强磁场干扰且校准后建议重启飞控以确保参数生效。实际飞行中还可考虑温度补偿算法来应对传感器温漂。1.3 数据融合算法互补滤波与卡尔曼滤波数据融合的核心是扬长避短——结合加速度计的低频精度和陀螺仪的高频响应。互补滤波是最简单的实现方式姿态角 α×(上一时刻姿态 陀螺仪积分) (1-α)×加速度计角度其中α(0α1)是滤波系数典型值在0.95-0.98之间。以下是C语言实现float complementaryFilter(float accelAngle, float gyroRate, float prevAngle, float dt) { const float alpha 0.96; return alpha * (prevAngle gyroRate * dt) (1-alpha) * accelAngle; }对于更高要求的应用卡尔曼滤波能提供最优估计。它通过预测-更新两个阶段动态调整对两种传感器数据的信任权重// 一维卡尔曼滤波实现 void kalman_1(struct _1_ekf_filter* ekf, float input) { // 预测阶段 ekf-x_pred ekf-x_last; ekf-p_pred ekf-p_last ekf-q; // 更新阶段 ekf-kg ekf-p_pred / (ekf-p_pred ekf-r); ekf-out ekf-x_pred ekf-kg * (input - ekf-x_pred); ekf-p_now (1 - ekf-kg) * ekf-p_pred; // 更新状态 ekf-x_last ekf-out; ekf-p_last ekf-p_now; }实际应用中针对俯仰(Pitch)、横滚(Roll)和偏航(Yaw)三个轴向需要独立维护滤波状态。偏航角因缺乏有效的加速度计参考通常需要结合磁力计或GPS数据进行修正。2. 串级PID控制无人机的小脑机制获得准确姿态信息后需要将其转化为电机控制指令。PID控制器通过比例(P)、积分(I)、微分(D)三个环节的组合实现对误差的系统性修正。2.1 PID控制原理与参数作用标准PID控制器的离散形式可表示为输出 Kp×误差 Ki×误差积分 Kd×误差微分各参数对系统的影响如下表所示参数响应速度超调量稳态误差抗干扰性Kp↑↑↓↑Ki→↑消除↑Kd→↓→↑在无人机中通常采用串级PID结构外环角度环接收期望角度与实际角度的偏差内环角速度环接收外环输出与实际角速度的偏差// 串级PID实现示例 void CascadePID(PidObject* ratePid, PidObject* anglePid, float dt) { // 外环计算 anglePid-error anglePid-desired - anglePid-measured; anglePid-integral anglePid-error * dt; anglePid-derivative (anglePid-error - anglePid-prevError) / dt; anglePid-out anglePid-kp * anglePid-error anglePid-ki * anglePid-integral anglePid-kd * anglePid-derivative; // 外环输出作为内环期望 ratePid-desired anglePid-out; // 内环计算 pidUpdate(ratePid, dt); }2.2 参数整定方法与实战技巧PID参数整定是飞控调试的核心环节建议按照以下步骤进行先内环后外环首先调稳角速度环(Kp≈0.5, Ki≈0, Kd≈0.01)再调试角度环先比例后积分从Kp开始逐步加入Ki和Kd小幅度渐进每次调整不超过原值的30%安全测试在系留状态下进行限制电机最大输出典型调试过程记录表示例测试轮次KpKiKd响应表现问题分析10.300反应迟钝无法抵抗风扰比例增益不足20.800出现明显振荡需增加微分抑制超调30.800.02振荡减弱但仍有稳态误差需增加积分消除余差40.80.20.02响应快速且稳定达到理想状态提示不同尺寸和重量的无人机需要不同的PID参数。建议将参数保存在Flash中方便随时调整和切换#define PID_PARAM_ADDR 0x0800F000 // Flash存储地址 void savePIDParams(PidObject* pid) { uint16_t data[3] { (uint16_t)(pid-kp * 1000), (uint16_t)(pid-ki * 1000), (uint16_t)(pid-kd * 1000) }; FLASH_write(data, sizeof(data)); }2.3 控制量分配与电机混控得到三个轴向的控制输出后需要将其合理分配到四个电机。对于X型布局的四轴无人机混控算法如下M1 油门 Pitch Roll - Yaw M2 油门 Pitch - Roll Yaw M3 油门 - Pitch Roll Yaw M4 油门 - Pitch - Roll - Yaw对应代码实现void MotorControl() { // 基础油门量(100-700范围) int16_t thr LIMIT(Remote.thr - 1000, 0, 600) 100; // 控制量分配 MOTOR1 thr pidRateY.out pidRateX.out - pidRateZ.out; MOTOR2 thr pidRateY.out - pidRateX.out pidRateZ.out; MOTOR3 thr - pidRateY.out pidRateX.out pidRateZ.out; MOTOR4 thr - pidRateY.out - pidRateX.out - pidRateZ.out; // 限制输出范围 MOTOR1 LIMIT(MOTOR1, 0, 800); MOTOR2 LIMIT(MOTOR2, 0, 800); MOTOR3 LIMIT(MOTOR3, 0, 800); MOTOR4 LIMIT(MOTOR4, 0, 800); }实际飞行中还需考虑以下因素电机饱和保护当某电机达到最大输出时需等比例限制其他电机电池电压补偿随着电量下降相同PWM占空比对应的推力会减小飞行模式切换姿态模式与定高/定点模式的控制策略不同3. 系统集成与实时调度将传感器数据处理与控制算法有机结合需要精心设计的系统架构和任务调度策略。3.1 飞控软件架构设计典型飞控软件采用分层架构硬件抽象层传感器驱动、PWM输出等算法处理层姿态解算、PID控制等应用逻辑层飞行模式、安全保护等通信接口层遥控器、地面站通信等任务调度通常基于定时器中断实现例如// 定时器中断处理函数 void TIM1_UP_IRQHandler(void) { static uint8_t counter 0; if(TIM_GetITStatus(TIM1, TIM_IT_Update) ! RESET) { // 1kHz任务IMU数据读取 MpuGetData(); // 500Hz任务姿态解算 if(counter % 2 0) { AttitudeEstimation(); } // 250Hz任务PID控制 if(counter % 4 0) { FlightPidControl(0.004); // dt4ms } // 100Hz任务遥控器处理 if(counter % 10 0) { RC_Analy(); } TIM_ClearITPendingBit(TIM1, TIM_IT_Update); } }3.2 状态机设计与飞行逻辑无人机的状态管理通常采用有限状态机(FSM)实现典型状态包括初始化传感器校准、参数加载待机等待解锁指令准备电机低速运转飞行正常控制模式紧急停止检测到异常立即停转typedef enum { STATE_INIT, STATE_STANDBY, STATE_ARMED, STATE_FLYING, STATE_EMERGENCY } FlightState; void FlightStateMachine() { static FlightState state STATE_INIT; switch(state) { case STATE_INIT: if(SensorCalibrated()) state STATE_STANDBY; break; case STATE_STANDBY: if(RemoteUnlockCmd()) { MotorsLowSpeed(); state STATE_ARMED; } break; case STATE_ARMED: if(RemoteThrottleUp()) { state STATE_FLYING; } else if(RemoteDisarmCmd()) { MotorsStop(); state STATE_STANDBY; } break; case STATE_FLYING: if(RemoteDisarmCmd() || CheckEmergency()) { MotorsStop(); state STATE_EMERGENCY; } break; case STATE_EMERGENCY: // 需要手动复位才能退出紧急状态 break; } }3.3 性能优化技巧在资源受限的STM32上实现高效飞控需要注意定点数运算对于M3/M4内核使用Q格式定点数比浮点数更快查表法三角函数等复杂运算可预先计算存储DMA应用传感器数据读取使用DMA减少CPU占用堆栈管理控制递归深度避免栈溢出// 使用Q15格式的定点数乘法 #define Q15_MUL(a, b) ((int32_t)(a) * (b) 15) // 预计算的sin/cos表Q15格式 const int16_t sin_table[91] { 0, 804, 1608, 2412, 3216, 4018, 4820, 5620, 6418, 7214, 8008, 8799, 9588, 10373, 11154, // ... 其余数值省略 }; int16_t q15_sin(int16_t angle_deg) { angle_deg % 360; if(angle_deg 0) angle_deg 360; if(angle_deg 90) return sin_table[angle_deg]; else if(angle_deg 180) return sin_table[180 - angle_deg]; else if(angle_deg 270) return -sin_table[angle_deg - 180]; else return -sin_table[360 - angle_deg]; }4. 高级话题与故障排查掌握了基础原理后可以进一步探索更高级的控制技术和常见问题解决方法。4.1 扩展卡尔曼滤波(EKF)实践对于更复杂的运动状态估计可将卡尔曼滤波扩展到多维度typedef struct { float x[6]; // 状态向量: [角度;角速度] float P[6][6]; // 协方差矩阵 float Q[6][6]; // 过程噪声 float R[2][2]; // 观测噪声 } EKF_Attitude; void EKF_Predict(EKF_Attitude* ekf, float gyro[3], float dt) { // 状态预测: x F*x B*u for(int i0; i3; i) { ekf-x[i] ekf-x[i3] * dt; // 角度 角速度*dt ekf-x[i3] gyro[i]; // 角速度 陀螺仪测量 } // 协方差预测: P F*P*F Q // ... 矩阵运算实现省略 } void EKF_Update(EKF_Attitude* ekf, float accel[3]) { // 计算观测预测 float predicted_acc[3] { sin(ekf-x[1]), // pitch -sin(ekf-x[0]), // roll cos(ekf-x[0]) * cos(ekf-x[1]) // z轴 }; // 卡尔曼增益计算: K P*H*(H*P*H R)^-1 // ... 矩阵运算实现省略 // 状态更新: x x K*(z - H*x) // 协方差更新: P (I - K*H)*P }4.2 常见故障与诊断方法飞行中可能遇到的问题及排查步骤无人机持续朝一个方向漂移检查加速度计校准验证遥控器中立点调整PID的I项抑制稳态误差高频振荡抽搐现象降低P增益增加D增益检查电机/螺旋桨是否松动响应迟缓增加P增益检查电池电压是否充足验证传感器更新速率解锁后立即翻覆检查电机顺序和转向验证飞控安装方向重新校准陀螺仪重要提示每次调试前务必进行系留测试确保安全。建议在飞控中加入黑匣子功能记录飞行数据用于事后分析typedef struct { uint32_t timestamp; int16_t accel[3]; int16_t gyro[3]; int16_t motor[4]; int16_t pid_out[3]; } FlightLog; void saveToFlash(FlightLog* log) { static uint32_t addr FLASH_LOG_BASE; if(addr FLASH_LOG_END) { FLASH_write(addr, (uint8_t*)log, sizeof(FlightLog)); addr sizeof(FlightLog); } }4.3 未来发展方向随着技术的进步无人机控制领域仍在不断发展自适应PID控制根据飞行状态自动调整参数神经网络控制利用机器学习优化控制策略容错控制在部分传感器或电机失效时保持稳定集群协同多无人机编队飞行与协作这些高级主题虽然复杂但都建立在本文介绍的基础原理之上。理解MPU6050数据融合和PID控制的本质是探索更先进控制方法的前提。

相关文章:

四轴无人机飞控核心:深入理解MPU6050数据融合与STM32的PID控制环路

四轴无人机飞控核心:深入理解MPU6050数据融合与STM32的PID控制环路 当四轴无人机在风中稳稳悬停时,很少有人会思考这背后精妙的控制艺术。就像杂技演员走钢丝时不断调整身体姿态一样,无人机也在以每秒数百次的速度进行着微观调整。这种看似简…...

nli-MiniLM2-L6-H768入门必看:无需训练、纯本地的零样本文本分类工具

nli-MiniLM2-L6-H768入门必看:无需训练、纯本地的零样本文本分类工具 1. 工具概述 nli-MiniLM2-L6-H768是一款基于cross-encoder/nli-MiniLM2-L6-H768轻量级NLI模型开发的本地零样本文本分类工具。它彻底改变了传统文本分类需要大量标注数据和训练过程的繁琐流程&…...

语言模型在物理构建任务中的表现与挑战

1. 语言模型在物理构建任务中的表现与挑战最近在BuilderBench基准测试中的实验揭示了当前最先进语言模型(如GPT-5.2、Claude Opus 4.6和Gemini 3 Flash)作为智能代理在物理构建任务中的表现。这些模型在简单任务上表现良好,但在27项困难任务中…...

LFM2.5-VL-1.6B效果展示:科研论文图→方法复现步骤图文拆解+公式解释

LFM2.5-VL-1.6B效果展示:科研论文图→方法复现步骤图文拆解公式解释 1. 模型概述 LFM2.5-VL-1.6B是由Liquid AI推出的轻量级多模态大模型,专为端侧和边缘设备设计。这个模型结合了1.2B参数的语言模型和约400M参数的视觉模型,总参数量为1.6B…...

MATLAB/Simulink仿真研究:基于下垂控制的蓄电池SOC均衡策略

MATLAB/Simulink仿真,蓄电池SOC均衡 采用下垂控制,根据自身容量选择出力,直流母线电压、功率保持稳定无波动 MATLAB/Simulink仿真,蓄电池SOC均衡(锂电池) 根据微网内功率盈余,两组SOC不同的蓄电…...

【限时开放】Java 25虚拟线程高并发调优手册(含Arthas动态注入vthread堆栈、Prometheus自定义指标采集脚本)

第一章:Java 25虚拟线程高并发调优全景概览Java 25正式将虚拟线程(Virtual Threads)从预览特性转为标准特性,并深度整合进JVM线程调度、监控与诊断体系。相比传统平台线程,虚拟线程以极低内存开销(约1KB栈空…...

Blazor 2026配置避坑大全,12个高频崩溃场景+对应csproj/.cshtml/.razor配置修复代码块

第一章:Blazor 2026配置避坑大全导论Blazor 2026 引入了多项底层运行时增强与项目模板重构,但其默认配置在跨平台构建、AOT 预编译、HTTP/3 支持及 WASM 主机生命周期管理等场景中存在隐性兼容陷阱。开发者若沿用 Blazor 2024 或更早版本的经验直接升级&…...

当大模型开始控制设备:我是怎么理解 Agent 架构的

一、前言:什么是 OFA VQA 模型? OFA(One For All)是字节跳动提出的多模态预训练模型,支持视觉问答、图像描述、图像编辑等多种任务,其中视觉问答(VQA)是最常用的功能之一——输入一张…...

如何永久保存微信聊天记录:WeChatMsg让你的数字记忆永不丢失

如何永久保存微信聊天记录:WeChatMsg让你的数字记忆永不丢失 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...

nli-MiniLM2-L6-H768应用场景:数字政府12345热线工单与政策法规条款智能关联

nli-MiniLM2-L6-H768应用场景:数字政府12345热线工单与政策法规条款智能关联 1. 引言:政务热线面临的挑战 在数字政府建设中,12345政务服务便民热线每天都会收到大量市民咨询和投诉工单。传统处理方式面临两大痛点: 人工匹配效…...

Spring Boot 自动配置触发机制详解

Spring Boot 自动配置触发机制详解 Spring Boot以其“约定优于配置”的理念,极大简化了Spring应用的开发流程。其中,自动配置(Auto-Configuration)是其核心特性之一,能够根据项目依赖和上下文环境智能加载所需的配置。…...

从老式万用表到手机拍照:聊聊AD转换技术是怎么‘润物细无声’地改变我们生活的

从老式万用表到手机拍照:AD转换技术如何重塑现代生活 上世纪八十年代,一位电子工程师调试电路时,总会盯着指针式万用表的表盘,观察那根微微颤动的金属针——这是模拟时代最直观的测量方式。而今天,我们只需掏出手机拍照…...

GPU加速批量轨迹优化GATO在机器人MPC中的应用

1. GATO:GPU加速批量轨迹优化如何革新机器人MPC在工业机械臂高速分拣或四足机器人动态越障的场景中,传统控制算法常面临一个致命瓶颈——当需要同时处理数十种可能的运动轨迹方案时,CPU算力往往捉襟见肘。这正是我们团队开发GATO(…...

248MHz RISC-V MCU还能这么玩?手把手教你用AG32VF407内置的2KLE CPLD做高速数据采集

248MHz RISC-V MCU与2KLE CPLD的协同设计实战:构建高速数据采集系统 当传统MCU遇到多路高速信号采集需求时,开发者常面临两种选择:要么增加昂贵的专用芯片,要么外挂FPGA/CPLD实现硬件并行处理。AG32VF407的独特之处在于&#xff0…...

Phi-mini-MoE-instruct效果实测:长文本摘要+关键信息抽取双任务

Phi-mini-MoE-instruct效果实测:长文本摘要关键信息抽取双任务 1. 模型概览 Phi-mini-MoE-instruct是一款轻量级混合专家(MoE)指令型小语言模型,在多项基准测试中展现出卓越性能: 代码能力:在RepoQA、Hu…...

瑞萨RL78单片机Bootloader实战:手把手教你配置User工程(CS+ for CACX环境)

瑞萨RL78单片机Bootloader实战:CS for CACX环境下的User工程全流程配置 在嵌入式系统开发中,Bootloader的设计与实现往往是项目成功的关键一环。不同于常见的ARM架构单片机,瑞萨RL78系列在Bootloader开发方面的公开资料相对匮乏,这…...

CatBoost在房价预测中的优势与实践

1. CatBoost简介与房价预测背景CatBoost作为梯度提升决策树(GBDT)家族的重要成员,由Yandex团队于2017年推出。与其他提升算法相比,它最显著的特点是对类别型特征的原生支持。在房价预测这类典型场景中,我们经常会遇到大…...

3个简单步骤,让你在Windows上获得终极免费媒体播放体验

3个简单步骤,让你在Windows上获得终极免费媒体播放体验 【免费下载链接】mpc-hc MPC-HCs main repository. For support use our Trac: https://trac.mpc-hc.org/ 项目地址: https://gitcode.com/gh_mirrors/mpc/mpc-hc 你是否厌倦了臃肿的商业播放器&#x…...

Transformer跳跃连接原理与工程实践详解

1. 跳跃连接在Transformer模型中的核心价值我第一次在Vision Transformer中尝试引入跳跃连接时,准确率直接提升了7个百分点——这个结果让我意识到,这个看似简单的结构远比想象中重要。跳跃连接(Skip Connection)本质上是将神经网…...

nli-MiniLM2-L6-H768一文详解:轻量NLI模型如何兼顾速度与语义理解能力

nli-MiniLM2-L6-H768一文详解:轻量NLI模型如何兼顾速度与语义理解能力 1. 模型概述 nli-MiniLM2-L6-H768是一款基于Transformer架构的轻量级自然语言推理(NLI)模型,由微软研究院开发。作为MiniLM系列的第二代产品,它在保持小模型体积的同时…...

EasyAnimateV5-7b-zh-InP企业落地案例:某MCN机构日均生成200+条短视频提效实录

EasyAnimateV5-7b-zh-InP企业落地案例:某MCN机构日均生成200条短视频提效实录 1. 引言:当短视频制作遇上AI生产力革命 “每天要出200条短视频,每条都要有创意、有画面、有节奏,团队已经连续加班三个月了。” 这是去年年底&…...

染色设备数据采集远程监控系统方案

当前,纺织厂染色车间虽已实现PLC控制的自动化生产,涵盖化料、配料、加料及pH自动调节等环节,生产效率显著提升。但设备运行状态仍依赖人工巡检,pH、温度等关键工艺参数需定时抄录,最终再录入车间管理系统。此种模式存在…...

如何快速掌握跨平台绘图工具:简单三步解决方案

如何快速掌握跨平台绘图工具:简单三步解决方案 【免费下载链接】drawio-desktop Official electron build of draw.io 项目地址: https://gitcode.com/GitHub_Trending/dr/drawio-desktop 还在为不同操作系统间的Visio文件兼容性问题而烦恼吗?&am…...

ComfyUI-Impact-Pack架构揭秘:AI图像生成中的模块化与可扩展性设计

ComfyUI-Impact-Pack架构揭秘:AI图像生成中的模块化与可扩展性设计 【免费下载链接】ComfyUI-Impact-Pack Custom nodes pack for ComfyUI This custom node helps to conveniently enhance images through Detector, Detailer, Upscaler, Pipe, and more. 项目地…...

NVIDIA Profile Inspector深度实战:解锁显卡隐藏性能的完整技术指南

NVIDIA Profile Inspector深度实战:解锁显卡隐藏性能的完整技术指南 【免费下载链接】nvidiaProfileInspector 项目地址: https://gitcode.com/gh_mirrors/nv/nvidiaProfileInspector NVIDIA Profile Inspector是一款能够深度访问NVIDIA驱动内部游戏配置文件…...

哪些降重软件可以同时降低查重率和AIGC疑似率?2026年5款顶流工具深度黑盒实测

引言:在2026年的盲审里,你的论文正面临一场“被猎杀”的灾难 几天前,我的一个直博学弟在实验室崩溃大哭。他苦熬大半年、查重率仅有3.2%的完美终稿,在学院第一波预审中被无情“斩立决”。退回的理由极其刺眼:系统判定…...

手把手调试:用Wireshark抓包分析SIP REFER实现呼叫转移的完整流程(含NOTIFY消息解读)

手把手调试:用Wireshark抓包分析SIP REFER实现呼叫转移的完整流程(含NOTIFY消息解读) 在VoIP和实时通信系统中,SIP(Session Initiation Protocol)作为核心信令协议,其REFER方法在实现呼叫转移功…...

哈氏训练助力孩子克服作业拖延症与情绪表达困难

哈氏训练在克服作业拖延症中的应用与效果分析 哈氏训练是一种有效的方式,旨在帮助孩子面对作业拖延症。这种训练方法通过结构化的任务管理技巧,帮助孩子建立良好的学习习惯。在训练过程中,孩子学会将大任务分解为小步骤,从而减轻心…...

Real-Anime-Z部署案例:Z-Image底座+LoRA融合全流程详解(含safetensors加载)

Real-Anime-Z部署案例:Z-Image底座LoRA融合全流程详解(含safetensors加载) 1. 项目概述 Real-Anime-Z是一款基于Stable Diffusion技术的写实向动漫风格大模型,采用独特的2.5D风格设计,在保留真实质感的同时强化动漫美…...

从相似推荐到异常检测:手把手用PyTorch实现余弦相似度与欧氏距离的实战项目

从相似推荐到异常检测:手把手用PyTorch实现余弦相似度与欧氏距离的实战项目 在推荐系统和异常检测领域,相似度计算是最基础也最核心的技术之一。想象一下,当你在电商平台浏览商品时,系统如何精准推荐你可能喜欢的其他商品&#xf…...