大疆无人机实现目标定位

2023-05-16

大疆无人机实现目标定位

大疆无人机回传的实时视频可以帮助飞友观察发现美景,就称为目标吧,你偏偏对目标很感兴趣,迫切想知道目标的位置,最好是经纬度坐标。你查找大疆Document,欣喜地发现大疆提供了定位机体本身的定位方法(通过FlightController.setStateCallback重写Update函数即可),不过并没有定位目标的现成函数。
实际上,屏幕上的像素与实地坐标存在一一对应的关系,找到这个关系就能实现实地目标的定位。
建模条件:①地面为水平平面;②相机视角θ(大疆X3为94度);③飞机相对高度droneHeight,经纬度(droneLat,droneLng),机头朝向droneHeading;④屏幕分辨率deviceWidth、deviceHeight;⑤屏幕以左上角为原点(0,0),向右向下为正;⑥相机垂直地面;⑦不考虑目标的高度和图像形变。
在这里插入图片描述

则任意屏幕的像素点(x,y),对应的实地经纬度坐标为唯一的,假设为(xLng,yLat),从而可以用大疆SDK提供的函数在地图中标定。
基于上述模型,得到从像素点到实地位置的计算过程:
1、根据飞机高度和相机视角,计算屏幕中的图像对应实地的长度(Height1)和宽度(Width1):
Width1=droneHeighttan(Θ/2)
Height1=deviceHeight
Width1/deviceWidth;
2、计算目标像素在屏幕中相对于屏幕中心点的归一化位置(tmpX ,tmpY),其中tmpX = droneHeightx2/Width1, tmpY = -y/x*tmpX;

3、根据飞机当前位置和机头方向,解算实地的顶点坐标:
xLng=droneLng+(tmpXcos(droneHeading)- tmpYsin(droneHeading))M_TO_LAT;
yLat=droneLat+(tmpY
cos(droneHeading)+ tmpX*.sin(droneHeading))*M_TO_LAT;
以上可以计算屏幕像素与实地经纬度的一一对应关系。
实现函数也很简单:

private DJILatLng calcTargetLatLng(LocationCoordinate3D drone3D, PointF pointF,int droneHeading){
final double M_TO_LAT = 360.0/40000000;
        DJILatLng targetLatLng = new DJILatLng(0.0,0.0);
        double tmpX,tmpY;
        double Theta = -droneHeading*Math.PI/180;
        double Height =  drone3D.getAltitude();
        tmpX = Height*pointF.x*2/deviceWidth;
        tmpY = -pointF.y/pointF.x*tmpX;
        targetLatLng.longitude = drone3D.getLongitude() + (tmpX*Math.cos(Theta) - tmpY*Math.sin(Theta))*M_TO_LAT;
        targetLatLng.latitude  = drone3D.getLatitude() + (tmpY*Math.cos(Theta) + tmpX*Math.sin(Theta))*M_TO_LAT;

        return targetLatLng;
    }

参数说明:drone3D是飞机的高度、经度、纬度信息,droneHeading是机头朝向,以上两个参数均可以通过在OnCreate函数中,用FlightController.setStateCallback重写Update函数得到;pointF是目标像素点的位置,通过点击屏幕获取。
如果需要,可以通过DJIMap.addMarker将目标标定到地图中。测试效果,飞机在100米高度,有可能把机动车道标记到慢车道,这个误差可以接受。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大疆无人机实现目标定位 的相关文章

  • 在ROS环境下用yolov3-tiny训练自己的数据集

    由于整个过程新建 修改 设置的文件和参数较多 所以我先放张整个流程分析图在这 xff0c 方便大家结合下列步骤去更好理解 0 提前准备 xff1a 下载darknet xff08 yolov3 xff09 并编译 span class to
  • ROS下使用usb_cam驱动读取摄像头数据

    因为darknet ros会直接订阅指定的图像话题名 xff0c 然后对图像进行检测 xff0c 绘制检测框 xff0c 并发布相应的检测话题 xff0c 因此首先需要找一个能够发布图像话题的ROS包 xff0c 这里经推荐使用ROS官方提
  • python 各种加密

    背景 加密学习 对称加密 对称密钥加密 xff0c 又叫私钥加密 即信息发送的方和接受方用一个密钥去加密和揭秘数据 最大的优势是 加解密速度快 xff0c 适合对大量数据进行加密 xff0c 对称加密的缺点是密钥的管理和分配 xff0c 换
  • 参加中国移动开发者大会有感

    作为我校CSDN俱乐部的主席 xff0c 我很荣幸受到CSDN的邀请参加中国移动开发者大会 xff0c 下面写点自己的感悟 xff1a 移动互联网应用大时代已经到来 xff0c 所有的IT应用都将移动化 xff0c 所有的信息服务都将移动化
  • IntelD435摄像头将深度图与摄像头进行像素对齐(并抽帧保存)

    coding 61 utf 8 import pyrealsense2 as rs import numpy as np import cv2 import os 创建一个管道 pipeline 61 rs pipeline Create
  • python3 可视化COCO格式json文件目标检测矩形框

    import os import json import argparse from PIL import Image ImageDraw ImageFont FONT SIZE 61 13 2 IMAGE FONT 61 ImageFon
  • 对比图像清晰度(模糊度)之灰度方差算法 python代码实现

    灰度方差算法 图像最清晰 xff0c 图像中的高频分量也最多 xff0c 该算法以图像所有像素的灰度平均值为参考 xff0c 对每个像素点的灰度值求差后求平方和 xff0c 然后用像素总数标准化 xff0c 它表征了图像灰度变化的平均程度
  • pytorch使用 ROIalign 代码实例

    batch size 61 x shape 0 all roi align feats 61 for i in range batch size hmap1 s 61 out hmap 1 i hmap1 s 61 hmap1 s unsq
  • python resize dicom(dcm)代码

    from glob import glob import os import pydicom import numpy as np import cv2 dcm list 61 sorted os listdir 39 xxxx 39 fo
  • 基于opencv和ffmpeg的图片转换成视频的两种方法实现,可生成H264格式

    opencv转换图片为视频 xff08 生成视频格式为MJPG xff09 encoding UTF 8 import glob as gb import cv2 图片文件夹地址 img path 61 gb glob 34 G temp
  • VGG16提取图片特征

    import os import numpy as np import torch import torch nn import torchvision models as models from torch autograd import
  • 防火墙之数据包过滤iptables

    内容简介 防火墙的概述 1 iptables简介 2 iptables基础 3 iptables语法 4 iptables实例 案例详解 xff08 一 xff09 防火墙的简介 防火墙是指设置在不同网络或网络安全域之间的一系列部件的组合
  • Ubuntu apt-get 和 pip 更换源

    Ubuntu系统自带的源都是国外的网址 xff0c 国内用户在使用的时候网速比较慢 一个软件的下载是十分痛苦的 xff0c 这里讲解一下如何将国外源更换为国内源 xff0c 让你的网速Biu Biu Biu 更换apt get数据源 1 备
  • Linux如何解决动态库的版本控制

    xff08 换句话说 xff0c soname不是真实存在的文件 xff0c 只是在此库中和将来调用此库的文件中保存的一个名字 xff0c 在加载时去找这个名字 xff0c 使用时创建一个软连接来指向真实文件 xff0c 这样真实文件的版本
  • C语言中可变参数函数实现原理

    C函数调用的栈结构 可变参数函数的实现与函数调用的栈结构密切相关 xff0c 正常情况下C的函数参数入栈规则为 stdcall 它是从右到左的 xff0c 即函数中的最右边的参数最先入栈 例如 xff0c 对于函数 xff1a void f
  • Linux串口测试应用程序

    1 Linux终端 串口 210开发板有4个串口 2440开发板有3个串口 在2440开发板中三个串口设备对应如下 串口名字 主设备号 次设备号 s3c2410 serial0 204 64 s3c2410 serial1 204 65 s
  • 开发板上syslog使用方法小结

    首先我们需要先确认我们的开发板上是否安装了syslog服务 xff0c 在开发板的文件系统下输入syslogd help命令查看如果不支持就是busybox的版本太低了 当确定安装了后我们根据help显示的默认配置文件来查看该配置文件是否存
  • Perl中文件读取操作

    一 打开 关闭文件 语法为open filevar filename xff0c 其中filevar为文件句柄 xff0c 或者说是程序中用来代表某文件的代号 xff0c filename为文件名 xff0c 其路径可为相对路径 xff0c
  • web服务器之mongoose:安装

    引言 Mongoose开源项目的主页是http code google com p mongoose Mongoose是一个web服务器 xff0c 通过提供一个web接口给它 xff0c 它可以嵌入到现有的应用程序中去 Mongoose
  • web服务器之mongoose:核心处理模块

    引言 前面我们介绍了Mongoose所有的几个主要的数据结构mg context mg connection mg request info xff0c 还有Mongoose的生命主线 有了这些基础就可以来看看Mongoose的核心处理工作

随机推荐