1. 项目定位:这套模拟器到底在模拟什么
半实物仿真这四个字,在飞控研发和航空试验圈子里不算新词。但把半实物仿真、实时仿真、运动飞行模拟器三件事压进同一个项目里,做出一套既能给飞控算法做闭环验证、又能给飞行员提供真实运动感受的设备,这件事依然是很多团队容易踩坑的地方。我这次要分享的,就是自己在搭建这样一套系统时的完整思路、选型逻辑和实际操作记录。
先说清楚这套东西是什么。简单讲,就是把真实的飞行控制计算机(飞控板)、舵机、驾驶舱操纵机构这些硬件,和以飞行器数学模型为核心的软件模型放进同一个闭环里实时运行。飞机本体用数学模型替代,但飞控、作动器、传感器接口、甚至运动平台都是实物。这样一来,你在实验室里就能让真实的飞控去“驾驶”一架虚拟飞机,感受它飞上天、失速、盘旋、撞上风切变之后的表现,而不需要真的放飞一架飞机。
它能解决的核心问题很直接:空域和场地的限制不存在了,测试的可重复性和故障注入能力都大幅提升。你可以让同一套飞控在这个闭环里跑一百次同样的机动,也可以在极限迎角、传感器失效、舵面卡死这些离线仿真里容易建模、却很难真实发生的故障条件下,观察硬件飞控的真实响应。
适合谁看?如果你是飞控工程师、半实物仿真平台的搭建者、实验室里带学生做飞行模拟课题的老师,或者想验证自己开源飞控算法但没有条件外场试飞的人,这篇文章应该能帮你省下至少一个月的摸索时间。
1.1 “半实物”到底“半”在哪里
“半实物仿真”这个名字经常让人误解,以为系统只有一半是完整的。实际上它不是“残缺的一半”,而是“实物与虚拟模型各占一半”的组合仿真,英文叫硬件在环(Hardware-in-the-Loop,HIL)。
在我这个项目里,实物侧包括:飞行控制计算机、舵机及其驱动、操纵杆与脚踏、六自由度运动平台、座舱显示设备。模型侧包括:飞机六自由度运动方程、气动力与力矩模型、发动机模型、起落架模型、大气与风场模型、传感器模型。两侧通过IO接口和实时通讯协议连成一个小时不碎的闭环。
为什么“半实物”有价值?因为纯数学仿真里,飞控硬件本身是被等效的,控制律在Matlab里跑得通,不代表烧进真实单片机里跑得对。真实的芯片会有传感器噪声、ADC量化误差、指令刷新周期、中断延迟、通信丢包,这些东西在纯仿真里你用传递函数和噪声源模拟,很难完全还原。半实物仿真把飞控硬件放进回路,等于让控制律和它的“肉体”一起检验。
另一层原因是安全。外场试飞有坠机风险,有些边界状态根本不敢真正去飞。半实物仿真里,你尽管给一个持续失速的指令,让飞控自己判断怎么改出,哪怕模型跑到倒飞都没事,模型反正不会真的摔。
1.2 为什么“实时”两个字不能随便喊
实时仿真和普通仿真最大的区别,不在速度,在确定性。
普通离线仿真,同样一个飞行过程,电脑感兴趣跑三分钟就算完;它今天算出一个结果,明天再算,步长可能被优化器自适应地调大调小。这对分析单次飞行曲线没有影响。但半实物仿真不行,因为一端的飞控是真实时间运行的,它按自己的时钟接收传感器数据、输出控制信号。模型侧必须在固定步长内完成计算并输出结果,比如主仿真周期1毫秒,那么每一毫秒都要算完当前帧,迟了哪怕一微秒,飞控就会觉得传感器数据“卡了”,控制动作就会异常。
我用一个生活类比解释:离线仿真就像录乐队排练,你录音的时候可以单独补录某一段,反正最后剪到一起就行;实时仿真就像现场演出,每个乐手都必须跟着同一个节拍器走,鼓手如果晚半拍,整个队就散了。
所以“实时”在工程上判定标准不是“算得快”,而是“每个节拍都准点完成”。我们在项目里定的硬指标是:飞行力学主回路步长1毫秒,洗出滤波与运动平台指令回路步长2毫秒,传感器仿真信号更新周期10毫秒,总链路延迟(从飞行员操作到运动平台动作)控制在100毫秒以内。这几个数字不是拍脑袋定的,后面会具体解释为什么。
1.3 运动飞行模拟器在回路里的真实角色
如果只是一台飞控验证台,不需要运动平台。但要做成“运动飞行模拟器”,平台就不是摆设了。
运动平台在闭环里的价值,是给飞行员提供真实的惯性力感。人坐在模拟器里,身体的感受主要来自前庭系统和本体感觉。一个横滚动作,如果只有视景发生旋转而身体没有跟着倾斜,大脑马上会产生冲突,轻则感觉“假”,重则几十秒后就晕。加装六自由度运动平台后,飞行的俯仰、滚转、偏航和过载变化可以通过平台的位移和姿态变化来模拟,让飞行员产生接近真实的运动感知。
它同时也是一个测试载体。通过平台产生的不同频率、幅值运动,可以评价半实物仿真系统中飞控的鲁棒性,比如模拟机体在一定频率下的振动、模态耦合,观察飞控反馈是否出现异常振荡。这一层对工程机型的验证很有价值。
2. 系统架构与关键器件选型:五层闭环怎么搭
整套系统我习惯分成五层来理解:人机层、运动层、物理层、实时层、模型层。这五层不是简单的几个盒子摞在一起,它们之间的信号走向决定了整个系统的质量。
2.1 五层架构,一层都不少
| 层级 | 典型设备 | 核心职责 |
|---|---|---|
| 人机层 | 驾驶舱座椅、操纵杆、油门台、仪表屏、视景显示器 | 接收飞行员操作,呈现视觉反馈 |
| 运动层 | 六自由度Stewart平台、运动控制器、伺服电机 | 执行洗出滤波指令,产生运动感觉 |
| 物理层 | 真实飞控计算机、舵机、信号调理板卡 | 运行真实飞控算法,驱动真实作动器 |
| 实时层 | 实时目标机(带IO板卡) | 运行飞机模型、传感器模型、洗出滤波算法 |
| 模型层 | PC端Matlab/Simulink开发环境 | 建模、编译、参数监控、曲线分析 |
信号的实际走向是这样的:飞行员推动操纵杆,杆位移通过模拟量或CAN总线进入物理层的飞控计算机;飞控按控制律算出舵机指令,驱动真实舵机,这个舵机位置又会反馈到实时层;实时层中的飞机模型根据舵面偏转、当前飞行状态计算下一时刻的飞机运动,再把更新的空速、姿态、位置等信号送回飞控计算机,形成飞行闭环。
与此同时,实时层把飞机的过载和姿态变化送给洗出滤波算法,转成平台运动指令,经运动控制器输出到伺服电机;飞机位置姿态则通过UDP或者共享内存发送给视景渲染引擎,生成座舱外景象。飞行员眼睛看到、身体感受到、操作能引起响应,整个回路才闭合。
在实际搭建时,这五层里最容易被忽略的是物理层和实时层之间的信号调理。许多人买了飞控和目标机,接上就以为能通,结果因为电平不匹配、地线电位差、接口速率不一致,导致信号乱跳。这个问题我会在后面的实操和排查部分详细说。
2.2 实时目标机的选型经验
实时目标机是整个系统的计算核心,不能把它当作一台普通的工控机来用。关键差异在于操作系统对任务调度的确定性。
我们最早考虑过三个方案:Speedgoat、NI PXI、以及基于Simulink Real-Time加普通工控机的自组方案。Speedgoat和NI PXI成熟稳定,支持同一套Simulink模型直接部署,IO板卡种类多,缺点就是贵,一套下来动辄几十万。对于预算有限的实验室或初创团队,自组方案是更现实的选择。
我最终用了Simulink Real-Time协议跑在一台Intel i7处理器、16GB内存的工业PC上,配了两块PCIe模拟量采集卡、一块CAN总线卡和一张千兆网卡。Simulink Real-Time的优势是模型从Matlab/Simulink编译下载后直接运行在独立实时内核,实时性可靠,IO驱动也自带。为了稳定,我把电脑的板载无线网卡和蓝牙都拆了,BIOS里关闭超线程和节能模式,网络中断固定到单独一个CPU核,避免Windows后台任务干扰实时循环。
这里给一个选型的个人结论:如果你团队里有人熟悉Linux实时内核,可以自研基于Xenomai或Preempt-RT的方案,但开发周期长;如果只求快速出结果,直接Simulink Real-Time加一台可靠工控机,性价比最高。IO数量不大时,NI的USB多功能采集卡也能应急,但不建议用于长期正式试验。
2.3 六自由度运动平台怎么选参数
运动平台的选型是另一个容易走弯路的地方。平台不是“行程越大越好”,而是必须和你要模拟的飞机动态范围匹配。
六自由度运动平台绝大多数采用Stewart并联结构,六根电动缸支持动平台实现三个平动和三个转动。并联机构刚度大、承载能力强,特别适合周期性高速运动。我们项目里需要的负载包括一名飞行员座椅、驾驶舱结构以及部分线束,合计约300公斤。
平台主要参数我们是这样定的:垂直行程±300毫米、纵向和侧向行程±250毫米,滚转和俯仰角度极限±25度、偏航极限±30度,最大加速度约0.8倍重力加速度。为什么需要0.8g?因为模拟飞机起飞滑跑加速和急滚转时,身体感受到的侧向过载如果少于0.3g,基本没有体感;达到0.8g会让肌肉和张感觉明显动作,但又不会触碰到平台行程边界。
选型时一个很容易犯的错误是只关注“速度”而忽略“加速度”。运动模拟中真正让人晕的不是某个稳定速度,而是加速度突变。平台电机加速响应如果跟不上洗出滤波输出的高频分量,整个运动感觉就会发钝、发假。所以在电机额定参数上,我刻意选了峰值加速度裕量较高的伺服电机,舍弃了一部分最大速度指标,实际效果明显更好。
3. 核心细节解析:模型、接口与洗出滤波算法
硬件架构定完之后,真正决定这套系统能不能用的,是模型精度、接口映射和洗出滤波三个核心环节。它们分别对应物理上的“飞机飞得真不真”“信号传得准不准”“人坐着像不像坐飞机”。
3.1 飞行动力学模型的实时化处理
飞机模型是整个仿真回路里最重的软件模块。我这次模拟的是一架小型固定翼无人机改的有人驾驶验证平台,气动数据来自CFD和风洞实验的合并结果。模型本身不算复杂,但“实时化”处理有不少讲究。
标准的六自由度刚体方程并不难写,包含力方程、力矩方程、以及基于四元数的姿态运动学。为了满足1毫秒步长,我们做了三点处理。
第一,气动力的计算做了预处理。把随马赫数和迎角变化的气动系数表提前生成,运行时用二维查表和线性插值,而不是在每一步都重新计算复杂的多项式表达式,这样可以把计算时间压缩到原来的一半以下。
第二,积分算法统一采用固定步长四阶Runge-Kutta。变步长求解器在离线仿真里很好用,但在实时环境里会造成步长不确定,导致每一步计算耗时差异很大,飞控侧很难适配。固定步长1毫秒下,RK4对这样一架亚声速飞机来说精度完全够,短周期振荡频率和长周期模态都能正确复现。
第三,姿态表示使用四元数作为主状态,只在需要输出到视景或运动平台时才转成欧拉角。这样避免了俯仰角接近正负90度时的奇异问题,也避免了欧拉角微分方程在高机动状态下的数值漂移。四元数也有它的麻烦,就是每几步需要做一次归一化,否则长时间运行会积累误差,我是每100个周期强制归一化一次。
这部分的经验是:实时化并不等于把离线模型“照搬”到实时机,而是要重新梳理计算顺序,把重计算和轻计算错开,把固定开销和平滑开销做区分,给每一个步骤建立一个“每秒触发一次”的离线任务,专门做查表预生成和参数重算。
3.2 从飞控实物到实时机的接口映射
接口映射是半实物仿真项目里工作量最大、也最枯燥的部分。飞控要正常工作,它必须按时收到它认为“真实”的传感器数据,比如三轴角速率、三轴线加速度、空速、气压高度、位置坐标等;同时它输出的舵机PWM信号或总线控制指令,也要被实时机完整接收并转换成模型中的舵面偏转角度。
我这次用的飞控是某开源飞控平台的工程板,支持对待测的HIL模式。HIL模式下,飞控不再读取板上物理IMU,而是通过串口或CAN接收来自实时机的传感器仿真数据。这样飞控芯片里的控制律、传感器融合算法、故障检测逻辑全都在真实硬件上运行,只是数据来源变成了仿真模型。
接口映射表是必须白纸黑字写清楚的文档,每一项都要有通道名、信号类型、更新周期、量程、字节序、增益和偏置。比如:
| 信号方向 | 信号内容 | 接口类型 | 更新周期 |
|---|---|---|---|
| 实时机 → 飞控 | 三轴角速率 | CAN,0x201帧 | 10ms |
| 实时机 → 飞控 | 三轴线加速度 | CAN,0x202帧 | 10ms |
| 实时机 → 飞控 | 气压高度 | CAN,0x205帧 | 20ms |
| 飞控 → 实时机 | 舵机PWM指令(四路) | PWM输入采集 | 10ms |
| 飞控 → 实时机 | 飞控状态/模式 | 串口RS422 | 100ms |
有一个我踩过的坑是字节序。CAN帧里的数据有Intel小端和Motorola大端两种排列,飞控和采集卡如果不一致,就会出现“油门一推,高度反而往下掉”的诡异现象。排查这种问题别靠猜,直接做一个回环测试:实时机发一帧已知数值的指令,飞控原样返回采集结果,比对字节排列就能定位。
3.3 洗出滤波算法:如何用一个不动的平台“骗”过身体
运动平台的行程是有限的,但飞机可以持续飞行、持续加速,平台的物理行程不可能跟真飞机一样无限延伸。洗出滤波算法就是来解决这个矛盾的:它把飞机模型输出的无限行程运动,翻译成平台在自己有限行程内能模拟的运动。
人对自己身体的运动感知主要来自前庭系统。半规管对旋转角速度敏感,耳石器对线加速度敏感。前庭系统有一个特点:对低频、持续不变的线加速度感知会逐渐减弱,但对角速度和姿态倾斜变化很敏感。洗出滤波利用了这一点,用平台的空间位置变化去模拟短促的高频运动,用平台慢慢倾斜,让重力在身体坐标系里产生一个“分量”,来模拟持续的低频线加速度。这就是经典的倾斜协调原理。
我们这一版用的是经典洗出滤波,三个通道:
高通滤波通道处理线加速度,把飞机模型计算出的纵向、侧向、垂向线加速度中低于阈值的持续分量滤掉,只保留高频的、能给身体带来真实冲击感的加速度变化。高通滤波器的截止频率取大概0.8到1.2Hz。
高通滤波通道处理角速度,让平台的旋转运动快速响应飞机的俯仰、滚转和偏航角速度,但超过平台行程的部分会被滤除。角速度高通截止频率取0.5到0.8Hz。
低通滤波通道是倾斜协调,把滤下来的持续线加速度转化成平台的目标倾斜角度。低通截止频率取0.3到0.5Hz,并设置了倾斜速率限制,通常每秒不超过15度。如果这个速率限制设得太高,飞行员会明显感到平台在“滑走”,产生一种与实际飞机不符的奇怪错觉;如果设太低,则加速感建立得太慢,虚拟感觉像鸭子过河。
这三个通道的输出合起来,再经过平台运动学反解,计算出六根电动缸各自的目标长度。最后还要加一个限幅器,确保平台任何时刻都不会触碰到机械行程边界。我特别提醒一点:洗出滤波的参数不是原理写完就能固定的,必须在平台上让真人感受,来回调。
4. 实操过程:四步联调一套可用的运动飞行模拟器
下面完整记录我们当时的搭建和联调过程。这部分多数内容来自实际操作现场,照着做基本不会走偏。
4.1 第一步:把实时仿真子系统跑起来
实时子系统是整个项目最先动工的部分。先用Simulink搭飞机模型和传感器模型,然后把模型用Simulink Real-Time编译,生成可在目标机上独立运行的可执行文件。我这里建议使用一个简单的双机架构:开发机装Matlab,负责编辑模型和查看曲线;目标机装实时运行环境,只运行编译后的模型,不接受任何开发操作。
第一次下载模型后,不要直接连飞控,而是先做开环测试。给飞机模型一个固定的升降舵阶跃,看俯仰角速度、迎角、法向过载的响应是否和离线仿真一致。我当时就发现实时机上输出曲线的采样率比离线低,导致曲线看起来“抖”,其实是示波器模块本身的采样设置问题,不是模型问题,改查采样保持时间后就正常了。
还要检查实时循环实际执行时间。在Simulink Real-Time里直接运行时间监控工具,能看到每个仿真步长的执行时间统计。飞行模型加洗出滤波后,在1毫秒步长下的平均执行时间大约0.4毫秒,最大执行时间不应超过0.9毫秒。如果接近1毫秒,先把计算热点优化掉再接其他子系统。
4.2 第二步:接入飞控实物并打通I/O
实时子系统稳定后,开始接入真实飞控。先不接舵机,用仿真环境里的“舵机模型”代替真实舵机,保证飞控输出的PWM信号能通过采集卡转换后进入飞行力学模型。这一步主要是验证信号通路:飞控输出的每一路PWM与仿真模型里的舵面映射是否一一对应、极性是否正确。
映射验证有一个经典做法:让飞控处于手动模式,给一个固定的副翼杆量,观察实时模型里副翼偏转角和滚转力矩方向是否与操纵一致。方向错了,应该立刻会发现滚转角反向增大的现象。这时候别慌,大概率不是接线错,而是PWM映射表的符号取反,在模型中把该通道增益设为负值即可。
之后接入真实舵机。注意舵机供电要和信号参考地严格隔离,我的仿真机与舵机电源共地导致过一次CAN总线波特率跑飞的故障,后来在电源输入侧加了隔离DCDC模块,故障消除。
4.3 第三步:整定洗出滤波并驱动运动平台
IO打通后,运动平台可以接进回路。先不要让模型真实飞行,而是让飞机模型固定在一个悬停或者直线平飞状态,手动输入一段已知的加速度波形,比如5秒内从0加速到0.5g。观察平台移动是否跟随加速度波形,是否存在明显迟滞。
然后输入几个典型的飞行动作:快速拉起、突然滚转、持续盘旋。观察平台在行程边界附近的表现。如果闻到伺服电机过载报警或看到平台位置接近限位,优先调整洗出高通滤波器的截止频率,而不是直接减小输入增益。
真人测试是必不可少的环节。我当时找了两个熟悉飞行感觉的同事,一个坐进座舱,一个在旁边记录主观打分。我们反复对比了三组参数:高通截止频率分别是0.6Hz、1.0Hz和1.4Hz。结论是1.0Hz那组在“感知真实”和“避免虚假运动”之间最平衡,1.4Hz虽然高通动作更猛,但会频繁触发平台的限幅和保护,整体反而感觉不自然。
4.4 第四步:接入视景,完成人机闭环
人机层的最后一块是视景。我们采用的是FlightGear作为渲染引擎,它与模型实时机之间用UDP协议通信,每秒发送30帧飞机位置、姿态、空速、高度数据。视景机放在另一个普通PC上,不做任何实时计算,只负责渲染。
关键同步点在时间对齐。真实SIM和视景机各有自己的系统时钟,如果不做对齐,飞机已经滚转10度了,视景里还保持上一帧的姿态,飞行员会看见“延迟的世界”,非常容易晕。解决方案是UDP数据包里包含模型时间戳,视景机收到后不是直接显示,而是根据当前本地时间与时间戳差值做插值预测,补偿50毫秒以内的网络抖动。
全部接通后的联调是在自动飞行模式做的。我们给飞控设定一组航点,飞控自己控制飞机完成起飞后的平飞转弯。飞行员在驾驶舱观察视景,同时感受平台的转向倾斜和速度变化。我们实测的总链路延迟约85毫秒,其中运动平台延迟约占30毫秒,处于可接受范围。整套系统在这个阶段才真正具备“半实物”的样子。
5. 常见问题与排查技巧实录
这一节是从项目试运行到正式交付期间踩过的坑,很多问题不是看手册能发现的,记下来给后来人当参考。
5.1 实时任务超时导致飞控“断片”
现象是飞控在连续运行几分钟后突然报传感器丢失,几毫秒后恢复,但每次恢复后都会有一次明显的舵面抖动。排查时发现not实时机的操作系统日志里有一个“overrun”计数在持续增长。
原因有两点:一是模型里有一处气动系数查表的边界条件,在某个特殊迎角范围会触发复杂的线性插值分支,计算量比正常路径大;二是实时内核所在CPU被板载显卡的中断频繁打断。解决办法是在模型中把该查表改为强制x2插值,并固定插值步长,将显卡中断屏蔽掉,主循环最大执行时间立即降下来。
经验是:实时系统对环境干扰极其敏感,任何非模型计算都可能破坏节拍,所以“关掉不必要的中断”这一步必须做扎实。
5.2 运动平台在特定频率下的共振
运动平台加载后,在做某些小幅高频机动时出现明显的嗡嗡声和抖动,频率大概在7Hz附近。断开平台,直接看洗出滤波输出,发现7Hz附近确实有能量峰。
我通过平台扫频测试确认这是机械结构的模态频率。解决方向是加一个陷波滤波器,专门把7Hz附近的增益压下去,保留其他频段。但要注意,陷波器会引入相位滞后,加在反馈路径上可能引起不稳定,所以加在洗出滤波输出端、运动控制器之前,并同时做一次相位补偿。
这类问题最怕“一刀切”:简单加低通滤波把所有高频都滤掉,平台是安静了,但运动模拟的体感会明显变钝,飞行员觉得像坐了艘橡皮艇,毫无飞行感。
5.3 CAN总线数据错位和偶发跳变
联调时遇到过一次很头疼的情况:飞控收到的空速数据偶尔会跳变成超大值,短时又恢复。检查CAN总线波形,没有发现电平异常,但偶尔出现CRC校验错的帧。
最终定位是CAN总线终端电阻松动。我把节点数量增加后,忘了在总线两端各接一个120欧姆终端电阻,导致信号反射,特定速率下的数据出错。补齐电阻后问题彻底消失。另一个相关经验是CAN总线布线应该采用屏蔽双绞线,不与舵机的功率线走同一线槽,否则大电流变化会通过电磁耦合“打”在CAN线上。
5.4 洗出滤波参数不当导致飞行员产生“爬坡错觉”
有一次测试持续平飞加速,平台会缓慢地抬头,让飞行员觉得自己在一个青云坡上爬,但视景里明明平飞。这个感觉正是倾斜协调的副作用:为了用重力分量模拟持续前向加速度,平台必须缓慢后仰,如果抬头速率做得太快,前庭系统就会检测到清晰的姿态变化,产生“爬坡”错觉。
我们把倾斜协调的低通截止频率从0.6Hz降到0.4Hz,倾斜速率限制从每秒18度降到每秒8度后,飞行员的主观评分从“明显不自然”变成了“基本可接受”。硬要追求完全无错觉很困难,关键是让视景和运动相互印证,眼睛看到平飞,身体慢慢感受到轻微后仰加速感,大脑就会选择相信眼睛,主观感受会好很多。
5.5 问题速查表
| 现象 | 可能原因 | 快速处理 |
|---|---|---|
| 实时任务频报超时 | 模型热点计算过重、中断干扰 | 优化模型、关闭非必要中断、核对执行时间 |
| 平台7Hz共振 | 机械模态被激励 | 加陷波滤波器、降低该频段能量 |
| CAN数据偶发跳变 | 终端电阻缺失、线槽干扰 | 补120欧终端电阻、强弱电分离布线 |
| 持续过载下驾驶有爬坡感 | 倾斜协调参数过激 | 降低低通截止频率、限制倾斜速率 |
| 视景运动明显落后于平台 | 网络时间未对齐 | 加时间戳、视景侧插值预测 |
| 飞控收到的传感器噪声大 | 信号调理或接地问题 | 检查参考地、加隔离电源 |
最后分享一点个人体会
这套系统从搭框架到完整能够使用,前后差不多四个月。回头看的最大感受是:硬件买回来只是开始,真正占用时间的相机是模型实时化、接口对齐、洗出滤波整定和故障排查,每一步都比想象中更有讲究。运动飞行模拟器最神奇的地方在于,它把飞行这样一个充满危险、不确定性的物理过程,压缩在一个实验室里,却还能让坐在里面的人真实地手心出汗。
如果只让我说一个落地技巧,那一定是联调前花两天做一个“信号快照记录器”:把操纵指令、飞控输出、模型状态、洗出滤波输入、平台反馈这几个关键信号统一打上时间戳,录成同步文件。没有这个基础,出了问题你就只能猜,而猜是调试里最贵的浪费时间。装上这个东西之后,后面所有故障定位基本都靠它,效率提升非常明显。