Ouster v3.2.0 固件区域监控功能介绍及通过 PLC 接收和处理区域监控数据

news2026/5/1 23:23:39
最近几天整理自己手头还残留的一些测试文档发现有个关于 Ouster 激光雷达 v3.2.0 固件的区域监控功能Zone Monitoring配合 PLC 测试的截图和PLC程序还在。幸好当初是在自己的Windows 7老电脑上安装 PLC 软件做了这个测试。这些测试数据对我而言用处不大。但想来写成博文发布到网上对通过 PLC 接收和处理 Ouster 区域监控数据的小伙伴们应该会有一定的帮助。否则的话不久之后的某月某日这些测试记录可能会因为占用我电脑或U盘的存储空间而不得不彻底清除掉仿佛曾经完全没有存在过一般。从事工控行业的小伙伴对 PLC 想必是得心应手、运用自如、游刃有余。一提到区域监控可能脑海中已经浮现出了清晰的轮廓不就是针对实际应用场景画几个区域然后每个区域对应一路开关量信号发送 PLC 处理信号的电平高低对应区域是否被触发。仅此而已这有何难但 Ouster 激光雷达的区域监控功能配合 PLC 使用实际情况可能比我们预想的要复杂一些。首先一个因素就是硬件条件的限制。使用过 Ouster 激光雷达的小伙伴应该很熟悉Ouster 激光雷达的线缆接头只有 12 芯。除去电源正负极的两芯和千兆以太网的 8 芯就仅剩了两芯。且不说这两芯中还有个仅作时钟同步脉冲 PPS 输入的 SYNC_PULSE_IN最后剩下的一个可配置的多功能输入输出线芯 Multipurpose-IO用来对应一个监控区域的状态在实际应用中是完全不够看的。此外就是以往单线激光雷达通过开关量输出区域状态的方式提供的信息量是非常有限的。PLC 只能通过开关信号的电平高低判断划定的区域是否被触发。而对于多线激光雷达而言对闯入监控区域的人或物体检测到的点云数据也是更加丰富的。Ouster 激光雷达的区域监控功能除了可以给出监控区域的状态信息还可以给出进入到 3D 监控区域中的目标物的总点数、点的最大距离、最小距离、平均距离等。这些信息不光在实际应用中有现实意义而且在划定监控区域以及设置区域触发条件时也能起到参考作用。鉴于这些因素Ouster 研发部门考虑的因素可能会更多但肯定无法忽视上边提到的两个因素Ouster 只能在激光雷达本身的网络接口上做文章。最终给出的方案就是再新增一个 UDP 端口号通过 UDP 数据报文的方式输出监控区域的状态信息。Ouster 激光雷达区域监控功能介绍● Ouster 激光雷达 v3.2.0 固件提供的区域监控功能最多可以上载 128 个 3D 区域仅设置一个区域也可以● 每次投入运行时最多可以设置 16 个 Active 的 3D 区域进行监控仅设置一个 Active 区域也可以● 已上载但未投入使用的 3D 区域处于 Staged 的状态。可以根据实际应用随时通过指令将 Staged 的区域切换为 Active 的监控区域● 区域切换时可以只切换一个也可以一次切换多个。但切换为 Active 的区域数目一次最多不能超过 16 个● 区域监控数据的 UDP 报文长度是固定的v3.2.0 固件发布时的 Zone Monitoring UDP 数据包长度是 688 Byte● 每个 UDP 报文中包含 16 个区域的字段。每个字段中包含监控区域的触发状态处于监控区域的目标物的总点数、点的最大距离、最小距离、平均距离等信息● 如果设置的 Active 区域数目不足 16 个那么区域监控 UDP 数据包中仅设置了 Active 区域的字段中有数据剩余字段由 0 填充● Ouster 激光雷达区域监控功能的更新频率和 lidar_mode 设置有关。比如一个 OS 激光雷达工作在 1024x10 的模式即1秒钟旋转10圈得到10个完整的点云 Frame那么区域监控功能的数据输出频率最高也是 10 Hz● 每个监控区域的更新频率还可以单独设置可以各不相同。对 Ouster 激光雷达 v3.2.0 固件的区域监控功能有了以上的初步了解后接下来我们看一下如何使用这个区域监控功能。如上所述Ouster 激光雷达的区域监控数据是通过 UDP 通讯协议输出的。对于从事点云数据处理和算法的攻城狮而言若个毫秒之间超过 1M Byte 长度的点云数据也能轻松处理完毕。在工控机或者高性能边缘计算设备中接收和处理这 688 Byte 长度的区域监控 UDP 数据简直是易如反掌不费吹灰之力。但在实际应用中一个需要 3D 区域监控功能的工业现场控制柜中可能只有 PLC 作为所有传感器和执行器的数据采集和处理的控制器也可能之前现场已经部署了单线开关量输出的区域监控激光雷达且连接到了 PLC。现在只是想丝滑地切换到 3D 区域监控的激光雷达不可能为了增加一个 3D 区域监控功能就要为激光雷达单独增加一个上位机处理器。直接将支持 3D 区域监控功能的激光雷达数据接入到 PLC 肯定是用户无可辩驳的首选方案。我自己呢在2025年初时就有多次通过Python程序和C语言程序接收和处理 Ouster 激光雷达 Zone Monitoring 区域监控数据的测试经历。想到多年前自己也曾频繁调试各种 PLC 和单线激光雷达以及多种工业传感器的数据交互到2025年底时也就狠下心来购置了一台PLC用于 Ouster 多线激光雷达3D区域监控功能的测试。做工控的小伙伴们目前手上在用的基本上都是各个厂家最新的主流的 PLC 了吧再不济用的也是次新品或是两三年前的 PLC 型号吧我是自己花钱搞测试验证功能肯定无法像工控企业或自动化系统集成商那样采购最新版的性能最强大的 PLC 了只是淘一个老掉牙的西门子小型 PLCS7-200 PLC ST20 CPU。这款 PLC 是西门子在 2012年发布的只有12个 DI 输入点和8个 DO 输出点。虽然不足以输出Ouster 激光雷达 Zone Monitoring 功能支持的最多16个 Active 区域的监控状态但在一般应用中能同时输出8个区域的监控状态也已经戳戳有余了。此外如果我能用这个低配的老 PLC 正常解析和处理 Ouster 激光雷达通过 UDP 包发送的 Zone Monitoring 区域监控数据那么使用不同厂家最新PLC的小伙伴们如果要处理Ouster激光雷达的Zone Monitoring 区域监控数据就更不再话下了。PLC 硬件准备好了那么接下来就要准备编程软件了。我在自己的一台 Win7 老电脑中安装了 STEP 7-Micro/WIN SMART Version V2.8 软件用来编写梯形图程序。接下来我详细列举一下我通过这款西门子 PLC 接收和处理 Zone Monitoring 区域监控数据的思路以及梯形图程序。其他品牌的 PLC只要支持 UDP 通讯即使编程语言或功能块千差万别但程序设计思路都是一致的。0. IP 地址设置PLC 和激光雷达进行 UDP 网络数据通讯将二者设置为同一个子网内的IP地址是最基本的前提。我在测试中需要频繁使用激光雷达只是因为测试偶尔用到 PLC。因此我将 PLC 的 IP 地址修改到了和激光雷达同网段。在实际应用中现场电控柜中的PLC可是连接着很多个以太网接口的仪器、仪表或其他控制器不可能为了加入一台有区域监控功能的激光雷达就要修改PLC的IP地址。通常需要将激光雷达的IP地址修改到和PLC同网段。修改Ouster激光雷达IP地址的方法可以参考之前分享的博文Ouster激光雷达IP地址获取与设置_ouster雷达初始ip-CSDN博客1. 建立PLC和Ouster激光雷达的UDP连接高级语言编程中如CCC#PythonVisual Basic可以很容易的建立一个 UDP Socket来接收UDP数据。我测试所用的这款西门子PLC虽然已经发布有年头了但其提供的UDP连接功能块还是为我建立PLC和Ouster激光雷达的UDP连接提供了极大的便利。可以通过选择“Libraries”下方“Open User Communication”中的“UDP_CONNECT”来添加这个功能块。因为这个功能块只需要在 PLC 进入 RUNNING 状态后执行一次因此这个功能块的 EN 端和 Req端我都用了PLC提供的 First_Scan_On 脉冲。ConnID 的设置必须于后续使用该UDP通讯的功能块的 ConnID 设置保持一致。LocalPort 的设置必须与 Ouster 激光 Web 浏览器连接后Configuration 界面的 Zone Monitoring UDP 端口号的设置保持一致。2. 接收 Zone Monitoring 区域监控 UDP 数据同样的我通过选择 “Libraries” 下方 “Open User Communication” 中的 “UDP_RECV”添加了数据接收这个功能块。一旦 PLC 和 Ouster 激光雷达进入工作运行状态后PLC 就需要持续的接收激光雷达发来的 Zone Monitoring UDP 数据了。因此这个 UDP 数据接收的功能块需要一直工作功能块的使能端En就需要使用 Always_On 的高电平了。ConnID 的设置需要与上方 UDP_CONNECT 功能块 ConnID 的设置保持一致。MaxLen 需要输入 Zone Monitoring UDP 数据包的最大长度这里我输入的是 680 Bytes。有些小伙伴可能要问了我使用的 PLC 因功能限制最大能接收的 UDP 数据包长度不支持那么大的值还能继续和 Ouster 激光雷达的区域监控功能配合使用吗答案当然是肯定的但也要分具体情况。如果你查看 Ouster 激光雷达 Zone Monitoring 的 UDP 数据包的结构你会看到它由三部分组成分别是报头、数据区、报尾。报尾就有近百个字节收不到报尾的所有字节并不会影响 UDP 数据包中包含的16个监控区域的状态数据。如果只需要监控三个区域的状态那么接收区域的长度满足150 Byte 的长度就已经足够了。接收数据的地址指针 DataPtr 指向你为接收 UDP 数据指定的存储区的首地址。这里我指向为接收Zone Monitoring 区域监控UDP数据定义的缓存器起始位 VB1000。下图是我的测试中PLC接收到的部分UDP数据的截屏。3. 解析 UDP 数据并输出监控区域状态解析 UDP 数据就需要知道 Ouster 激光雷达 Zone Monitoring 区域监控 UDP 数据包的结构了。这个数据结构可以从 Ouster 官网上 v3.2.0 固件的 Firmware User Manual 中看到。了解了 Zone Monitoring UDP 包的数据结构后我们就能知道哪个 Byte 中包含哪个区域的触发状态了。区域的触发状态其实只是用这个 Byte 中一个 Bit 位表示。我们可以单独取这个区域触发状态的Bit 位来控制 PLC 的某个 DO 数字量输出也可以用整个 Byte 的值来控制 PLC 的某个 DO 数字量输出。我在测试中采用整个 Byte 值来判断该 Byte 对应的区域是否被触发。如上图所示当我用 VB1000 起始的存储区接收 Zone Monitoring UDP 数据时第一个监控区域 Zone0 对应的触发状态 Byte VB1075 为 132 (1000 0100) 时数字量输出 DO0 被置为高电平第二个监控区域 Zone1 对应的触发状态 Byte VB1111为 132 (1000 0100) 时数字量输出 DO1 被置为高电平第三个监控区域 Zone2 对应的触发状态 Byte VB1147 为 132 (1000 0100) 时数字量输出 DO2 被置为高电平。如果某个区域没有被触发那么这个区域对应的触发状态 Byte 值则为 4 (0000 0100)。我的测试中每次只监控三个区域因此只需判断3个区域对应的状态 Byte 值即可。Ouster 激光雷达的 Zone Monitoring UDP 包中包含16个监控区域的详细状态数据。如果你的应用需要同时监控16个区域你所用的 PLC 也有16个数字量输出 DO 点那么你绘制了16个3D监控区域并上传到激光雷达后就可以在 PLC 程序中通过判断每个区域对应的触发状态 Byte 值获知该区域是否有被触发了也就是有人或物体进入这个区域且这个区域中检测到的总点数超过了设置的触发条件的点数值。到此为止通过 PLC 接收和解析 Ouster 激光雷达 Zone Monitoring 区域监控 UDP 数据的方法就已经介绍完毕了。不同厂家的 PLC数据接收和处理程序会略有差异但编程的思路总体上是毫无二致的。这些数据接收和处理的操作对于从事 PLC 程序开发和调试的自动化工程师而言也是易如反掌不费吹灰之力。深谙现场应用和生产工艺的小伙伴可能又发现问题了最多16个可同时监控的3D区域是够多但是我的实际应用防护需求可能是动态的。我不需要激光雷达一直一成不变的监控固定的防护区域我需要它根据实际生产工艺的需求能在不同的时间切换到不同的防护区域。这就涉及到基于具体应用的区域切换功能了。很多单线激光雷达的区域监控都是有这个功能的。Ouster 激光雷达的 Zone Monitoring 3D 区域监控也是支持区域切换功能的。但 Ouster REV-07硬件版本能支持区域切换功能的激光雷达自从 2024 年发布 v3.1.0 的固件时已经弃用 TCP API 了转而全面拥抱 HTTP API。也就是说REV-07 硬件版本的 OS 激光雷达使用 v3.2.0 固件提供的区域监控功能要切换区域或区域组只能使用 HTTP API。那如果我所使用的 PLC不支持 HTTP 协议但实际应用中又要用到区域切换功能该咋办莫慌HTTP 协议也不是凭空产生的。在 OSI 开放系统互连的七层模型中HTTP 是应用层的协议在模型下方的传输层上它仍然是靠 TCP 协议在传输数据。我们将 Ouster 激光雷达支持的HTTP/1.1 的区域切换 API通过 TCP 协议发送到端口号 80不就解决问题了吗事实也是如此我所用的西门子 S7-200 SMART PLC ST20 CPU 也不支持 HTTP 协议我就是通过 PLC 提供的 TCP 数据通讯的功能块发送区域切换的 API 来实现区域组切换的功能的。首先我需要添加 “TCP_CONNECT” 的功能块建立 PLC 与激光雷达的连接。通过选择 “Libraries” 下方 “Open User Communication” 中的 “TCP_CONNECT” 即可添加这个功能块。功能块的引脚中ConnID 可以设置任意的有效值但必须要与后续使用该 TCP 连接的功能块的ConnID 设置保持一致。IPaddr1 ~ IPaddr4 分别依次输入激光雷达 IPv4 地址的每个字段。RemPort 输入80。LocPort 可随意输入了一个 TCP 端口号允许的有效值我在这里输入了 3000。建立连接后就可以通过“TCP_SEND”功能块发送区域切换的指令了。“TCP_SEND” 功能块可以通过选择 “Libraries” 下方 “Open User Communication” 中的“TCP_SEND” 添加。我自己在测试中绘制了三个区域组每个区域组中包含三个区域。通过按钮在不同的区域组之间做切换。TCP_SEND 功能块的 Req 请求端用三个区域组切换按钮触点做了互锁的操作避免误操作的情况下多个区域组的区域同时有效。ConnID 的值需要与上方 TCP_CONNECT 功能块 ConnID 的设置保持一致。DataLen 需要输入区域切换指令的字节长度。发送数据的地址指针 DataPtr 指向你存放区域切换指令的存储区的首地址。这里我将区域切换指令存储到了 VB200 开头的字节存储区中。考虑到我们使用 TCP协议发送HTTP API因此发送的指令的格式是非常关键的。以我测试中的区域组切换为例我预先绘制了7个3D监控区域并上传到了激光雷达。区域编号Zone0Zone1和Zone2作为一个区域组用于小车直行时的区域监控区域编号Zone0Zone3和Zone4作为一个区域组用于小车左转时的区域监控区域编号Zone0Zone5和Zone6作为一个区域组用于小车右转时的区域监控。通过 TCP 协议发送切换到左转监控区域组的指令时也就是将当前的 Active 区域设置为 Zone0Zone3 和 Zone4 时需要严格按照下方的格式输入指令POST /api/v1/zone_monitor/live_ids HTTP/1.1 Host:192.168.1.200 Connection:keep-alive Content-Type:application/json Content-Length:9 [0,3,4]其中Host 后边是 OS 激光雷达的 IPv4 地址Content-Length 不是整个指令的长度而是发送的切换区域的总长度切换区域间隔一行后添加到指令的末尾在方括号中用逗号分隔。当然如果有小伙伴想在测试中用 PLC 接收和处理区域监控的 UDP 数据但是偶尔需要切换一下区域且区域切换并不会用在实际生产中那么可以直接通过发送 HTTP API 进行区域切换。通过 HTTP API 与 Ouster 激光雷达交互的方法可以参考这个文档中的介绍Ouster 激光雷达 HTTP API 交互操作_ouster lidar 地址设置-CSDN博客我当时用西门子 S7-200 PLC 测试 Ouster 激光雷达 Zone Monitoring 区域监控功能时有录制一个视频并上传到了网上。如果有兴趣也可以通过点击下方的链接查看Ouster LiDAR v3.2.0 固件区域监控功能测试_PLC 控制器交互测试_哔哩哔哩_bilibili

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2573394.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;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…