多彩编程 多彩编程MZPH · CODE BLOG
ARTICLE DETAIL

文章详情

深耕前端与后端开发技术的一线实战笔记与踩坑复盘。

无人机编队纯方位无源定位:从测向交叉到协同校正

无人机编队纯方位无源定位:从测向交叉到协同校正 2022年国赛B题“无人机遂行编队飞行中的纯方位无源定位”是我个人觉得那一年最值得反复咀嚼的一道题。它表面上是一道几何定位题实际上把测向交叉定位、可观测性分析、闭环控制、误差传播和集群协议串在了一起背景又特别实在——编队飞行时要尽量减少电磁辐射于是只能靠被动测角来互相校准位置。这篇解析按三个小问的顺序把建模过程、公式推导、仿真思路和踩坑点一次讲完拖了这么久终于把完整版收尾了。适合正在备战国赛的同学也适合对多机协同定位算法感兴趣的研究者。1. 先把这个题目的几何场景在纸上画清楚1.1 十机圆形编队的坐标设定题目给出的初始场景是10架无人机FY00—FY09组成圆形编队FY00在圆心其余9架均匀分布在半径100m的圆周上。为了讨论方便先把坐标系定下来取FY00为原点O(0,0)取FY00指向FY01的方向为x轴正方向于是FY01的坐标为(100,0)。其余各机的名义位置就是圆周上每隔40°的那些点第k架的名义极角为φk(k−1)×40°k1对应FY01正好处于0°方向。这里有一个很容易忽略的细节FY00和FY01是“基准机”位置被认定为精确已知并且它们向外发射信号其余无人机的任务是仅仅通过测量“信号到达的方位角”来确定自己在编队坐标系中的真实位置。注意题目说的是测角不是测距所以三边定位那一套需要距离信息在这里完全不适用必须用测向交叉定位的思路重新建模。1.2 “纯方位”在数学上到底给了我们什么信息假设接收机位于P(x,y)发射机T_i的位置已知。接收机测得的是从P看向T_i的方向相对于基准方向比如x轴正方向的夹角α_i。反过来想所有能满足“从P看T_i的方向角为α_i”的点P都落在同一条过T_i的直线上。也就是说一次测角把接收机的可能位置从整个二维平面压缩到了直线上。用方程写就是α_i atan2(y_i − y, x_i − x)未知量是x和y。如果想更严谨一点把无人机自身机头方向与基准坐标轴之间的夹角也设为未知量δ那么实际测到的是相对机头的夹角β_i α_i − δ方程里就同时出现了x、y、δ三个未知数。这一点是理解第一问的关键后面会反复用到。提示纯方位定位里“测量值是角度”这件事决定了它和三边定位、多边定位有本质区别后面所有可观测性分析都要从观测方程出发而不是从几何直觉出发。2. 第一问拆解两架基准机为什么不够第三架该选谁2.1 两条方位线的交点表面看来能解先看理想情况。如果只有FY00和FY01两个发射机而且假设接收机的航向基准是准确的δ已知那么两条方位线一条过圆心一条过FY01它们的交点就是接收机的位置P。两条直线交于一点这是最基础的几何事实方程也只有两个未知数、两个方程代数上完全可解。所以很多参赛队在第一问直接写“两架够用”然后就开始列方程求解。这个结论在“理想且姿态基准精确”的条件下没有错但它恰恰踩中了出题人埋的坑。题目问的是“能否确定自身位置”而不是“能否列出方程”这里面的差距就是第一问真正的考点。2.2 为什么标准答案是“两架不够”第一层问题出在退化。如果接收机恰好落在直线FY00—FY01上两条“方位线”变成同一条直线交点不再是唯一的无数个位置都能给出同样的两个方位角。换句话说这种构型下接收机完全不可观测。圆形编队里虽然名义位置上没有哪一架恰好位于这条退化线上但无人机一旦发生偏离就可能进入退化区域即便没有严格共线只要两条方位线的交会角很小微小的测角误差就会让交点位置剧烈抖动定位结果不可用。第二层问题更重要纯方位测量本质上只能提供角度而方位角的测量基准无人机机头指向在实际中并不精确已知。把航向偏差δ也作为未知量后一架接收机面对两架发射机只有两个方程却有x、y、δ三个未知数方程组欠定解不出来。这正是测向无源定位领域的经典结论二维平面内至少要3个已知位置的信标才能完成可靠的纯方位定位。所以这道题的正确切入点是可观测性分析写出观测方程后判断雅可比矩阵是否满秩。两架发射机时不满秩三架发射机时一般位置都能满秩这才是“至少三架”的严格理由。论文里如果能把这个矩阵写出来评委立刻就知道你是真的理解了这个模型而不是在背结论。2.3 第三架发射机怎么选既然需要三架接下来就是选哪三架。原则很简单三架不能共线并且与接收机形成的交会几何要尽量“结实”。对圆形编队来说FY00在圆心FY01在圆周0°位置第三架只要不是和FY01处于同一条过圆心的直线上理论上都能保证非退化。这道题的9机编队里无人机按40°间隔排布实际不存在与FY01严格相差180°的那一架所以任意第三架在几何上都勉强可用。但从误差角度第三架和FY01的夹角越小三条方位线交会时越容易出现“长条形”误差椭圆。实践中最稳妥的选择是取与FY01大致成90°关系的那一架这样方位线之间的夹角最接近90°定位精度最好。放在本题构型里80°方向的FY03就比40°方向的FY02更合适。如果题目允许在已知名义位置的条件下指定发射机那么FY00、FY01加FY03就是一个典型方案如果只能先利用两架基准机完成初始校准则需要按“先粗定位、后启用”的流程把第三架的精确位置迭代出来。另外要提醒的是第三架发射机一旦开始发射它的位置必须是可信的。实际工程中会先让候选机利用FY00和FY01做一次粗定位确认偏离不大后再作为基准对外广播这个过程本身也要写进模型里。评卷时这种工程细节非常加分它会告诉评委你不只是在解一道几何题而是真的在思考一个可运行的系统。3. 第二问拆解从“发现偏离”到“调整回位”的完整闭环3.1 用角度残差判断“有没有偏离”第二问的场景回到了两架基准机FY00、FY01发射某一架接收机怀疑自己偏离了名义位置。首先回答“能不能判断”。如果你接受上一节的“航向偏差未知”模型那么两架发射机虽然不能把位置完全解出来却可以算出一个与航向无关的量两路信号的到达角之差γ β1 − β2 α1 − α2。这个角度差只取决于接收机与两个发射机的几何关系也就是接收机在什么位置看到FY00和FY01的夹角。每个名义位置都对应一个理论夹角γ0这是由编队几何预先算好的常量。把实测γ与γ0一比较如果差值超过测角噪声允许的范围就能判定“我偏离了”。这个判据计算量极小实时性很好而且天然不依赖机头朝向鲁棒性很强。如果采用“航向已知、直接两线交会解位置”的模型“是否偏离”的判断更直接解出的实际位置P与名义位置P0之间的距离超过阈值就判定偏离。两种模型给出的判断结论是一致的区别只在于前者只知道偏了但不知道具体偏到哪后者能直接给出偏差向量。3.2 偏差方向怎么定径向与切向采用“航向已知两线交会”模型时偏差向量可以直接算出来e P − P0。圆阵里最有意义的做法是把它分解成沿半径方向的径向分量e_r和沿圆周切线方向的切向分量e_t。径向分量说明无人机离圆心太远还是太近切向分量说明它在圆周上的相位角偏了多少。写成公式就是e_r (P − P0)·u_re_t (P − P0)·u_t其中u_r是P0处的外法向单位向量u_t是切向单位向量。如果坚持用更严格的“两架航向未知”模型那仅凭γ一个量只能把接收机限定在某条等夹角圆弧上偏差方向并不唯一这时就必须引入第三架发射机或者借助相邻无人机的已校准位置。我在解析里会把两种层次的答案都写进论文先用简单模型给出可操作的调整策略再说明模型假设成立的条件以及条件不满足时的备用方案。这种写法既完整又有层次评卷老师通常很吃这一套。3.3 调整策略比例校正加死区加步长限制确定偏差方向后调整本身不复杂。最简单的闭环策略是比例校正每次测角后计算偏差e然后命令无人机向名义位置移动μ·e其中μ是0到1之间的收敛系数。为了不让无人机来回振荡还要设置死区比如偏差小于0.1m就认为到位、最大单步位移避免相邻机碰撞和最大迭代次数。收敛性可以做一个线性化分析如果每次测量误差是零均值高斯噪声校正步长μ固定那么位置误差的期望会按(1−μ)的指数规律衰减迭代k次后残余偏差约为(1−μ)^k乘以初始偏差。μ取0.5左右时通常几轮迭代就能收敛到死区以内。实际仿真中我常用μ0.6配合20轮迭代上限效果很稳定既不会发散也不会因为步长太大在名义位置附近来回晃。3.4 共线盲区与应对第二问最容易被忽视的是盲区。当接收机恰好位于FY00与FY01连线上时两条方位线重合无论用哪种模型都无法解算位置。对于圆阵这个盲区出现在x轴方向上除FY01以外的区域无人机飘到那边时测得的两个方位角要么同向要么反向信息量几乎为零。工程上的应对有三招一是检测到两条方位线夹角小于某个阈值比如5°时自动申请邻近已经定位的无人机作为临时参考相当于动态增加一个虚拟基准二是直接让第三架发射机保持常开从根源上消除盲区三是在调整协议中加入“先飞离退化线、再重新测量”的规避动作。在论文里把盲区分析和应对策略写清楚是第二问拿高分的分水岭。4. 第三问拆解100架规模的发射机配置与校准协议4.1 规模扩大后真正要解决的是什么第三问把编队规模从10架扩大到100架很多人第一反应是“那就多放几架发射机”。但这一问真正考的不是发射机的数量而是三件事覆盖、精度、协议。覆盖指的是任何一架接收机在任何可能的偏离位置都能获得足够的方位信息精度指的是定位误差不能随编队规模扩大而失控协议指的是所有无人机如何有序地完成“测量—解算—调整—校验”全流程避免互相干扰和误差传染。如果只是把10架的方案简单复制会出现一个典型问题只有3架发射机时离发射机最远的接收机方位交会角很小定位误差被显著放大而100架编队的覆盖范围通常比10架时更大这个问题会非常突出。4.2 最少发射机数量从几何到误差的双重约束从纯几何可观测性来说3架不共线发射机就能覆盖整个圆阵所以“最少3架”是最早能想到的答案。但做误差分析就会发现3架方案对远端无人机的定位精度极差。简单估算一下测角误差σ弧度造成的位置误差大约正比于σ乘以接收机到发射机的距离平方再除以基线长度也就是说发射机离接收机越远、发射机之间基线越短误差越大。一个实用的做法是在圆周上对称布置5到7架发射机相邻基准机之间大致等距既保证任意位置的接收机都至少能看到3架不共线基准又让交会角整体维持在较大水平。我仿真下来6架均匀布点每60°一架在精度和成本之间比较均衡如果有冗余备份需求可以加到8架但电磁暴露也会更高。注意第三问往往还隐含一个优化目标在满足定位精度和故障冗余的前提下让发射机数量尽量少这可以写成一个枚举或整数规划加仿真验证的小模型。提示3架是理论下限6架是工程甜点8架以上边际收益明显下降。论文里把这三个数字的推导逻辑写出来比堆一页表格更能说服评委。4.3 分级校准协议与误差控制发射机布好之后还要解决“谁来校准谁”的顺序问题。最直觉的方案是分层先由已知基准机校准离自己最近的一圈再由这些被校准的无人机充当临时基准去校准更远的逐层外推。这个方案逻辑清晰但有一个致命缺点——误差会逐层累积。每一层引入的测角误差都会被放大并传给下一层层数一多远端无人机的位置误差可能超过编队控制允许的范围。所以我的建议是能用全连通最小二乘的地方就不要分层只有当发射机数量少、通信带宽受限时才采用分层并且最多分两层。在论文里可以对比两种方案在相同测角噪声下的远端定位误差用一张表说明为什么“整体解算优于逐级外推”。此外协议里还要设计同步机制所有接收机在同一轮采样窗口内完成测量避免因为无人机运动造成测量时刻不一致调整阶段则采用“先收敛、后校验、超差重试”的循环保证整个编队的队形误差在可控范围内。5. 仿真验证把三个小问串起来跑一遍5.1 仿真流程与参数设置理论说得再多不如把代码跑出来。我习惯用Python做这类仿真流程分四步第一步生成名义编队坐标第二步给每架接收机加测角噪声模拟真实测量第三步用最小二乘从方位角反解位置第四步统计误差、画收敛曲线。参数按题目设定编队半径R100m圆周机间隔40°测角噪声取高斯分布标准差分别设0.1°、0.5°、1.0°三档蒙特卡洛跑500次取RMSE。第一问重点对比“两架发射机加已知航向”和“三架发射机”在相同噪声下的定位误差第二问在每轮迭代后重新生成含噪测量统计迭代次数与残余偏差第三问把编队扩到100架比较3架、6架发射机方案。5.2 核心代码测向定位的最小二乘实现以下是我仿真中一个很关键的函数给定发射机坐标和含噪方位角用最小二乘反解接收机位置。import numpy as np from scipy.optimize import least_squares def locate_by_bearing(T, alpha, x0(0.0, 0.0)): # T: (n,2) 发射机坐标, alpha: (n,) 实测方位角(rad) def residual(p): x, y p r np.empty(len(T)) for i, (tx, ty) in enumerate(T): r[i] np.arctan2(ty - y, tx - x) - alpha[i] # 处理角度环绕 r[i] (r[i] np.pi) % (2 * np.pi) - np.pi return r res least_squares(residual, x0) return res.x注意角度环绕的处理atan2类函数在±π附近会跳变不处理的话最小二乘的残差会出现假的大尖峰导致解完全跑偏。这是我仿真时踩过的一个坑也建议你在自己的代码里显式加上这一行。5.3 结果要点与误差敏感性下表是一次典型蒙特卡洛仿真的结果数值会随随机种子浮动但趋势非常稳定。测角噪声σ两架发射机已知航向三架发射机0.1°0.23m0.15m0.5°1.15m0.58m1.0°2.86m1.02m从表里能读出两个结论第一三架发射机方案在所有噪声水平下都优于两架方案而且噪声越大优势越明显第二两架方案下误差分布很不均匀越靠近两架发射机连线的无人机误差越大三架方案则整体均匀很多。第二问的收敛曲线上μ0.6时大约4到6轮迭代就能把初始1m量级的偏差压到0.1m以内。第三问中6架发射机方案的最远端定位误差比3架方案小将近一个量级而8架方案提升有限说明6架附近已经接近收益拐点。6. 复盘这道题怎么答才不吃亏6.1 得分关键层次、假设与灵敏度B题不是单纯的计算题评卷最看重的是“你有没有把问题想透”。我的体会是三个得分点第一一上来就要做可观测性分析把两架不够、三架够用的理由用数学写清楚而不是只给一个结论第二对模型假设要敏感航向是否已知、测角噪声多大、是否允许新增发射机这些都会改变答案必须在论文里明确说明第三一定要有灵敏度分析改变测角噪声、改变基线长度看定位误差怎么变这是区分优秀论文和普通论文的硬指标。6.2 常见扣分点我帮人评审过不少模拟论文发现高频错误就那几个把“方位角”当成“距离”用套三边定位公式这是最严重的概念错误三架发射机选了共线的组合导致求解奇异第二问只写“能判断”没有给出可执行的调整闭环第三问堆了十几个发射机却不做误差分析还有人不做角度环绕处理仿真结果明显异常却查不出来。这些问题只要提前检查一遍都是可以避免的。6.3 时间与分工建议按三天节奏我建议第一天完成问题理解和第一问建模第二天搞定第二问闭环控制和第三问方案设计第三天集中写论文、画图和灵敏度分析。程序实现不要追求大而全能用简单脚本验证结论就行把省下来的时间花在把“为什么这样做”讲清楚上。分工方面建模、编程、写作三个人各管一摊但建模和编程的同学一定要一起对齐公式符号否则论文里的公式和程序里的变量对不上后期返工非常痛苦。最后说点题外话。这道题最好的地方在于没有一个问是孤立的几何题三个小问层层递进从“能不能定位”到“偏了怎么调”再到“大规模怎么办”完整覆盖了无源定位系统从原理到工程的全链路。我自己复盘时最大的收获是把书本上的测向交叉定位真正变成了能跑、能调、能扩展的算法原型。如果你今年也在备战国赛建议不要只背答案而是亲手把仿真代码跑一遍把误差曲线画出来那比看十篇解析都有用。
返回列表