做电力巡检这几年,外场炸过的机壳、射桨的碳纤叶片堆在仓库少说也有小半箱。实验室里跑 Gazebo 或者在地面站拖几个 Waypoint 看着都很丝滑,但只要飞机飞进 220kV 或者 500kV 变电站的感应场,各种妖魔鬼怪的软硬件 Bug 就会全冒出来。
今天抽空把我们团队这套基于 PX4 / MAVLink 架构的输电线路自动巡检与正射采集方案梳理一遍。不讲 PPT 上的宏大叙事,只聊从航线生成、RTK 抗干扰到最后出图拼图里踩过的坑和实测数据。
一、航线规划:别迷信二维地图,三维点云才是底线
早期我们用开源 QGroundControl 直接在二维卫星图上打点,结果在一次 110kV 线路巡检时,飞机在两座铁塔之间直接挂在避雷线上。原因很简单:卫星图的地形高程数据(SRTM)误差动辄十几米,且完全没有弧垂(Sag)和铁塔横担的高度信息。
1. 仿地与绕障数据流
工程落地的正规做法,是先用激光雷达扫出走廊的粗模点云(或者用公开的精细 DEM),在本地做三维空间膨胀后生成巡检航迹。
- 安全缓冲半径:高压导线外围必须设置至少 5 到 8 米的膨胀缓冲区(Keep-out Zone)。
- 相机触发模式:绝不能用基于时间的触发(
DO_SET_CAM_TRIGG_INTERVAL),山区风大,逆风地速 3 m/s,顺风地速可能飙到 11 m/s,按时间拍照会导致重叠率极其不均匀。必须采用基于距离的触发(DO_SET_CAM_TRIGG_DIST)。
下面是我们在板载计算机(树莓派 4B 或 Jetson Orin Nano)上,通过 MAVROS 向 PX4 下发基于距离触发任务的核心配置片段:
from mavros_msgs.srv import CommandLong
import rospy
def set_camera_trigger_distance(distance_m):
rospy.wait_for_service('/mavros/cmd/command')
try:
cmd_srv = rospy.ServiceProxy('/mavros/cmd/command', CommandLong)
# MAV_CMD_DO_SET_CAM_TRIGG_DIST = 206
resp = cmd_srv(
broadcast=False,
command=206,
confirmation=0,
param1=distance_m, # 拍照距离间隔 (米)
param2=0.0, # 快门开启时间
param3=1.0, # 立即触发一次
param4=0.0, param5=0.0, param6=0.0, param7=0.0
)
if resp.success:
rospy.loginfo(f"Camera trigger distance set to {distance_m} m")
else:
rospy.logwarn("Failed to set camera trigger distance")
except rospy.ServiceException as e:
rospy.logerr(f"Service call failed: {e}")
二、RTK 与电磁对抗:磁罗盘失步是头号杀手
在强电磁环境下,单点 GPS 定位飘出 3 到 5 米是常态,必须上厘米级 RTK。但很多人以为装了 RTK 就能高枕无忧,其实大错特错。
1. 炸机复盘:一次典型的磁罗盘干扰漂移
去年在某 500kV 换流站附近,飞机悬停准备拍绝缘子串,距离导线约 12 米。飞控突然报 EKF yaw inconsistency,整机进入非受控高速盘旋,随后发生漂移。操作手切 Manual 模式救机,但因为姿态失真,依然蹭到了地线拉线,直接炸机。
黑匣子日志(ULog)分析:
- 振动加速度在正常范围(RMS < 1.2 m/s²)。
- GPS 状态良好(Fix Type 6,卫星数 28,PDOP 1.1)。
- 核心问题:机载三轴磁力计在靠近高压线瞬间,磁感应强度从 0.45 Gauss 骤增到 1.6 Gauss,EKF2 算法融合的 Heading 出现近 45 度的瞬间阶跃,导致速度积分完全算错。
2. 解决方案:双天线测向(Dual-antenna GNSS Heading)
对于电力巡检机,彻底废掉磁罗盘才是最稳妥的策略。 我们改用了双天线 RTK 模块(如基于 u-blox F9P 的方案),天线基线长度做在 45 cm 以上。
在 PX4 参数中调整:
EKF2_MAG_TYPE设为None(无磁力计模式) 或只在起飞前校验。EKF2_GPS_CTRL开启 GPS 测向位(Bit 3: Dual antenna heading)。
即便高压线电流波动产生极强交变磁场,基于载波相位差分的双天线测向物理上完全免疫电磁干扰,Yaw 角误差能稳定收敛在 0.2 度以内。
三、影像采集:POS 时间对齐的硬功夫
要出高精度的正射影像(DOM),不是相机卡里有照片、飞控里有 Log 就能直接扔进 ContextCapture 或 Pix4D 的。
1. 触发延迟与热靴同步
如果你用相机遥控信号触发快门,从飞控发指令到 CMOS 真正曝光,存在 80 到 200 ms 的随机硬件延迟。如果巡检飞行速度为 8 m/s,150 ms 的延迟就意味着 1.2 米的位置偏差,直接废掉 RTK 的厘米级精度。
工程规范:
- 必须用热靴反馈(Flash Hot-shoe):相机曝光瞬间,热靴触点闭合,向飞控的 GPIO 引脚发送一个高电平脉冲(FEEDBACK 信号)。
- 飞控时间戳打标:PX4 捕获到中断信号后,记录当前的微秒级绝对时间,并在 ULog 的
camera_capture话题中写入对应的 RTK 经纬高和姿态角。
2. 快门与重叠率设置
- 航向重叠率(Forward Overlap):输电线路正射建议不低于 75%,局部塔头精细重建需 80% 以上。
- 旁向重叠率(Side Overlap):建议 60% 至 70%。
- 快门速度:严禁低于 1/1000s。即使三轴云台增稳再好,运动模糊在 1:500 测绘尺度下也是无法接受的。光圈固定在 f/4 到 f/5.6 之间,ISO 设置为自动但上限锁死在 800。
四、正射输出与成果交付问题
采集完成后,内业处理常遇到两个拦路虎:
- 细导线在点云中被空三算法当成噪点平滑掉:
- 解决方案:密集匹配时,关闭几何滤波中的极端噪点去除策略;航向重叠率必须拉高,且需配合带俯仰角(如 -60° 倾斜航拍)的照片补充侧面纹理。
- 高差剧烈导致的投影拉伸:
- 山区输电线路常有数百米的落差,如果直接用恒定高度飞出来的照片跑正射,低处分辨率不足,高处重叠率不够导致空三解算失败。此时必须导入地形 DEM 执行变高变距飞行(Terrain Following),保证地面分辨率(GSD)始终恒定在 1.5 cm/pixel 左右。
五、实战总结参数清单
把目前我们外场最稳的一套四旋翼巡检机参数贴在下面,供同行的朋友调试时参考:
| 参数项 | 实测推荐值 | 备注 |
|---|---|---|
| 定位源配置 | RTK Fix + 双天线 GNSS Heading | 关闭主磁罗盘参与 EKF 融合 |
| 航线平飞速度 | 4.5 ~ 6.0 m/s | 保证曝光清晰度与图传链路冗余 |
| 安全航距(边导线) | ≥ 6.5 m | 避开风偏摇摆范围及感应放电区 |
| 相机曝光模式 | 速度优先,快门 ≥ 1/1200s | 避免果冻效应与运动模糊 |
| POS 记录方式 | 热靴同步中断触发 | 丢弃基于指令下发时间的估算 POS |
搞自主飞巡,最忌讳的是把飞控当成黑盒子。多看看日志里的振动谱、差分龄期(Diff Age)和 EKF 创新变量(Innovation),在外场才能少走弯路,少炸两台机。
License: CC BY-NC 4.0
Updated 13 hours ago
Was this article helpful? Give it a like.
0 comments


