基于CPX与LSM303的电子罗盘制作:从I2C通信到传感器校准全解析

news2026/5/17 6:19:54
1. 项目概述与核心价值如果你玩过嵌入式开发尤其是涉及姿态感知或导航的项目大概率会碰到一个经典问题如何让设备“知道”自己面朝哪个方向加速度计能告诉你设备是平放还是倾斜陀螺仪能告诉你转得多快但它们都无法直接告诉你“北”在哪里。这时候磁力计的价值就凸显出来了。它就像一个数字化的指南针通过感知地球磁场为设备提供绝对的方向基准。这个项目就是基于 Adafruit 的 Circuit Playground Express后面简称 CPX开发板和一块 LSM303 磁力计/加速度计模块动手制作一个功能完整的电子罗盘。CPX 本身自带一个 LIS3DH 三轴加速度计功能强大但缺了磁力计这个关键角色。LSM303 模块恰好补上了这块短板它集成了三轴加速度计和三轴磁力计价格亲民接口简单I2C是入门传感器融合的绝佳选择。项目的核心价值远不止于“做个指南针”这么简单。首先它提供了一个从硬件连接到软件算法、再到传感器校准的完整闭环实践。你会亲手处理 I2C 通信、理解磁力计的原始数据、学习如何将磁场矢量转换为方位角并深刻体会到校准对于传感器应用为何如此致命。其次项目同时提供了 ArduinoC/C和 CircuitPython 两种实现让你能对比学习两种在创客和物联网领域最流行的嵌入式开发方式。最后通过 CPX 板载的 10 颗 NeoPixel LED我们将方向信息可视化制作出一个既直观又酷炫的物理罗盘。无论你是想为机器人增加导航能力还是为可穿戴设备添加方向感知这个项目所涉及的技术栈和问题排查经验都是非常扎实的起点。2. 硬件选型、连接与封装思路2.1 核心硬件解析Circuit Playground Express (CPX):这不是一块普通的 Arduino 板。它集成了 ATmega32u4经典款或 ATSAMD21Express款微控制器、10 个可编程 RGB NeoPixel LED、运动传感器LIS3DH 加速度计、温度传感器、光线传感器、声音传感器、蜂鸣器、红外收发器以及多个触摸感应引脚。它最大的特点是“开箱即用”所有传感器和外围设备都已集成并配有对应的软件库极大降低了原型开发的门槛。在本项目中我们主要利用其微控制器核心、NeoPixel LED 阵列以及为外部传感器提供的 I2C 接口和电源。LSM303DLHC 模块:这是一款经典的 6 自由度6-DoF惯性测量单元包含一个三轴加速度计和一个三轴磁力计。我们关注的重点是它的磁力计部分。磁力计基于各向异性磁阻AMR或霍尔效应原理能测量三个正交轴X, Y, Z上的磁场强度。对于平面罗盘应用我们通常只使用 X 和 Y 轴的数据来计算水平面上的指向。选择它的原因很简单Adafruit 为其提供了成熟、易用的 Arduino 和 CircuitPython 库并且其 I2C 接口与 CPX 完美兼容。为什么是 I2CI2CInter-Integrated Circuit是一种同步、多主从、串行通信总线。它只需要两根线SDA 数据线 和 SCL 时钟线就能连接多个设备每个设备有唯一的地址。对于资源有限的微控制器和需要连接多个传感器的情况I2C 比需要更多引脚如 SPI或速率较慢如模拟读取的方案更优雅。CPX 已经将 SDA 和 SCL 引脚引出我们直接连接即可。2.2 硬件连接详解连接本身非常简单遵循 I2C 设备的通用接法电源连接将 LSM303 模块的3.3V引脚连接到 CPX 的3.3V输出引脚。务必使用 3.3VLSM303 是 3.3V 器件连接到 5V 会损坏它。CPX 的3.3V引脚能提供足够的电流。地线连接将 LSM303 的GND引脚连接到 CPX 的GND引脚为电路建立共同的参考电位。数据线连接将 LSM303 的SDA引脚连接到 CPX 的SDA引脚。时钟线连接将 LSM303 的SCL引脚连接到 CPX 的SCL引脚。注意在 CPX 上SDA 和 SCL 引脚通常是固定的。对于基于 ATSAMD21 的 CPXSDA 是引脚SDASCL 是引脚SCL它们在板子上有明确标注。连接时建议使用杜邦线并确保连接牢固避免接触不良导致 I2C 通信失败。为了获得更稳定的性能建议在 SDA 和 SCL 线上各添加一个4.7kΩ 的上拉电阻到 3.3V。虽然很多开发板包括 CPX和模块内部可能已经集成了上拉电阻但外置上拉电阻可以增强信号完整性特别是在连接线较长或有干扰的环境中。这是提升 I2C 通信可靠性的一个经典技巧。2.3 结构封装与供电方案一个裸露的板子加上飞线既不方便使用也不够美观。项目原文提到了使用 3D 打印外壳的方案这是一个非常好的实践。外壳的作用保护电路避免短路和物理损伤。固定相对位置确保 CPX 和 LSM303 模块之间的相对位置和方向固定不变这对校准数据的有效性至关重要。如果传感器位置移动了之前的校准就失效了。屏蔽部分干扰虽然塑料外壳对磁场的屏蔽作用有限但可以避免金属物体直接接触传感器附近造成强局部干扰。集成供电方便安装电池和开关实现便携。供电方案CPX 可以通过 USB 供电但为了做成一个独立的便携设备使用锂电池是更佳选择。你需要一块 3.7V 锂聚合物电池如 150mAh电压范围3.7V-4.2V适合 CPX 的内置稳压电路。一个 JST PH 2-Pin 接口的电池与 CPX 的电池接口匹配。一个 SPDT 滑动开关用于控制电源通断。一对 JST PH 连接线一公一母用于将开关串联到电池和 CPX 之间。接线方法将电池的红色正极线剪断。将来自电池端的红色线焊接到滑动开关的一个外侧引脚。将通往 CPX 端的红色线焊接到滑动开关的中间引脚。将两端的黑色负极线直接焊接在一起。强烈建议在每个焊接点套上热缩管并用热风枪或打火机加热收缩这能有效防止短路是保证项目长期可靠运行的关键。最后将所有元件CPX、LSM303、电池、开关妥善安置在外壳内用热熔胶或螺丝固定。确保开关可以从外壳的开口处操作USB 口也留有开口以便后续编程或充电。3. 软件环境搭建与代码解析3.1 Arduino 环境配置安装 Arduino IDE:从 Arduino 官网下载并安装最新版 IDE。添加板支持:CPX 基于 Adafruit 的 SAMD 系列芯片。打开 Arduino IDE进入文件 - 首选项在“附加开发板管理器网址”中添加https://adafruit.github.io/arduino-board-index/package_adafruit_index.json。然后进入工具 - 开发板 - 开发板管理器搜索 “Adafruit SAMD”安装 “Adafruit SAMD Boards”。安装必要的库:进入工具 - 管理库...分别搜索并安装Adafruit Unified Sensor这是 Adafruit 传感器库的抽象层提供了统一的数据格式。Adafruit LSM303DLHC这是 LSM303 传感器的专用驱动库。Adafruit NeoPixel用于控制 CPX 上的 RGB LED。实操心得库的版本有时会导致兼容性问题。如果编译出错可以尝试在库管理器中查看已安装库的版本或者到 Adafruit 的 GitHub 仓库下载最新版本手动安装。手动安装时将库文件夹解压到 Arduino IDE 的libraries目录下通常在我的文档\Arduino\libraries。3.2 核心代码逻辑深度剖析项目的核心代码逻辑清晰可以分为初始化、校准、数据读取处理和显示四个部分。我们以 Arduino 代码为例进行拆解。3.2.1 初始化与预热 (setup()和warm_up())void setup(void) { strip.begin(); // 初始化 NeoPixel strip.show(); pinMode(BUTTON_A, INPUT_PULLDOWN); // 设置 A 按钮为输入内部下拉电阻 mag.enableAutoRange(true); // 启用磁力计量程自动调整 if(!mag.begin()) { // 初始化 LSM303 磁力计 fill(255, 0, 0); // 失败则亮红灯 while(1); // 死循环 } warm_up(); // 传感器预热 // ... 校准判断逻辑 }mag.begin()会尝试通过 I2C 地址与 LSM303 通信。失败最常见的原因是接线错误SDA/SCL 接反、电源没接、I2C 地址不对LSM303 有多个可能地址或者模块损坏。warm_up()函数在启动后读取 100 次磁力计数据每次延迟 10ms总共约 1 秒。这个操作非常重要因为磁力计上电后内部元件需要短暂的时间达到稳定状态最初的几次读数可能不准确或波动较大。预热期间 NeoPixel 显示蓝色给用户一个视觉提示。3.2.2 校准流程 (calibrate()函数)校准是电子罗盘精度的生命线。未经校准的磁力计读数会包含两种主要误差硬铁干扰和软铁干扰。硬铁干扰来自固定在设备上的永磁性物质或被磁化的部件如某些螺丝。它产生一个固定的磁场偏移相当于测量圆的圆心不在 (0,0)。软铁干扰来自能够被外部磁场磁化并产生感应磁场的材料如电路板上的铁质元件、电池。它会使磁力计各轴灵敏度不一致并将圆形磁场扭曲成椭圆形。本项目采用的是一种简化的“最小-最大”校准法或称椭圆拟合的简化版主要校正硬铁干扰和部分软铁干扰引起的缩放不一致。其核心思想是通过让设备在三维空间主要是水平面中旋转采集 X 和 Y 轴上磁力计读数的最大值和最小值。void calibrate(bool do_the_readings) { // ... 省略部分代码 if (do_the_readings) { unsigned long start_time millis(); while (millis() - start_time 5000) { // 持续采样5秒 mag.getEvent(event); values[0] event.magnetic.x; values[1] event.magnetic.y * -1; // Y轴取反因为模块倒置安装 if (values[0] ! 0.0 values[1] ! 0.0) { // 过滤无效零值 for (int i 0; i 2; i) { raw_mins[i] values[i] raw_mins[i] ? values[i] : raw_mins[i]; raw_maxes[i] values[i] raw_maxes[i] ? values[i] : raw_maxes[i]; } } delay(5); } } for (int i 0; i 2; i) { corrections[i] (raw_maxes[i] raw_mins[i]) / 2; // 计算偏移量圆心 mins[i] raw_mins[i] - corrections[i]; // 计算校准后的最小值 maxes[i] raw_maxes[i] - corrections[i]; // 计算校准后的最大值 } }关键点解析values[1] event.magnetic.y * -1;因为 LSM303 模块是倒置粘贴在 CPX 背面的这导致其 Y 轴方向与 CPX 的 Y 轴方向相反。乘以 -1 是为了修正这个安装方向带来的影响。这是硬件安装方式直接决定软件处理的一个典型例子。if (values[0] ! 0.0 values[1] ! 0.0)磁力计偶尔会读出 (0,0) 这样的无效值可能是 I2C 通信中的小错误。直接过滤掉可以避免它们污染校准数据。corrections[i] (raw_maxes[i] raw_mins[i]) / 2这一步计算偏移。理想情况下设备旋转一周读数应在正负值之间对称分布(max min)/2应该接近 0。如果存在硬铁干扰这个值就会偏离 0。corrections数组存储的就是这个偏移量后续每个读数都要减去它相当于把测量圆的圆心平移回原点。mins[i]和maxes[i]减去偏移后我们得到校准后的最小最大值范围。这个范围用于后续的归一化步骤以补偿各轴灵敏度增益的差异。校准操作要领在校准模式NeoPixel 亮绿色下你需要手持设备缓慢地、以各种姿态在空中画“8”字并绕 X、Y 轴旋转。目的是让磁力计在三个维度上都经历其可能的最大和最小磁场强度从而采集到完整的数据范围。整个过程持续 5 秒代码中while循环条件。校准环境应远离大型金属物体、强磁铁、电机、显示器等强磁场源。3.2.3 主循环从数据到方向 (loop()函数)主循环以大约 20Hzdelay(50)的频率运行不断读取、处理并显示方向。void loop(void) { // 1. 检查校准按钮 if (digitalRead(BUTTON_A)) { calibrate(true); } // 2. 读取原始数据并修正安装方向 sensors_event_t event; mag.getEvent(event); float x event.magnetic.x; float y event.magnetic.y * -1; // 再次Y轴取反 if (x 0.0 y 0.0) { return; } // 再次过滤零值 // 3. 应用校准偏移并归一化 float normalized_x normalize(x - corrections[0], mins[0], maxes[0]); float normalized_y normalize(y - corrections[1], mins[1], maxes[1]); // 4. 计算方位角角度 int compass_heading (int)(atan2(normalized_y, normalized_x) * 180.0 / 3.14159); compass_heading 180; // 将范围从 [-180, 180] 转换到 [0, 360] // 5. 映射到 LED 索引 int direction_index ((compass_heading 15) % 360) / 30; // 6. 点亮对应的 LED int *leds led_patterns[direction_index]; for (int pixel 0; pixel 10; pixel) { if (pixel leds[0] || pixel leds[1]) { strip.setPixelColor(pixel, 4, 0, 0); // 低亮度红色 } else { strip.setPixelColor(pixel, 0, 0, 0); // 熄灭 } } strip.show(); delay(50); }关键算法解析atan2(y, x)函数这是整个方向计算的核心。它返回的是从正 X 轴到点 (x, y) 的向量在 XY 平面上的夹角弧度制范围是-π到π。在数学上atan2(y, x)等价于arctan(y/x)但它能正确处理所有象限比如 x 为负的情况而atan函数不能。归一化 (normalize函数)这个函数将校准后的数据范围在[mins[i], maxes[i]]线性映射到[-100, 100]的固定范围。这样做有两个好处一是简化了后续计算二是减弱了各轴灵敏度不一致的影响。映射公式是标准的线性插值output (input - in_min) * (out_max - out_min) / (in_max - in_min) out_min。LED 映射逻辑CPX 有 10 颗 LED均匀分布在一个圆上。我们将 360 度分为 12 个 30 度的扇区。direction_index的计算((compass_heading 15) % 360) / 30中15是关键。因为我们的扇区是以 0度、30度、60度...为中心划分的。heading为 0 度正北时我们希望点亮“顶部”的 LED。但heading在[0, 360)范围内15后再除以 30 取整相当于判断heading落在哪个±15度的区间内。% 360确保了角度值始终在有效范围内。led_patterns数组这个二维数组定义了每个方向索引0-11对应要点亮的 LED 索引。例如{4, 5}表示方向索引 0北时点亮第 4 和第 5 颗 LED。这是因为 CPX 的 LED 0 和 LED 5 的位置被 USB 和电池接口占用了所以用相邻的两颗 LED 来共同指示“北”和“南”方向。3.3 CircuitPython 实现对比CircuitPython 版本的逻辑与 Arduino 版本完全一致只是语法和部分 API 有所不同。其优势在于交互性强可以直接在串行 REPL 中调试修改代码后无需编译即可运行直接保存文件即可。对于初学者或快速原型开发来说更加友好。主要区别库导入与初始化使用import board,import busio,import adafruit_lsm303。I2C 对象创建i2c busio.I2C(board.SCL, board.SDA)。传感器对象创建compass adafruit_lsm303.LSM303(i2c)。按钮读取使用digitalio库配置按钮引脚。时间函数使用time.monotonic()替代millis()。代码更新方式将代码文件如code.py直接拖入 CPX 出现的CIRCUITPYU 盘即可运行。对于逻辑理解阅读 Arduino 版本的注释和解析足以掌握核心。CircuitPython 版本可以视为一个更简洁的脚本实现。4. 校准实战、问题排查与精度优化4.1 校准流程实战步骤首次烧录与进入校准模式将未修改的代码raw_mins和raw_maxes数组初始值为1000.0和-1000.0烧录到 CPX。上电或复位后由于检测到未校准状态程序会自动进入校准模式所有 NeoPixel 亮绿色。同时你需要打开 Arduino IDE 的串口监视器工具 - 串口监视器波特率 9600。执行校准动作在 NeoPixel 亮绿色的 5 秒内手持设备缓慢地、以各种姿态在空中画“8”字并绕其 X、Y 轴旋转。确保动作覆盖所有可能的方向。获取校准参数5 秒后NeoPixel 熄灭串口监视器会打印出类似以下的两行结果float raw_mins[2] {-181.30, 216.09}; float raw_maxes[2] {-136.96, 262.61};固化校准参数将这两行代码复制替换掉源代码开头// Replace these two lines with the results of calibration注释下方的两行初始值。重新烧录将修改后的代码重新编译并烧录到 CPX。此后每次上电设备将直接使用这些固化参数进行校准补偿跳过 5 秒的校准过程NeoPixel 会直接进入方向指示模式蓝色预热后熄灭只有一颗或两颗红灯指示方向。4.2 常见问题与排查技巧问题 1上电后 NeoPixel 常亮红色程序不运行。排查这是 LSM303 初始化失败。首先检查硬件连接3.3V, GND, SDA, SCL是否正确、牢固。其次检查 I2C 地址。使用一个简单的 I2C 扫描程序Arduino IDE 示例中有Wire库的scanner例程来确认是否能检测到 LSM303 设备通常地址是0x1E。如果扫描不到可能是模块损坏或接线完全错误。问题 2方向指示不稳定LED 乱跳或指向明显错误。排查校准不充分这是最常见的原因。确保在校准时进行了充分、缓慢的三维旋转。在远离电脑、手机、金属桌面的开放空间重新校准。局部磁场干扰检查设备附近是否有磁铁、电机、扬声器、大电流导线或大型金属物体。即使是桌下的金属框架也可能产生影响。尝试移动到不同位置测试。校准参数未固化确认你是否已经用串口输出的真实参数替换了代码中的初始值并重新烧录了程序。Y 轴取反问题如果你的 LSM303 模块是正着安装的与 CPX 同向那么代码中y event.magnetic.y * -1;这行可能需要去掉* -1。观察原始数据旋转设备看 X, Y 值的变化是否符合你的预期例如指向北时 Y 为最大正值。问题 3方向指示有固定偏差例如总是偏东 30 度。排查这很可能是磁偏角造成的。地球磁北极和地理真北极并不重合存在一个夹角即磁偏角。这个角度随地理位置和时间变化。本项目显示的是磁北方向。如果你知道当地的磁偏角可以在网上查询可以在计算出的compass_heading上加上或减去这个角度来得到真北方向。例如若磁偏角为西偏 5 度磁北在真北西边5度则true_heading compass_heading 5。问题 4设备倾斜时方向指示不准。排查本项目是一个简单的 2D 平面罗盘计算只使用了 X 和 Y 轴水平面的磁场分量。当设备倾斜时Z 轴磁场会混入 X、Y 轴的测量值导致水平分量计算错误。要制作一个“倾角补偿电子罗盘”需要引入加速度计数据。通过加速度计计算出设备相对于水平面的倾斜角俯仰角和横滚角然后利用这个角度对磁力计的 X、Y、Z 读数进行坐标变换将其“投影”回水平面再进行方位角计算。这是更进阶的传感器融合应用可以使用方向余弦矩阵或四元数等方法实现。4.3 精度优化与扩展思路延长校准时间与数据平滑将校准采样时间从 5 秒延长到 10-20 秒并采集更多数据点。在主循环中可以对磁力计读数进行滑动平均滤波例如保存最近 5-10 次的读数并取平均值这能有效抑制随机噪声使 LED 指示更稳定。使用更高级的校准算法“最小-最大”法是入门级方法。更精确的校准可以采用椭圆拟合或球体拟合如果使用三轴数据。这些算法能更好地补偿软铁干扰造成的非正交性和缩放误差。网络上有很多开源的磁力计校准库如 MagCal可以实现这些算法。集成加速度计进行倾角补偿如前所述使用 LSM303 自带的加速度计或 CPX 板载的 LIS3DH来计算倾斜角实现真正的 3D 罗盘。这需要学习基本的姿态解算知识。增加显示模式除了用单颗 LED 指示方向还可以用 LED 的颜色或亮度来表示方向置信度例如读数波动大时闪烁或倾斜角度。数据输出与记录通过串口将实时的方位角、原始磁力计数据、校准参数等输出到电脑方便用其他软件如 Processing, Python进行可视化分析或记录轨迹。这个项目麻雀虽小五脏俱全。它串联了硬件接口、传感器驱动、数据采集、算法处理和用户交互等多个嵌入式开发的关键环节。通过动手实现并深入理解其中的每一步你获得的不仅仅是

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2616965.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…