当前位置: 首页 > news >正文

无人机云台跟踪目标实现

文章目录

  • 前言
  • 效果展示
  • 整体架构流程
  • 技术细节
    • 偏移量计算
    • 死区设置与比例控制
    • 部分代码展示
  • 小结


前言

项目上需要实现云台跟随目标的移动而移动,即始终保持目标在画面中心。现简单记录下实现过程。


效果展示

在这里插入图片描述

整体架构流程

在这里插入图片描述
基于目标检测框的云台跟踪控制,通过计算目标中心与画面中心的偏移量,生成云台转动指令。

技术细节

偏移量计算

获取当前图像尺寸。
计算目标中心点坐标:

  • target_x = x + width / 2
  • target_y = y + height / 2

计算与图像中心的偏移量:

  • dx = target_x - image_w / 2 (水平方向)
  • dy = image_h / 2 - target_y (垂直方向,注意Y轴向上为正

注意点:图像坐标系以左上角为原点,水平向右为x正,垂直向下为y正。而云台控制中垂直方向(dy)计算时取反,使其符合“向上为正”的常规。

死区设置与比例控制

水平方向:

  • 若|dx| < 100像素,则yaw = 0(不转动);
  • 否则,yaw = dx * 0.2(比例系数)。

垂直方向:

  • 若|dy| < 100像素,则pitch = 0(不转动);
  • 否则,pitch = dy * 0.2(比例系数)。

具体参数设置,需要实际测试调节;

部分代码展示

    def target_tracking(self, que):import jsonTOPIC = "/fly/test00/test01/ctrl"print("",TOPIC)key = "demo123456"try:while True:target_bbox = que.get()# 安全终止机制if target_bbox is None:print("收到终止信号,关闭连接")breakimage_h, image_w = self.im0s.shape[:2]# 1. 计算目标中心与图像中心的偏移target_x = target_bbox[0] + target_bbox[2] / 2target_y = target_bbox[1] + target_bbox[3] / 2dx = target_x - image_w / 2dy = image_h / 2 - target_y  # 注意Y轴方向取反# 2. 设置死区(偏移小于50像素时不动作)if abs(dx) < 100:yaw = 0else:yaw = dx * 0.2  # 比例系数0.2(与原逻辑一致)if abs(dy) < 100:pitch = 0else:pitch = dy * 0.2  # 比例系数0.2(与原逻辑一致)# 3. 四舍五入取整(符合接口int类型要求)pitch = int(round(pitch))yaw = int(round(yaw))print(f"Sent command: pitch={pitch}, yaw={yaw}")if pitch == 0 and yaw == 0:continueelif pitch == 0:message = {"gimbal":{"yaw": yaw}}elif yaw == 0:message = {"gimbal":{"pitch": pitch}}else:message = {"gimbal":{"pitch": pitch,"yaw": yaw}}# 发布消息plaintext_json = json.dumps(message, ensure_ascii=False, separators=(',', ':'))cipher = aes_encrypt_ecb(plaintext_json, key)print("Encrypted:", cipher)publish_result = self.mqtt_client_payload.on_publish(TOPIC, cipher)except Exception as e:print(f"处理异常: {str(e)}")

小结

简单实现基于目标检测的云台自动跟踪系统,实时计算目标与画面中心的偏移量,通过比例控制生成云台转动指令。设置±100像素死区避免抖动,单轴指令优化减少数据传输,采用AES加密保障通信安全。适用于无人机追踪、安防监控等需要实时目标跟随的系统。

参考文档:
https://developer.dji.com/cn/onboard-sdk/documentation/sample-doc/advanced-sensing-target-tracking.html

如果阅读本文对你有用,欢迎一键三连呀!!!
2025年7月24日15:15:03
在这里插入图片描述

http://www.dtcms.com/a/296820.html

相关文章:

  • springboot项目建立sse接口
  • tokenID和位置嵌入有关系吗,qwen 模型使用时候仅仅有tokenid 映射为向量,位置编码在哪里
  • C++的虚基类?
  • 黑马头条项目详解
  • cmake应用:集成gtest进行单元测试
  • MUX同步器
  • 人工智能概念:常用的模型压缩技术(剪枝、量化、知识蒸馏)
  • 一篇文章了解HashMap和ConcurrentHashMap的扩容机制
  • ESP32入门实战:PC远程控制LED灯完整指南
  • pandas库的数据导入导出,缺失值,重复值处理和数据筛选,matplotlib库 简单图绘制
  • AD一张原理图分成多张原理图
  • iview Select的Option边框显示不全(DatePicker也会出现此类问题)
  • rust-参考与借用
  • 爬虫逆向--Day12--DrissionPage案例分析【小某书评价数据某东评价数据】
  • MySQL零基础教程增删改查实战
  • java后端
  • mujoco playground
  • DBA常用数据库查询语句
  • DevOps 完整实现指南:从理论到实践
  • 论文阅读:《Many-Objective Evolutionary Algorithms: A Survey. 》多目标优化问题的优化目标评估的相关内容介绍
  • Android LiveData 全面解析:原理、使用与最佳实践
  • Rust生态中的LLM实践全解析
  • 【C# 找最大值、最小值和平均值及大于个数和值】2022-9-23
  • 项目质量如何提升?
  • 教育培训系统源码如何赋能企业培训学习?功能设计与私有化部署实战
  • 使用 Vue 实现移动端视频录制与自动截图功能
  • MySQL---索引、事务
  • Docker 打包Vue3项目镜像
  • 互联网广告中的Header Bidding与瀑布流的解析与比较
  • 性能测试-groovy语言1