无人机光流定位系列——(二)实践

无人机光流定点讲解 无人机光流定点 光流是测速算法,并不是直接定位的。简单理解,光流就是通过检测图像中光点和暗点的移动,来判断图像中像素点相对于飞行器的移动速度。如果地面是静止的,自然就可以得到飞行器相对于地面的移动速度啦。所谓光流定位,其实是利用光流测速再积分定位而已啦。 无人机做光流定点算法需要注意一下几点: 1、飞机在不同高度光流传感器所能测到的像素点是不一样的,无人机距离地面低的时候对距离的感知比距离地面高的... 阅读详情

      在本系列blog中的http://blog.youkuaiyun.com/andymfc/article/details/53316404文章中,已经对光流定位的原理进行了详细的分析,详细介绍了著名的lucas-kanade光流算法,本期,将带大家一起在dragonboard 410c上来用Python编程实现光流算法,虽然Python语言编写出来的处理效率不高,但是便于我们理解整个光流算法应用方法,并且后续我们使用C或者其他高效率的语言来实现光流算法会变得更简单。

     在实现光流分析的过程中,我们使用cv2模块提供的算法接口来实现光流计算,在cv2中也就是opencv提供的Python接口,lucas-kanade算法被封装在cv2.calcOpticalFlowPyrLK()函数中,通过该接口可以方便的创建光流处理程序。但是在实现中我们首先要确定我们要跟踪的点,然后才能使用lucas-kanade算法来对这些点进行迭代跟踪,接下来参考cv2中提供的Python例程代码详细介绍利用cv2提供的光流计算处理函数接口如何完成基于光流的跟踪实现,其核心代码如下:

     首先为了方便调用cv2.calcOpticalFlowPyrLK算法,我们需要定义一个算法参数结构体,确定算法参数,用Python定义如下:

     lk_params = dict( winSize  = (15, 15), 
                  maxLevel = 2, 
                  criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, 10, 0.03),
                  derivLambda = 0.0 )  

     同时在调用cv2.calcOpticalFlowPyrLK算法的时候我们还需要调用cv2.goodFeatureToTrack函数来确定需要跟踪的点,所以还需要给该接口传递一个参数,具体定义如下:

     feature_params = dict( maxCorners = 500, 
                       qualityLevel = 0.3,
                       minDistance = 7,
                       blockSize = 7 )

     完成参数定义后,就可以开始编写核心代码了,这里我们在读取视频帧的时候,根据前文的分析可以知道,光流算法需要依靠前后帧的数据来进行分析,所以在读取视频第一帧的时候,我们还需要在第0帧的时候进行初始化处理,这里使用便利frame_idx和detect_interval两个参数来进行控制,对第一帧进行处理,其中前者为帧数,后者为检测间隔,在这里初始化处理主要是需要找到适合跟踪的点,具体代码如下:

     if self.frame_idx % self.detect_interval == 0:
                mask = np.zeros_like(frame_gray)
                mask[:] = 255
                for x, y in [np.int32(tr[-1]) for tr in self.tracks]:
                    cv2.circle(mask, (x, y), 5, 0, -1)
                p = cv2.goodFeaturesToTrack(frame_gray, mask = mask, **feature_params)
                if p is not None:
                    for x, y in np.float32(p).reshape(-1, 2):
                        self.tracks.append([(x, y)])

    完成第一帧处理后,就需要进一步对后续帧进行处理,这里处理其实就是一个循环迭代的过程,不断的根据前后帧来执行光流算法,调用cv2calcOpticalFlowPyrLK函数来计算光流数据,这里通过tracks参数来进行控制,核心代码如下:

     if len(self.tracks) > 0:
                img0, img1 = self.prev_gray, frame_gray
                p0 = np.float32([tr[-1] for tr in self.tracks]).reshape(-1, 1, 2)
                p1, st, err = cv2.calcOpticalFlowPyrLK(img0, img1, p0, None, **lk_params)
                p0r, st, err = cv2.calcOpticalFlowPyrLK(img1, img0, p1, None, **lk_params)
                d = abs(p0-p0r).reshape(-1, 2).max(-1)
                good = d < 1
                new_tracks = []
                for tr, (x, y), good_flag in zip(self.tracks, p1.reshape(-1, 2), good):
                    if not good_flag:
                        continue
                    tr.append((x, y))
                    if len(tr) > self.track_len:
                        del tr[0]
                    new_tracks.append(tr)
                    cv2.circle(vis, (x, y), 2, (0, 255, 0), -1)
                self.tracks = new_tracks
                cv2.polylines(vis, [np.int32(tr) for tr in self.tracks], False, (0, 255, 0))
                draw_str(vis, (20, 20), 'track count: %d' % len(self.tracks)) 

     以上就是整个光流算法进行点跟踪的处理核心过程,完整代码可以参考

     在dragonboard 410c开发板上搭好鼠标键盘和显示器,我们就可以使用该脚本在上面运行测试了,具体效果如下:

     

     下期blog,将在该代码的基础上,进一步实现如何利用光流法来对运动的目标进行跟踪。

从手机防抖到无人机定位:聊聊光流算法(LK算法)那些意想不到的跨界应用 本文探讨了光流算法(LK算法)从手机防抖到无人机定位的多样化应用。通过解析LK算法的基本原理和核心假设,揭示了其在视频防抖、无人机精准定位等领域的核心技术。文章还介绍了光流算法在医疗、工业机器人、智能家居等跨界应用中的创新实践,为开发者提供了实用的实现技巧和避坑指南。 阅读详情

相关推荐

Ardupilot光流代码分析

目录 文章目录目录摘要1.光流传感器硬件介绍2.初始化光流传感器 摘要 本节主要学习Ardupilot光流部分代码,由于无人机在室内无法进行GPS定位,常采用的室内定位方法是光流定位,欢迎批评指正! 1.光流传感器硬件介绍 PX4Flow 是一款与Pixhawk飞控配套使用光流传感器。传感器拥有原生 752×480 像素分辨率,计算光学流的过程中采用了4倍分级和剪裁算法,计算速度达到2...

陌城烟雨 3388

什么是光流Optical Flow

无人机上经常提到的光流法定位是什么?

Hold人民币的博客 6829

掌上自拍无人机AEE A10评测:光流定位与新手模式让飞行更简单

消费级无人机正在从专业工具走向大众消费品,而便携性和易用性成为用户最关注的核心。掌上无人机通过折叠结构、轻量化材质和简化操控,大幅降低了航拍门槛。其中,光流定位技术利用底部摄像头感知地面纹理,结合超声波传感器实现室内精准悬停,是新手在无GPS环境下安全飞行的关键。配合新手模式、无头模式等辅助功能,用户无需复杂学习即可完成稳定飞行与自拍。这类设备广泛应用于旅行跟拍、日常记录等轻量场景,满足了“随手飞、随手拍”的需求。本文以AEE一电掌上自拍无人机A10为例,深入拆解其硬件设计、飞行体验与实用技巧,帮助读者理解

weixin_26886855的博客 106

无人机定位方式之光流定位

无人机定位方式之光流定位

weixin_38225837的博客 2522

SRAM ECC原理与应用:从汉明码到高可靠嵌入式系统设计

在嵌入式系统与高可靠性计算领域,内存数据完整性是系统稳定运行的基石。软错误(Soft Error)由宇宙射线或芯片内部粒子引发,可能导致存储单元发生位翻转,进而引发程序跑飞或数据损坏。为应对这一物理层挑战,错误校验与纠正(ECC)技术应运而生,其核心原理基于扩展汉明码,通过增加校验位实现单错误纠正、双错误检测(SECDED)能力。这项技术通过硬件透明纠错,在提升系统可靠性的同时,几乎不影响访问性能。在汽车电子、工业控制及航空航天等对安全性要求极高的场景中,ECC已成为保障长期稳定运行的关键硬件机制。本文聚焦

weixin_28728265的博客 532

DDR核心机制解析:从Burst到Prefetch的性能跃迁

本文深入解析了DDR内存性能跃迁的核心机制,重点阐述了Burst(突发传输)与Prefetch(预取)技术的协同工作原理。Burst机制通过连续传输数据减少访问延迟,而Prefetch则通过内部预取数据提升吞吐量,两者结合完美匹配现代CPU缓存行需求,是DDR3等内存实现高效带宽的关键。

weixin_29232121的博客 135

光流定位原理

无人机上光流定位通常是借助于无人机底部的一个摄像头采集图像数据,然后采用光流算法计算两帧图像的位移,进而实现对无人机的定位,这种定位手段配合GPS可以在室外实现对无人机的精准控制,并且在市内没有GPS信号的时候,也可以实现对无人机的高精度的定位,实现更加平稳的控制。 在光流理论中,前提是下面两个假设成立: 1)摄像头采集到的两帧图像之间的像素灰度不变; 2)相邻的两帧像素具有相对运动 光流法计算像素点的移动速度的方法,在使用的时候,我们只需要对图像中的一些点去跟踪,采用上面的方法就可以计算得到光流向

weixin_56299316的博客 6899

iOS面试题大全(附带答案)

C语言相关面试题 1.static有什么用途? 答案:在C语言中,static主要定义全局静态变量,定义局部静态变量,定义静态函数。 static 属于静态变量,使用它修饰的变量生命周期是整个源程序。 @1.在函数体内的 static 变量的作用范围为该函数体,该变量的内存只被分配一次,因此其值在下次调用时仍维持上次的值; @2.在模块内的 static 全局变量可以被模块内所有函数访问,但不能被模块外其它函数访问; @3.在模块内的 static 函数只被这一模块内的其它函数调用,这个函数的使用范围被限

IOSNF的博客 2426

光流定位原理是什么??【转】

转自:https://www.zhihu.com/question/35980316 Jessie Lee HIT/控制/无人机     光流是测速算法,并不是直接定位的。简单理解,光流就是通过检测图像中光点和暗点的移动,来判断图像中像素点相对于飞行器的移动速度。如果地面是静止的,自然就可以得到飞行器相对于地面的移动速度啦。所谓光流定位,其实是...

weixin_34008805的博客 7533

MacBook上玩转国民技术N32G430:从零搭建ARM开发环境(VSCode + pyOCD)

本文详细介绍了在MacBook上搭建国民技术N32G430的ARM开发环境,涵盖VSCode配置、pyOCD调试及一键编译烧录全流程。通过Homebrew安装工具链、配置Python环境及VSCode插件,开发者可在MacOS高效开发嵌入式应用,特别适合国产芯片N32G430的开发者参考。

weixin_30614109的博客 436

代码复现3—VLN-CE

运行训练完后在 data文件下会自动生成一个“checkpoints”文件,文件下包含任务文件“seq2seq”,该文件下会包括训练出来的权重和评估结果。数据集下载完后路径提取:data/scene_datasets/mp3d/{scene}/{scene}.glb。注意这里下载的数据集并不是所有的matterport3d,只需要一部分,包含90个场景,大小压缩后约16G。在“eval”时,会在data文件下生成videos文件,里面存放的是可视化的轨迹视频。

qq_44100524的博客 3202

无人机光流定位系列——(一)原理剖析

这次参加深圳的高交会,在qualcomm展区看到了多款mini无人机,大家稍微细心一点就可以发现这些无人机都使用了一种叫光流定位的技术,很多人可能都还不明白光流定位是个什么东西,是如何进行定位的,今天就带大家一起来了解一下光流定位的原理。       在无人机上光流定位通常是借助于无人机底部的一个摄像头采集图像数据,然后采用光流算法计算两帧图像的位移,进而实现对无人机的定位,这种定位手段

ANDYMFC的博客 5万+

【Bug已解决】codex: tool call timeout / Function execution exceeds limit — CodeX CLI 工具调用超时解决方案

CodeX CLI 工具调用超时(Bash/文件/MCP)的解决方案,含增加超时、拆分命令、后台运行、避免交互卡住与限制读取。

博客 4205

Kerloud UAV室内光流定位教程

产品简介 Kerloud UAV系列作为云讷科技(深圳)面向无人机系统集成爱好者的高性价比开发平台,支持PX4、Dronecode、ROS、Nvidia和Ubuntu等高级软件社区。产品设计紧凑,室内外场景通用;机身可搭载树莓派、Nvidia Jetson电脑及Intel Realsense深度相机等,基于ROS开发环境及云讷官方提供的开源SDK,用户可便捷开展实时图像处理、深度学习、室内SLAM、室外避障等应用开发。 室内光流定位 本教程将演示Kerloud UAV基于光流实现室内定位的操作方法。更多信

云讷科技 1477

【深度学习新浪潮】2025年末AI产业动态:泡沫争议、技术突破与2026投资机会解析

2025年末的AI产业在波动中完成了阶段性调整,技术突破与政策支持构筑了长期成长基石,而结构性分化与风险隐患则要求投资者更加精准地把握机会。2026年作为“风险资产的黄金年”,AI全产业链将持续成为资本聚焦的核心,无论是算力国产化的技术突破,还是应用场景的规模化落地,都有望催生一批优质企业。投资者需立足产业阶段特征,理性看待短期波动,聚焦核心技术与政策红利,方能在AI产业的成长浪潮中把握确定性机会。

专注:太空算力、AI infra、异构调度、大模型成本工程 1810

Open3D点云算法与点云深度学习案例汇总(长期更新)

Open3D-python算法专栏文章汇总,长期更新算法原理与实战案例。

纵马踏花向自由 7470

UWB的定位真的可以打败光流定位吗?

本文探讨了UWB技术在无人机跟随小车中的两种实现方案:多基站随动系统和单基站AOA检测系统。UWB技术为无人机提供了新的位置观测手段,相比传统光流传感器可能具有精度优势,同时能提高小车对无人机的跟踪实时性。文章分析了UWB与光流传感器的性能对比,指出即使在飞控不融合UWB数据的情况下,UWB仍能通过改善光流工作环境来提升系统性能。最后提出了关于UWB模块合理价格的疑问,建议参考视觉方案的成本范围(约500元)。相关技术视频展示了UWB在实际跟随和避障中的应用效果。

TSINGHUAJOKING 418

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

ESP32无人机开发指南:从基础搭建到深度优化

### 1.1 走进ESP32无人机的奇妙旅程 你是否想过,一台仅手掌大小的无人机是如何实现稳定悬停和精准操控的?ESP32无人机作为开源硬件领域的创新之作,将高性能微控制器与飞行器技术完美结合。与传统商业无人机相比,它不仅成本降低70%以上,更重要的是开放了从传感器读取到控制算法的全部技术细节,为学习者提供了一个透明的实践平台。 这个基于ESP32/ESP32-S系列芯片的微型四旋翼飞行器解决

gitblog_00373的博客 410

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

无人机飞控传感器全解析:从IMU到光流,这些坑你踩过吗?

本文深入解析无人机飞控传感器的核心原理与实战应用,涵盖IMU、气压计、光流等关键模块的协同机制与常见问题。通过Pixhawk 6C和ICF5等主流飞控的对比分析,提供传感器选型、校准及故障处理的实用指南,帮助开发者规避飞行控制中的典型陷阱,提升无人机稳定性和可靠性。

867

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

无人机飞行稳定系统技术解析

算法会将两者结合,用加速度计的长期稳定性来校正陀螺仪的短期漂移,得出一个最优的、准确的姿态估计(横滚角、俯仰角、偏航角)和位置信息。GPS模式/定位模式(PositionHold/GPSMode):在姿态稳定的基础上,加入GPS和视觉/超声波等传感器,实现位置的锁定和自主导航。过程:飞控将计算出的纠正量转换成具体的电调(电子调速器)指令,通过PWM信号改变四个(或更多)电机的转速。2.决策:PID算法计算出需要增加后方电机的转速,同时降低前方电机的转速,以产生一个向下的扭矩,压平机头。

YUNZHUO666的博客 1237

4 步做出能飞的开源无人机:ESP32-S2 无人机组装全记录

esp-drone 是跑在 ESP32-S 系列芯片上的开源微型无人机固件项目,代码与 PCB 文件全部公开。我们先把这台无人机从零件做到离地,整个流程走一遍。 ## 为什么值得自己动手做一台开源无人机 如果你买过商业无人机,多半会发现一件事:它是黑盒。能飞、能拍,但一旦出问题,你只能干着急。esp-drone 走的是另一条路——四旋翼固件基于开源的 Crazyflie 框架移植到乐鑫 ESP

gitblog_00120的博客 247

从4DRC Neo入门:消费级无人机技术拆解与新手安全飞行全指南

无人机技术融合了飞控系统、动力系统与图像传输等核心模块,通过传感器与算法实现稳定悬停与自主飞行,为航拍、测绘与娱乐等场景提供了创新解决方案。其技术价值在于将复杂的航空工程简化为可普及的消费电子产品,极大地降低了操作门槛。以典型的消费级无人机为例,它集成了Wi-Fi图传和光流定位等关键技术,使得新手也能快速上手,体验飞行与创作的乐趣。本文将以一款热门设备为切入点,系统解析其工作原理、安全操作流程及维护技巧,帮助读者从零开始,安全高效地掌握无人机飞行与基础航拍。

weixin_33827731的博客 538

从零到一亲手造一架ESP32迷你无人机:开源固件助你快速玩转智能硬件

想拥有一架"看得见、拆得开、改得动"的无人机吗?esp-drone 是乐鑫推出的开源迷你四轴方案:用一块 ESP32 系列芯片当大脑,把整套飞控固件完整摊在你面前。它解决的问题很直接——让没有专业背景的你,不花冤枉钱,也能在一个周末内从零开始,组装、烧录、起飞一架真正属于自己的智能硬件。 [![esp-drone无人机全套硬件配件包实物](https://raw.gitcode.com/GitH

gitblog_00293的博客 256
上一篇: 无人机光流定位系列——(一)原理剖析
下一篇: 玩转Dragonboard 410c USB摄像头——人脸识别2
ANDYMFC_No1
博客等级 码龄17年 125粉丝 66原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值