简介:本资源为2017年全国大学生电子设计竞赛(电赛)‘可见光室内定位’赛题的完整技术实现方案,面向备战电赛的本科生及嵌入式开发初学者,聚焦光学定位系统设计、STM32F4平台驱动开发与多传感器协同处理等核心能力训练。压缩包共280个文件,含67个头文件(h)、60个C源码(c)构成主程序逻辑与外设驱动,33个编译中间文件(o/d)和31个链接配置文件(crf)体现Keil MDK工程完整性,另有14份PDF技术文档、5个说明文本及2个Keil工程文件(uvprojx/uvoptx),整体12.56MB,结构规范,适配真实调试环境。已有198人下载学习,所有代码均经实测可直接编译运行,涵盖ADC采样、TIM定时控制、RTC时间同步、MPU姿态解算、LCD显示及LED可见光调制等关键模块,配套bat脚本与hex/axf固件便于快速部署验证,是理解电赛嵌入式系统级设计思路的优质实战参考。
1. 项目概述:重温经典赛题的技术内核
“2017年电赛-可见光室内定位.zip”这个压缩包,对于参加过或关注过全国大学生电子设计竞赛(简称“电赛”)的朋友来说,无疑是一个充满技术挑战与时代印记的“时光胶囊”。它指向的是2017年国赛的一道经典赛题——可见光室内定位装置。这道题在当时以其前瞻性和综合性,难倒了不少参赛队伍,也催生了许多精彩的技术方案。今天,我们打开这个“压缩包”,不是为了简单地复现一个作品,而是深入拆解其背后的技术逻辑、方案选型与实现细节,探讨在当年有限的四天三夜里,如何从零构建一套稳定可靠的可见光定位系统。这不仅是技术的复盘,更是对工程思维和快速原型开发能力的一次深度剖析。
这道题的核心任务,是要求制作一套利用可见光进行室内定位的装置。系统分为发射端和接收端:发射端(通常称为“灯塔”)由多个特定位置、可被独立识别的LED光源组成;接收端(移动终端)则是一个能够探测这些光源信号、并计算出自身在室内平面坐标的便携式设备。题目会给定灯塔的坐标,要求接收端在指定区域内移动,实时显示自身坐标,并完成定位精度、响应速度等指标的测试。它巧妙地将光学、信号处理、通信协议和嵌入式系统设计等多个学科知识融为一体,考察的是学生综合运用理论知识解决复杂工程问题的能力。
2. 系统整体设计与核心思路拆解
面对这样一个多学科交叉的题目,首要任务是确立清晰、可行的整体技术路线。2017年参赛时,主流方案基本围绕“时分复用(TDM)”或“频分复用(FDM)”展开,核心目标都是让接收端能够无歧义地区分来自不同位置灯塔的光信号。
2.1 技术路线选择:为什么是时分复用?
当时,摆在面前的有几条路:一是给每个LED灯加载不同频率的载波进行调制(FDM),接收端通过滤波或FFT分析来区分;二是让LED灯按照严格的时间序列轮流点亮(TDM),接收端通过判断收到光信号的时刻来区分光源。
我们最终选择了时分复用方案。原因有几个:首先,实现相对简单。对于发射端,只需要一个单片机(如STM32)控制多路LED的开关时序,逻辑清晰。对于接收端,一个高速光电传感器(如光电二极管或光敏三极管)配合ADC采样即可,无需复杂的模拟滤波电路。其次,抗干扰能力强。在室内环境中,日光灯、窗户自然光等干扰光源通常是宽频谱或频率固定的,TDM方案通过时间窗口进行区分,只要时序设计合理,就能有效规避大部分环境光干扰。最后,定位算法直接。一旦能区分出是哪个灯塔发来的信号,结合已知的灯塔坐标和接收到的信号强度或时间信息,解算坐标的模型就相对明确。
注意:FDM方案并非不可行,一些高端队伍尝试过,但它对发射端(需要多个高精度信号发生器)和接收端(需要高Q值带通滤波器或高性能数字信号处理能力)的硬件要求更高,在紧张的赛期和有限的成本下,稳定性风险更大。TDM方案更符合电赛“快速实现、稳定可靠”的基调。
2.2 系统架构框图与工作流程
整个系统可以清晰地划分为发射和接收两大模块。
发射端(灯塔系统):
- 主控单元:通常采用一块STM32F103或性能类似的单片机作为核心。
- LED驱动阵列:根据题目要求,可能需要4个或更多高亮度LED,布置在已知坐标位置。每个LED需要独立的驱动电路,能够被单片机快速、精准地控制通断。
- 时序协议:单片机运行一个严格的循环时序。例如,在一个100ms的周期内,划分为4个25ms的时隙,分别对应LED1至LED4。在每个时隙内,对应的LED以特定频率(如1kHz)的PWM波点亮,其他LED熄灭。这个PWM载波既是为了便于接收端检测(交流信号比直流信号更容易从背景噪声中提取),也是为了在不提高平均功率的前提下增加光强变化幅度,提升信噪比。
接收端(移动定位终端):
- 光电传感单元:核心是光电二极管或集成放大器的光敏传感器模块。其响应速度必须足够快,能跟上发射端PWM的频率。
- 信号调理电路:将传感器输出的微弱电流信号转换为电压信号,并经过放大、滤波(如带通滤波,滤除环境光直流分量和高频噪声),得到较为“干净”的交流信号。
- 模数转换与处理单元:另一块STM32单片机,通过ADC以远高于PWM频率的速率(如10kHz以上)对调理后的信号进行采样。
- 算法解算单元:软件核心。首先从ADC采样序列中,通过数字滤波(如移动平均、IIR滤波)和阈值判断,识别出信号的包络。然后,通过检测包络的上升沿/下降沿,判断出当前接收到的是哪个LED时隙的信号。最后,利用接收到的信号强度(RSSI, Received Signal Strength Indication)或结合时间信息,通过几何算法(如三边定位法)解算出当前位置坐标。
- 人机交互单元:通常是一个OLED或LCD显示屏,用于实时显示坐标,可能还包括按键输入等功能。
整个工作流程就像一个精密的“灯光莫尔斯电码”系统:灯塔按既定规则闪烁“密码”,移动终端接收并破译这些“密码”,从而得知自己相对于各个灯塔的方位或距离关系,最终算出自己的坐标。
3. 核心硬件电路设计与选型要点
硬件是系统稳定性的基石。在电赛的高压环境下,一个可靠的硬件设计能避免无数软件调试的坑。
3.1 发射端LED驱动电路设计
驱动电路的目标是让LED能够被单片机快速、大电流地开关。普通的单片机IO口驱动能力有限(通常20mA左右),无法直接驱动高亮度LED达到足够的照明强度,尤其是在需要一定照射距离的定位场景下。
方案选择:恒流驱动 vs. 开关驱动
- 恒流驱动:能提供稳定的光强,有利于提高RSSI定位的精度。但电路相对复杂,需要运放、基准源、三极管或MOSFET构成反馈环路,响应速度可能稍慢。
- 开关驱动:电路简单,直接用单片机PWM口通过一个三极管或MOSFET控制LED的通断。光强会随电源电压波动,但响应速度极快,非常适合TDM时序要求。
对于电赛场景,开关驱动是更务实的选择。一个经典的设计是使用N-MOSFET(如IRF540N)或NPN三极管(如SS8050)作为开关管。
// 简化的驱动电路描述 单片机PWM引脚 -> 限流电阻(如1kΩ) -> MOSFET栅极(G) LED阳极接电源正极(如5V) LED阴极接MOSFET漏极(D) MOSFET源极(S)接地在MOSFET的栅极和源极之间,建议并联一个10kΩ的电阻,确保单片机IO口处于不确定状态时MOSFET可靠关断。LED回路中必须串联一个限流电阻,其阻值根据LED的额定电流和电源电压计算。例如,对于正向压降约3V、额定电流150mA的LED,使用5V电源时,限流电阻R = (5V - 3V) / 0.15A ≈ 13.3Ω,可选择15Ω/1W的电阻。
实操心得:务必为每个LED驱动电路预留测试点,方便用示波器测量PWM波形和LED两端的实际电压电流。驱动MOSFET的IO口最好配置为推挽输出模式,确保上升/下降沿陡峭,减少开关损耗和时序误差。
3.2 接收端光电传感与调理电路
这是接收端的“眼睛”,其性能直接决定了信号的原始质量。
传感器选型:
- 光电二极管:响应速度快,线性度好,但输出电流信号非常微弱(微安级),需要后续精密放大。适合对速度要求极高的场景。
- 光敏三极管:自带放大作用,输出电流较大(毫安级),电路简单,但响应速度稍慢,线性度不如光电二极管。对于1kHz左右的PWM光信号,普通光敏三极管(如PT334-6C)完全够用。
- 集成式环境光传感器模块:如APDS-9301(数字输出,I2C接口),这类传感器集成ADC和数字处理,使用简单,但采样率和灵活性受芯片限制,且成本较高。
对于追求性价比和可控性的电赛,光敏三极管是一个平衡的选择。
信号调理电路设计: 光敏三极管输出的是电流信号,我们需要将其转换为电压信号,并滤除噪声。
- I-V转换:最简单的办法是让光敏三极管的集电极接一个上拉电阻到电源(如3.3V),发射极接地。光强变化引起电流变化,从而在集电极(输出点)产生变化的电压。这个电阻的阻值很关键,它决定了转换增益和带宽。阻值越大,同样光强变化产生的电压变化越大(灵敏度高),但RC时间常数也越大,响应速度会变慢。对于1kHz信号,可以选择1kΩ~10kΩ的电阻进行试验。
- 交流耦合:为了消除环境光产生的强烈直流偏置,必须在后级加入一个隔直电容(如10uF),形成高通滤波,只让交流的PWM信号通过。
- 放大与滤波:经过隔直后的信号幅度可能仍然较小,且含有高频噪声。需要一级或多级运放(如LM358, MCP6002)进行放大。同时,可以设计一个带通滤波器,中心频率设在PWM频率(1kHz)附近,带宽几百赫兹,能极大抑制带外噪声。一个简单的二阶有源带通滤波器(如多重反馈型)就能满足要求。
// 信号链示意 光敏三极管 -> I-V转换(上拉电阻) -> 电压跟随器(缓冲) -> 隔直电容(高通滤波) -> 带通放大滤波器 -> ADC输入注意事项:调理电路的供电必须干净,最好使用线性稳压器(如AMS1117-3.3)单独供电,并与数字电路部分进行适当的电源隔离(如使用磁珠或0Ω电阻跨接)。运放的输出摆幅要留有余量,确保最强光信号下不饱和,最弱光信号下仍高于ADC的底噪。调试时,用示波器同时观察调理电路输入和输出端的波形,是排查问题最快的方法。
3.3 主控MCU与外围电路
发射端和接收端通常各需要一块单片机。
MCU选型:STM32F103C8T6(俗称“蓝桥杯”或“最小系统板”)是当时乃至现在电赛的“国民神片”。它资源丰富(72MHz主频, 10个定时器, 2个ADC, 丰富的通信接口),生态完善,完全满足本题目需求。发射端需要精确定时产生TDM时序,接收端需要高速ADC采样和实时算法解算,F103的性能绰绰有余。
关键外围电路:
- ADC参考电压:对于接收端,ADC的参考电压精度直接影响RSSI测量的准确性。务必使用MCU的
VREF+引脚(如果引出),并连接一个稳定、低噪声的基准电压源(如TL431提供2.5V基准),而不是直接使用供电电源作为参考。 - 复位与调试:标准的SWD调试接口和复位电路必不可少,这是高效调试的生命线。
- 显示模块:0.96寸或1.3寸的OLED(I2C或SPI接口)是显示坐标的理想选择,功耗低、显示清晰。LCD1602等也可以,但信息量稍逊。
4. 软件算法实现与关键代码解析
软件是系统的灵魂,负责将硬件采集到的原始信号“翻译”成位置坐标。
4.1 发射端时序控制程序
发射端程序的核心是创建一个严格、稳定的多路PWM时序。
// 伪代码示例 (基于STM32 HAL库思路) // 假设使用TIM2产生1kHz的PWM波, TIM3控制4个时隙的切换 void Transmitter_Init(void) { // 初始化TIM2为PWM模式,频率1kHz,占空比可调(如50%) HAL_TIM_PWM_Start(&htim2, TIM_CHANNEL_1); // 初始化TIM3为定时中断,周期25ms(对应一个时隙) HAL_TIM_Base_Start_IT(&htim3); } // TIM3周期中断服务函数 void TIM3_IRQHandler(void) { static uint8_t slot = 0; // 当前时隙, 0~3 if (__HAL_TIM_GET_FLAG(&htim3, TIM_FLAG_UPDATE)) { __HAL_TIM_CLEAR_IT(&htim3, TIM_UPDATE); switch(slot) { case 0: // 关闭所有LED驱动IO LED_ALL_OFF(); // 将TIM2的PWM输出通道1映射到控制LED1的IO(通过外部电路) __HAL_TIM_SET_COMPARE(&htim2, TIM_CHANNEL_1, 500); // 50%占空比 LED1_ON(); // 使能LED1的驱动电路 break; case 1: // 类似,切换到LED2 LED_ALL_OFF(); // 可能需要重映射PWM通道或使用另一个通道 LED2_ON(); break; // ... case 2, case 3 类似 } slot = (slot + 1) % 4; // 循环切换时隙 } }关键在于时隙切换的同步性。必须在关闭上一个LED后,再开启下一个LED,中间留有极短(微秒级)的死区时间,防止接收端因光信号重叠而产生误判。同时,整个时序周期的稳定性(如100ms周期不能漂移)至关重要,这依赖于定时器的精确配置。
4.2 接收端信号处理与解码算法
接收端程序是难点,主要包括ADC采样、数字滤波、时隙识别和坐标解算。
1. ADC采样与缓冲使用STM32的ADC在DMA模式下连续采样,填充到一个环形缓冲区中。采样率需要满足奈奎斯特定律,远高于信号频率(1kHz),通常选择10kHz~20kHz。
#define ADC_BUFF_SIZE 1024 uint16_t adc_buffer[ADC_BUFF_SIZE]; // 初始化ADC和DMA,进行连续扫描模式采样2. 数字滤波与包络提取ADC采样的原始数据噪声很大。首先进行软件滤波,比如一个移动平均滤波器来平滑数据。
float moving_avg_filter(float new_sample) { static float buffer[FILTER_TAP] = {0}; static int index = 0; float sum = 0; buffer[index] = new_sample; index = (index + 1) % FILTER_TAP; for(int i=0; i<FILTER_TAP; i++) sum += buffer[i]; return sum / FILTER_TAP; }然后,需要提取信号的包络。对于等占空比的PWM方波,其包络近似为一个方波。可以通过检测滤波后数据超过某个动态阈值的时刻来判定信号的开始和结束。阈值不能是固定值,因为环境光会变。一种简单有效的方法是使用“移动窗口峰值检测法”:维护一个窗口内数据的最大值和最小值,阈值设为(最大值 + 最小值) / 2 * k(k为一个略小于1的系数,如0.8)。
3. 时隙识别与同步这是解码的关键。我们需要知道当前接收到的信号对应发射端的哪个时隙。由于发射端周期循环,接收端在启动时并不知道自己处于周期的哪个位置。因此,需要一个同步过程。
- 粗同步:上电后,接收端持续采样一段时间(如500ms),寻找连续出现的、间隔大致相等的脉冲信号。一旦识别出符合预期周期(如25ms)和个数(4个)的脉冲序列,就认为找到了一个周期的起点,完成粗同步。
- 精同步与跟踪:在后续运行中,持续预测下一个脉冲到来的时间。如果实际检测到脉冲的时间与预测时间偏差超过一定范围,则进行微调,实现动态跟踪,以对抗发射端与接收端时钟的微小漂移。
4. 坐标解算算法识别出是哪个LED的信号后,如何得到距离或角度信息?
- RSSI测距法:这是最直观的方法。通过实验,测量接收信号强度(ADC值)与接收端到该LED距离的对应关系,建立信号衰减模型(通常近似为指数衰减)。当接收到多个LED的信号强度后,就得到了到各个灯塔的距离,然后通过三边定位法解算坐标。这种方法简单,但精度严重依赖于信号衰减模型的准确性和环境的一致性(墙壁反射、其他光源干扰等)。
- 到达时间差法:如果硬件能支持极高精度的计时(纳秒级),可以测量来自不同LED信号到达的时间差,进而通过双曲线定位法解算。这对时钟同步和计时精度要求极高,在当年电赛条件下难以实现。
- 混合方法:更实用的方法是结合RSSI和几何约束。例如,由于LED通常安装在一定高度,接收端在桌面移动,这本身就是一个几何约束。可以将RSSI信息作为一个软约束,结合最小二乘法等优化算法来求解最可能的位置。
// 三边定位法伪代码(简化,假设已得到到三个灯塔A,B,C的距离da,db,dc) typedef struct {float x; float y;} Point; Point trilateration(Point A, Point B, Point C, float da, float db, float dc) { // 这是一个非线性方程组,常用最小二乘法迭代求解 // 初始化一个估计点P (如区域中心) Point P = {0.5, 0.5}; float epsilon = 0.001; // 迭代精度 for(int iter=0; iter<100; iter++) { // 计算当前估计点到各灯塔的距离 float ra = distance(P, A); float rb = distance(P, B); float rc = distance(P, C); // 计算残差(雅可比矩阵和梯度) // ... 这里涉及矩阵运算,实际代码需实现高斯-牛顿法或LM算法 // 更新估计点P // 如果更新量很小,跳出循环 } return P; }在实际电赛中,由于时间和计算资源有限,很多队伍会对RSSI-距离模型进行大量标定,并在定位区域建立查找表,直接通过测量值和查表来估算位置,牺牲一些灵活性换取速度和稳定性。
5. 系统集成调试与性能优化实战
硬件焊接完毕,代码编写完成后,最考验人的集成调试阶段就开始了。
5.1 分模块调试流程
- 发射端独立测试:不接接收端,用示波器探头分别测量每个LED驱动MOSFET的栅极和漏极波形。确认PWM频率(1kHz)、占空比(如50%)正确,确认时隙切换顺序正确且无重叠。用手机摄像头(很多手机CMOS有滚动快门效应)对着LED看,应该能看到明显的闪烁条纹,这可以直观验证LED是否在被调制。
- 接收端传感器测试:将调理电路与传感器连接好,但不接单片机ADC。用示波器观察调理电路最终输出端。用手电筒或手机闪光灯照射传感器,看输出是否有明显变化。然后用发射端的LED照射,调整发射端与接收端的距离和角度,观察示波器上是否出现清晰的、与发射端PWM同频率的正弦波或方波(取决于滤波器特性)。调整放大倍数和滤波器中心频率,使信号幅度最大、波形最干净。
- ADC采样测试:将调理电路输出接入单片机ADC。编写简单的测试程序,以DMA方式连续采样并在串口打印原始数据。用电脑绘制波形图(如使用SerialPlot、Matlab或Python的串口绘图工具),验证采样到的波形是否与示波器看到的一致。
- 解码算法离线测试:将采集到的一段ADC数据保存下来,在电脑上用MATLAB或Python编写解码算法进行仿真调试。这比在单片机上在线调试效率高得多。重点测试同步算法的鲁棒性和包络检测阈值算法的适应性。
- 系统联调:所有模块连接,上电运行。首先确保接收端能稳定同步并识别出各个LED的时隙。然后,将接收端放在已知坐标点(如灯塔正下方),观察解算出的坐标是否正确。逐步移动接收端,记录坐标输出,评估定位精度和稳定性。
5.2 常见问题与排查技巧实录
在调试过程中,一定会遇到各种“妖魔鬼怪”。下面是一些典型问题及解决思路:
| 问题现象 | 可能原因 | 排查方法与解决思路 |
|---|---|---|
| 接收端完全无信号 | 1. 传感器供电错误或损坏 2. 调理电路运放没工作 3. 信号线断路 | 1. 用万用表检查各级电源电压。 2. 用示波器从传感器输出级开始,逐级向后测量,看信号在哪一级丢失。 3. 给传感器一个强光刺激(如手机闪光灯),看调理电路输出是否有反应。 |
| 信号波形失真严重,不是规则的PWM形状 | 1. 传感器响应速度不够(光敏三极管型号不对) 2. 调理电路带宽不足(I-V电阻太大或滤波器截止频率太低) 3. 环境光干扰太强,直流偏置饱和了运放 | 1. 更换响应速度更快的光敏器件。 2. 减小I-V转换电阻,调整带通滤波器参数,提高通带频率和带宽。 3. 检查隔直电容是否正常工作,确保运放输出未饱和,可尝试在传感器前加一个物理遮光罩。 |
| 时隙识别混乱,经常错位 | 1. 发射端时序不稳定,时隙间有重叠或间隙过大 2. 接收端同步算法容错性差,受噪声干扰失步 3. 某个LED光强太弱,导致接收端无法稳定检测到其信号 | 1. 用双通道示波器同时测量两个相邻LED的驱动波形,确保严格分时无重叠。 2. 加强接收端的数字滤波,优化动态阈值算法,增加同步状态机的容错机制(如连续多次错误才判定失步)。 3. 增强该LED的驱动电流,或调整接收端朝向,或重新标定该通道的信号阈值。 |
| 定位坐标跳动大,精度差 | 1. RSSI-距离模型标定不准确或环境变化导致模型失效 2. 多径效应(墙壁、桌面反射)干扰 3. 算法中几何解算部分存在数值不稳定问题 | 1. 在比赛场地实际环境下重新进行密集的标定,建立更精确的查找表或模型参数。 2. 尝试在传感器前加一个小型遮光筒(视场角限制器),减少接收到的反射光。 3. 检查解算算法(如三边定位的最小二乘求解)中矩阵是否病态,增加正则化项或采用更稳定的求解库。 |
| 系统运行一段时间后死机 | 1. 电源问题(纹波过大、负载突变导致电压跌落) 2. 软件看门狗未启用或未及时喂狗 3. 堆栈溢出或内存泄漏 | 1. 用示波器观察系统电源轨(特别是给运放和MCU模拟部分供电的LDO输出)在系统工作时是否有异常跌落或噪声。 2. 确保启用独立看门狗(IWDG)并在线程中定期喂狗。 3. 检查是否有大的局部数组,优化递归函数,使用静态分配代替频繁动态分配。 |
独家避坑技巧:在接收端PCB布局时,将光电传感器及其调理电路部分用一条“壕沟”(即不铺铜)与数字电路部分(MCU、显示屏)隔离开,并在跨接处使用磁珠或0Ω电阻单点连接,能显著降低数字开关噪声对微弱模拟信号的干扰。调试算法时,一定要把关键变量(如ADC原始值、滤波后值、识别出的时隙编号、解算坐标)通过串口实时打印出来,并用图形化工具绘制,这比单纯看屏幕上的数字直观无数倍。
6. 竞赛策略与备赛建议延伸
虽然题目是2017年的,但其蕴含的技术方法和竞赛策略至今仍有很强的借鉴意义。
时间管理是生命线:四天三夜,必须制定严格的计划。第一天应完成核心硬件电路的设计、焊接和基础功能测试(LED驱动、传感器调理)。第二天完成发射端和接收端的基础软件框架,实现信号的发射与接收显示。第三天全力攻坚核心算法,实现时隙识别和初步定位,并进行初步标定和测试。第四天上午进行系统集成、优化和精度提升,下午则用于撰写报告、整理测试数据和准备答辩。要预留至少半天时间应对突发问题。
模块化设计与备份:将系统清晰地划分为发射板、接收板、传感器模块、显示模块等。每个模块独立供电和测试,通过排针连接。关键芯片和元器件(如MCU、运放、MOSFET)一定要有备份。画PCB时,即使时间再紧,也尽量把电源走线加粗,预留足够的测试点。
精度提升的“骚操作”:
- 多点标定与插值:不要只标定几个点。在定位区域内划分网格(如10cm间隔),逐点测量信号强度并记录坐标,形成一个庞大的查找表。定位时,通过双线性插值等方法来平滑结果,可以极大提升精度。
- 数据融合:单纯依靠RSSI不稳定,可以尝试融合其他传感器。例如,在接收端加一个廉价的MPU6050陀螺仪和加速度计,通过惯性导航(IMU)在短时间内提供相对位移信息,与可见光定位结果进行卡尔曼滤波融合,能有效平滑输出,减少跳动。
- 软件滤波:对最终解算出的坐标序列进行低通滤波(如一阶滞后滤波),
coordinate_filtered = alpha * coordinate_new + (1-alpha) * coordinate_filtered_old,选择合适的alpha值(如0.2-0.5),能在不明显增加延迟的前提下让坐标显示更稳定。
报告与测试数据准备:电赛评审中,报告和测试数据占分很重。报告中要清晰画出系统框图、电路原理图、核心算法流程图。测试数据要全面,包括静态定位精度(多个固定点的坐标误差)、动态跟踪轨迹、不同光照条件下的稳定性测试等。最好能用Matlab或Python绘制出美观的误差分布图、轨迹对比图,这能极大提升报告的专业性。
回顾这个项目,可见光室内定位本身是一个有趣的课题,而电赛的限时挑战将其浓缩成了一个经典的工程实践案例。它教会我们的,不仅仅是如何调制一束光或解算一个坐标,更是在资源、时间双重约束下,如何权衡方案的复杂度与可靠性,如何快速调试一个多模块系统,以及如何将书本上的信号处理、控制理论转化为实实在在、能跑起来的代码和电路。即使今天有了UWB、蓝牙AoA等更成熟的室内定位技术,这次“追光”之旅所锻炼出的系统思维和动手能力,依然是每个电子工程师宝贵的财富。
本文还有配套的精品资源,点击获取