news 2026/10/6 6:57:22

Allegro与ADS联合仿真:射频PCB版图电磁验证全流程解析

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Allegro与ADS联合仿真:射频PCB版图电磁验证全流程解析

做射频硬件这几年,我最怕在项目会上听到一句话:板子画完了,你测一下。画完只是开始,原理图阶段匹配算得再漂亮,等你把线一布、过孔一打、参考平面被走线隔成几块,一切都要重新接受现实检验。Allegro16.6与ADS2019联合仿真,就是为这个"现实检验"环节准备的一套组合拳:把PCB Layout工程师画好的真实版图导进ADS2019,交给Momentum电磁引擎去算,再把仿真结果拿回原理图完成射频链路验证。这篇文章我会把从Allegro导出、ADS导入、层叠校准、端口设置、Momentum仿真到协同验证的全过程拆开讲,适合正在做射频前端、天线匹配、信号完整性相关工作的硬件工程师。软件安装激活不是重点,我默认你已经装好了这两款工具且License正常,下面直接进入正题。

1. 为什么要执着于联合仿真:从"画完板子"到"闭环迭代"的现实差距

1.1 单点仿真撑不起完整链路

原理图仿真阶段,ADS里用到的是理想传输线、理想回流地,看不见参考平面被分割后的回流路径变化、过孔stub带来的谐振、走线间距过近产生的耦合。这些物理细节要到PCB Layout完成之后才会真正定型。而Allegro本身不是电磁求解器,它能告诉你这根走线的目标阻抗是50Ω,但不会告诉你整段走线上的拐角、过孔、焊盘、参考平面缺口会带来多少额外寄生。

联合仿真的价值就在这个结合部:几何结构从Allegro来,电磁求解和链路验证交给ADS。走线形状、过孔位置、铺铜边界、地平面完整性全部保留,仿真结果比原理图仿真更接近真实板材上的表现。

举一个实际例子。去年我调一块LNA匹配板,原理图仿真时NF和增益都很漂亮,结果样机回来S11在2.45GHz处偏了大约0.6dB,插损也偏大。后来把Allegro版图导进ADS一仿真,问题立刻现形:射频走线上有一个45度拐角,旁边正好是一排地过孔,两者之间形成等效并联电容,把匹配点往低频拉了一点。这个拐角在原理图仿真中根本不存在,只有跑版图级电磁仿真才能暴露。

1.2 适合谁做,什么时候做

联合仿真适合这几类人:

  • 射频硬件工程师,验证PA/LNA/射频开关前后匹配、天线馈线、滤波器的PCB实现。
  • 信号完整性工程师,处理高速数字链路、DDR时钟、USB/PCIe走线的回流与串扰问题。
  • PCB Layout工程师,想确认自己的布线决策是否破坏射频性能。
  • 学生或科研人员,做射频模块验证、论文数据支撑。

时机上我强烈建议放在投板前。正确时间点是:Layout基本完成、DRC通过、导出Gerber之前,留出至少一到两天做联合仿真。如果板子已经投了,联合仿真也不白做,仿真得到的失配位置和程度,能指导下一版改哪里。

1.3 完整链路预览

先给你一张总览图,后面每一段对应一个环节:

Allegro 16.6导出 → ADS2019导入 → 层叠校准 → 版图几何修复 → Momentum电磁仿真设置 → 端口激励 → EM模型生成 → 插入原理图做协同仿真 → S参数与射频链路验证。

这套流程我第一次完整跑通花了两天,其中一半时间浪费在接口报错和层叠参数上。现在我把流程全部拆开,每一个环节该点什么菜单、该填什么参数、容易在哪儿翻车,都会讲到。

2. 只有Allegro还不够:叠层校准与仿真区域规划先行

2.1 叠层是仿真的地基

联合仿真翻车最多的原因不是工具不会用,而是层叠参数不对。Allegro里如果你的Cross-section还是默认状态,只有TOP/GND/PWR/BOTTOM和板厚,没有填材料Er和损耗角正切,也没有填铜厚,这样的板子导进ADS,仿出来的插损和实际能差一大截。

在Allegro里至少要确认这几项:

  • 每层介质材料,FR4还是Rogers,Er和tanD是多少。
  • 每层介质厚度,是压合后的实际厚度,而不是笼统的1.6mm板厚。
  • 铜厚,常规1oz对应35μm,2oz对应70μm,表层和内层是否一致。
  • 阻焊层,射频走线会不会覆盖阻焊,阻焊会微降频率响应。

常见板材参考参数,频率范围取1到10GHz的近似值:

材料ErtanD典型用途
FR44.2~4.60.016~0.020普通数字电路、低频射频
Rogers 4350B3.480.00375G、雷达、功分器
Rogers 4003C3.380.0027高频低损耗场景
Megtron63.40.002高速数字信号

如果你的板材是FR4,不要看到ADS默认模板里有4.0就直接填4.0。板厂给你的叠层报告里通常会标注Er,比如4.4@1GHz,按那个为准。随着频率升高Er会缓慢下降,Momentum里可以设置频率相关的介电常数色散模型。如果板厂报告有实测曲线数据,用色散模型更接近真实。

2.2 导出前的DRC与版图清理

导出前在Allegro里跑一遍完整DRC,重点看open和short。我看到过有人版图上有一段走线悬空了0.2mm,肉眼完全看不出来,导出到ADS之后端口怎么放都是开路,最后放大十几倍才看到断点。DRC能拦住大多数这类低级问题。

网络名同样要检查。Allegro里非法字符、重名网络、没有赋网络名的铜皮经常出现,导出到ADS后网络名会变成一串乱码,后续分配端口非常痛苦。导之前用Tools > Database Check检查数据库完整性,有报错先修复再导出。

2.3 仿真区域怎么框选

单板射频验证前期,别指望一键全板仿真。一块包含电源层、几十个元件、几百个过孔的板卡,直接导进Momentum能把工作站算到怀疑人生。我的做法是裁一块"仿真切片"出来:在Allegro里选中有问题的射频链路局部,复制到一块新建设计的同名层叠上,只保留相关铜皮和过孔,周围的铺地尽量保留。

仿真区域大小有讲究。太大算不动,太小边界效应会盖住真实结果。我一般以链路宽度的3到5倍为边界,比如50Ω微带线在1.6mm FR4上大约是0.3mm线宽,那么两侧各留1到1.5mm的地铜就够。如果有大面积铺地,尽量让地铜延伸到仿真边界,这样回流路径更接近真实状态。

3. Allegro 16.6端导出实操:RF PCB菜单、Net保留与接口选项

3.1 先确认接口组件装好

ADS2019安装时,在组件选择界面里有一个Allegro相关接口,名称在不同版本里略有不同,类似"Keysight ADS Allegro Interface"或者"DesignLink"。如果当初安装时没勾选,Allegro菜单里不会出现导出ADS的入口。遇到这种情况不需要重装ADS,可以先在ADS安装目录下找有没有接口脚本和中间进程,或者重跑安装程序补装组件。

Allegro 16.6通常是32位程序,ADS2019往往是64位环境,接口本质上是靠一个中间进程做数据转换,位宽不一致可能连不上。稳妥做法是在环境变量PATH里把Allegro的bin目录和ADS的bin目录都加上,确保当前用户对两个软件都有完整读写权限,导出时两边License同时开好,接口进程要核验两边授权。

3.2 RF PCB菜单的开启方式

Allegro 16.6默认界面不一定有RF PCB菜单。如果菜单栏找不到,可以试试在Allegro命令栏输入相关变量设置,或者到Setup > User Preferences里搜索rf_hfss、rf_pcb相关项,把菜单变量设为可用,然后重启软件。具体路径在不同小版本里会有差异,关键是搜索rf开头的那几个变量。

不过说实话,走联合仿真路线真正常用的是File > Export > ADS,而不是RF PCB菜单。RF PCB菜单更多服务于Allegro内部的电磁仿真集成。如果导出菜单里没有ADS,优先检查接口组件是不是没装。

3.3 Export to ADS的操作序列

在Allegro里打开要导出的板卡,确认当前设计保存过。然后:

  1. File > Export > ADS,不同版本菜单名称可能有差异,有的叫DesignLink,有的直接叫Export ADS或ODB++,认准接口类型就行。
  2. 在弹出的对话框里,导出类型选择Allegro Layout格式或者ODB++格式,优先选ODB++,对层叠和过孔保留更完整。
  3. 选择目标ADS工程目录,ADS这边提前建一个workspace和design,专门用于EM导入。
  4. 在层映射表里,把Allegro层映射成ADS的Momentum层。命名规则通用做法是:TOP映射为MTR_TOP,GND层如果紧贴信号层则映射为MTG_TOP,BOTTOM映射为MTR_BOTTOM,具体按板子叠层顺序来。
  5. 勾选导出网络名和导出过孔,这两项非常重要,尤其网络名,丢了之后端口对应全靠猜。
  6. 设置输出精度。板卡如果是mil单位,精度选0.01mil或更高,防止细小特征丢失;如果是mm单位,选0.0001mm。
  7. 点Export,等待生成。

导出产物是一个文件夹。ODB++格式下会有matrix、layers、steps、stackup等子目录;Allegro ASCII格式会生成文本几何文件。ADS2019两种都能导入。

3.4 导出阶段常见的翻车点

导出完别急着关Allegro,先看生成文件夹的大小。如果文件只有几百KB,而板卡明明很复杂,大概率导出失败或者只导出了部分层。正常情况下,一块四层板、中等复杂度,ODB++文件夹应该有几十MB量级。

另一个高发问题是"所有铜皮导入后都没有网络名"。Allegro导出时没勾选net属性,ADS里所有铜皮就是有形状没名字,分配端口全靠手动猜网络,等于白干。导出前一定确认关键网络有明确命名,比如RF_IN、RF_OUT、GND。

还有一个很隐蔽的坑:Allegro里用negative plane负片方式画的电源层,导出到ODB++后有时会解析成大片空shape,看着是铺铜实际没有网络,在ADS里会干扰仿真。遇到这种层,导出前先把负片转成positive plane数据再导。

4. ADS2019导入后的第一道坎:层叠映射与版图几何修复

4.1 导入操作与单位检查

ADS2019里执行File > Import,选择Allegro Layout或者ODB++格式,具体入口取决于你导出时选了什么格式。进入导入向导后,第一件事是检查单位和精度。Allegro用mil导出,导入单位也选择mil;如果中途换成mm,你要清楚所有数值都会被解释成mm,层叠设置里的厚度单位容易混。

导入完成后,不要急着设端口。先打开View > 3D看一眼版图形态。一块真实板卡应该是平平整整的几层金属和介质。如果出现莫名其妙的悬浮长条、斜插的管状体,多半是过孔或圆弧在转换时变成了异常多边形,需要修复。

4.2 Substrate叠层逐项校对

打开Momentum的Substrate Editor,通常通过菜单EM > Substrate进入。ADS导入ODB++后会生成一个叠层,但默认参数几乎不可能正好等于板厂压合结构,必须逐项校对:

  • 层高度,每一层在厚度方向的位置,注意相邻铜层之间只能有介质,不要把两块铜之间再塞一层铜。
  • 金属材料,铜的电导率默认5.8e7 S/m,够用,高频建议开启表面粗糙度模型。
  • 介质材料,Er和tanD按板厂报告填。
  • 全局模板,如果板卡是混压结构,Momentum一次只能用一套叠层模板,混压区域只能拆开单独仿真。

校对完叠层后,我习惯先做一次单根微带线自检:随便挑一根已知线宽和参考层的走线,单独仿真一下特性阻抗,看是否接近理论值。如果差得离谱,不是叠层参数错,就是参考层映射错了。参考层映射错误是导入后最常见的静默错误,曲线看着正常,数值全都不对。

4.3 几何修复三板斧

ADS导入版图后,几乎一定会遇到三类几何问题:

  • 碎片多边形,ODB++解析时把大铜皮切成了大量小多边形,中间留着细缝。用Edit > Modify > Unify把同网络的polygon合并。
  • 悬空线段,导入后的走线在端点处经常有不到0.01mm的间隙。用Edit > Find勾选Open Ends或Dangling Lines,逐个修复。
  • 自交叉多边形,过孔或弧形转出来的polygon偶尔自相交,Momentum网格剖分时报错。用Edit > Cleanup把自交部分理顺。

做几何修复前,先File > Save Copy As留一份原始导入文件。几何修复是不可逆操作,万一修坏了还能回滚。

修复完几何,再跑一遍ADS自带的DRC,重点看Layer Check和Clearance Check。ADS的DRC不如Allegro强大,别指望它把所有短路开路都查出来,关键走线的连接关系还是要自己放大看。

4.4 网络检查与端口预规划

在ADS Layout里打开Net面板,查看导入后的网络名。如果全是$1这种数字,说明Allegro导出时网络属性没进去。此时两种选择:回Allegro重新导出,或者在ADS里手动Assign Net。手动指定时建议先把GND网络全部指定好,因为所有端口都依赖GND作回流参考。

端口预规划的思路是:想清楚待验证的链路两端在哪,准备在哪儿放置端口。比如PA输出匹配链路,信号入口是PA输出引脚附近,出口是天线焊盘附近,各放一个内部端口,参考地都指定到最近的GND层。

5. Momentum仿真设置:端口馈入、GND参考与扫频策略

5.1 端口类型选择的逻辑

Momentum里的端口分External Port和Internal Port两类。External Port位于仿真区域边界,Internal Port位于版图内部导体上。射频链路验证几乎都用Internal Port,因为你要测的是板内走线两端的S参数,不是边界处的场模式。

放置Internal Port有两种常用方式:

  • 用Pin元件放在走线末端,创建一个从走线到GND的激励。
  • 在走线末端画Pico Probe或Via Port,让端口跨接信号线和参考地平面。

实操里我常用Pin方式:在走线两端各放一个Pin,P1和P2,每个Pin的Ground Reference都指定到最近的GND金属层。如果Pin离实际回流过孔太远,仿真结果会偏高,因为多算了串联电感。这时要么把端口挪到过孔附近,要么先在端口附近补两个并联地过孔。

5.2 参考地与回流路径

单端微带线的回流路径在正下方的完整地平面层上。如果地平面被槽缝、隔离带切断,回流电流就得绕一大圈,等效电感会把谐振频率拉低。联合仿真真正有价值的点之一,就是把这个"不完美的地"显式建模出来。

仿真前扫一眼参考地铜皮:

  • 走线正下方一到两倍线宽范围内有没有挖空?如果有,这个位置已经变成带状线或共面波导结构,阻抗特性和纯微带完全不同。
  • 参考地是否只靠一两根过孔连接?如果是,高频回流会被迫走这根过孔,S21在某个频率可能出现凹陷。
  • 射频走线旁边有没有平行走线长距离伴行?这是耦合通道,严重时串扰直接影响链路指标。

地过孔栅栏的做法:在端口馈电点和走线两侧,按波长或更高频率对应的波长除以20来布地过孔。以2.4GHz为例,波长约125mm,波长/20约6mm,实际取3到5mm间距没问题。别打得过密,过密的过孔栅栏在低频会形成等效共面波导,反而改变特性阻抗。

5.3 网格剖分与扫频方式

Momentum是矩量法求解器,对金属边缘的网格密度最敏感。默认自动网格多数情况够用,但遇到底噪毛刺、谐振点偏移,需要手动加密:

  • Mesh > Setup里,把Mesh Frequency设置为仿真频率上限。比如仿真到8GHz,就填8GHz。
  • 系统会按波长的对应比例剖分。如果发现过孔、拐角、端口Pad位置有异常电流分布,可以对局部区域单独加密。

扫频方式我的建议是分阶段:

  • 初扫用Interpolating插值扫频,范围宽、速度快,先找谐振峰位置。
  • 精算时在谐振峰附近改用Discrete离散扫频,逐点算,结果稳,不会因为插值多项式跳过窄带谐振。

频率范围怎么定?至少覆盖工作频段并留出谐波观察余量。比如2.4GHz WiFi,我会扫1到8GHz,既看基波段的S参数,也能看到二三次谐波处的响应。如果只扫2.4到2.5GHz,带外问题会被你完美躲开,等板子回来测带外指标才发现问题就晚了。

6. 协同仿真验证:把EM模型拉回原理图做射频链路联调

6.1 让Momentum生成可用模型

Momentum仿真跑完后,先在数据显示窗口检查S参数曲线:

  • 曲线是否平滑,严重锯齿说明网格不够,先加密再重跑。
  • S21在通带内是否平坦,S11在目标频段是否有明显回损。
  • 曲线怪不要急着插进原理图,否则EM模型的问题会和原理图问题混在一起,后面很难定位。

确认没问题后,用EM > Component > Generate Symbol/Model把这个版图封装成带端口的子电路模型。生成时可以选择静态S参数模型,也可以用动态关联模型。动态模型的好处是改版图重新仿真后原理图自动更新,坏处是工程文件一挪地方链接就断。如果要把工程发给别人,生成静态S参数文件更省心。

6.2 与集总元件和器件模型混搭

协同仿真最常见的用法,是把版图级的走线EM模型,和原理图里已有的匹配元件、芯片S参数模型串起来。比如PA输出匹配链路:

  • 从PA输出引脚到天线之间的走线,用生成的EM模型。
  • 匹配用的串联电感、并联电容,用厂商S参数模型或ADS集总元件模型。
  • 芯片PA本身用datasheet提供的S参数文件或非线性模型。

仿真类型按需选择:

  • 小信号用S参数仿真,看回波损耗、插入损耗。
  • 大信号用谐波平衡仿真,看P1dB、IMD3,此时把PA的非线性模型接上,EM模型当作线性无源网络参与运算。

一个很实际的提醒:集总元件的寄生参数不能忽略。0402电容在2.4GHz时自谐振频率通常也在2到4GHz范围,如果理想电容模型,联合仿真结果会和实测差很远。一定要用带寄生参数的模型库或S参数文件。

6.3 从哪些指标判断链路达标

协同仿真最终要回答的问题是:这版版图能不能投。我的判读顺序是:

  • S11回波损耗,目标频段内至少-10dB以下,窄带接收机最好-15dB以下。
  • S21插入损耗,整条链路总插损结合链路预算评价,走线加匹配网络总插损0.5dB以内算健康。
  • S22和隔离度,射频开关、双工器场景重点看收发隔离。
  • 群延时,宽带信号场景对群延时平坦度敏感,通带内波动要小。

指标不达标时,先别怀疑仿真流程,回头查Allegro:线宽是不是算错、参考层是不是被割裂、匹配元件模型是不是不对。我遇到过S11抖成波浪的情况,最后发现是导出时一段地平面的网络名被导成了信号名,ADS把地当成了耦合走线来仿真,数据自然全废。

7. 联仿实战中的高频报错与排查思路

7.1 导出阶段:连不上、菜单消失、文件不完整

我整理了一份高频报错对照表,按现象、原因、对策三条线来看:

现象原因对策
Allegro导出菜单里没有ADS/ODB++接口组件未安装或菜单未刷新补装ADS的Allegro接口组件,检查环境变量
导出时报License错误ADS的Momentum或Layout模块授权未开启确认授权包含Momentum或ADS Layout模块
导出文件只有几KB层映射没选对,或者只导出了空层重新检查映射表,确认TOP/GND等层都在映射列表
导入后坐标整体放大或缩小25.4倍mil与mm混用统一单位再导入,Allegro用mil导就全程用mil

7.2 导入阶段:网络丢失、几何开短路

最常见的两个问题是网络名全丢和几何开短路。网络名全丢基本是因为Allegro导出时没勾选Net属性。几何开短路除了DRC漏检,还常因为ODB++对圆弧和多边形边界做了离散化,离散化后线段极短的点与点之间存在微小间隙,肉眼看不到但电磁算法看得到。前面说的Unify和Cleanup就是干这个的,修完后用Edit > Find > Open Ends再查一遍。

还有一个容易忽略但很关键的问题:过孔stub。Allegro里通孔贯穿所有层,但板厂实际可能会用背钻把不用的过孔段钻掉。仿真时如果按全贯穿过孔建模,高速信号会在stub上形成谐振。如果确定板厂做了背钻,需要在ADS里把过孔的未使用部分裁掉;如果没做背钻,那stub就是真实存在的,仿真结果能告诉你它影响多大。

7.3 仿真阶段:结果怪、剖分失败、谐振偏移

Momentum剖分失败通常和自相交polygon有关,Cleanup能解决大部分。仿真结果怪异时,按优先级排查:

  1. 层叠对不对,介质厚度、铜厚、Er。
  2. 参考地完不完整,地平面有没有被割裂。
  3. 端口位置对不对,有没有悬空,有没有盖在地铜上。
  4. 网格够不够密,Mesh Frequency设到多少。
  5. 扫频范围合不合理,窄带谐振要用Discrete扫。

层叠错误影响全局,端口错误影响局部,网格影响精度。按这个顺序排查,能避免大量无头苍蝇式的试错。

8. 我的快速验证套路与迭代经验

8.1 先用"测试条"跑通全流程

强烈建议第一次做联合仿真的人,别拿真实板卡练手。先在Allegro里画一块尺寸很小的测试条,上面就放两段50Ω微带线,一端接SMA焊盘,一端开路,两层板或四层板都可以。导出、导入、设端口、跑Momentum,把整条流程跑通。跑通之后再上真实板卡,你会发现大部分操作问题已经在这块测试条上提前排掉了。

这个测试条还有一个额外价值:你可以拿矢量网络分析仪实测它,把ADS仿真S参数和实测S参数放一起对比。两者对得上,说明叠层参数、端口设置、仿真设置都正确;对不上,说明某一环参数有偏差,趁早修正模型。带着校准过的模型去仿真实板卡,结果自然可信。

8.2 叠层参数库是越攒越值钱的资产

每次找到板厂拿到叠层报告,确认和实测相关性之后,我会把这些叠层参数存成一个共享文本文件,或者直接存成ADS叠层模板。下次同类板材直接套用,不用每次重新填一遍,填错了也没人告诉你。

联合仿真不是一次性的。Layout改了一版,重新导出仿真,对比两版的S参数变化,能直观告诉你是哪根线、哪个过孔、哪段地切割导致了性能变化。这种改版、仿真、对比的闭环信息,是单靠原理图仿真无论如何也拿不到的。

我做联合仿真这几年最大体会是:仿真的目的不是让软件满意,而是让下一版板卡少改一次,让测试台上的实测数据有据可依。工具链本身不复杂,按这篇流程走一遍,大部分坑都能提前避开。真正门槛在于你是否愿意在投板前多花这半天时间,把版图级电磁仿真加进你的常规迭代里。我个人的经验是,这半天省下的改板周期,通常是以周为单位的。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/6 6:57:17

riscv-tests实战:RISC-V CPU设计验证与指令集自检全解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 6:53:37

PCB晶振电路设计实战:从原理图到DRC检查的完整流程

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 6:53:34

STM32嵌入式开发实战:从选型到调试的完整指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 6:51:34

I2C外设调试四层漏斗模型:从物理连通到软件协同

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 6:51:21

Allegro转PADS迁移实战:约束丢失、差分失效与热焊盘修复

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/6 6:50:50

FAST-LIO实战:ROS Noetic下mid360雷达部署与建图全攻略

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华