• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 大疆無人機實現目標定位

    標簽: 定位  java

    大疆無人機實現目標定位

    大疆無人機回傳的實時視頻可以幫助飛友觀察發現美景,就稱為目標吧,你偏偏對目標很感興趣,迫切想知道目標的位置,最好是經緯度坐標。你查找大疆Document,欣喜地發現大疆提供了定位機體本身的定位方法(通過FlightController.setStateCallback重寫Update函數即可),不過并沒有定位目標的現成函數。
    實際上,屏幕上的像素與實地坐標存在一一對應的關系,找到這個關系就能實現實地目標的定位。
    建模條件:①地面為水平平面;②相機視角θ(大疆Z3為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米高度,有可能把機動車道標記到慢車道,這個誤差可以接受。

    版權聲明:本文為yangyunjun原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/yangyunjun/article/details/111414211

    智能推薦

    ROS實現無人機目標跟蹤/物體跟隨/循跡

    無人機自主物體跟隨/循跡 1. 物體跟蹤 1.1 實現思路 1.2 代碼示例 2. 自主尋線 本實驗采用ROS和OpenCV實現功能,實驗平臺采用Parrot的Bebop2無人機,實驗平臺的操作方式見:ROS控制Parrot Bebop2無人機 1. 物體跟蹤 1.1 實現思路 調用無人機的圖像: cv_image = self.bridge.imgmsg_to_cv2(data, “...

    ROS+Bebop2無人機+YOLO算法實現無人機視角的實時目標檢測

    前言: 很久之前,用TK1玩過一段時間的ROS,再加上各種硬件(Arduino、激光雷達、編碼電機等),模仿著做過Turtlebot小車,實現了部分Turtlebot部分的功能,最后因為雷達被我玩燒了,所以,就玩完了。 最近,身邊有幾臺Bebop2無人機,然后又在玩深度學習的目標檢測,因此,就嘗試了一下將目標檢測算法和無人機結合在一起玩一玩。 話不多說,先看玩成功的視頻鏈接: B站:https:/...

    Android逆向筆記(一):逆向工具使用,簡單的代碼插入、修改包名/文案 示例

    最近對逆向技術比較感興趣,研究了一下,收獲不少,這里記錄一下。 注:本文僅供學習參考,不可做任何不合法或不道德的用途 首先介紹一下常用的逆向工具,要逆向一個APP,通常目的是 文案翻譯、去廣告、api**等,而要實現這些目的,一般需要以下操作: 反編譯apk 閱讀代碼 修改源碼、資源、Manifest等 重新打包簽名 網上介紹比較多的是用 apktools進行反編譯,用dex2jar來還原java...

    Spring——事務

    什么是事務? (1)事務是數據庫操作最基本單元,邏輯上一組操作,要么都成功,如果有一個失敗所有操 作都失敗 (2)典型場景:銀行轉賬 lucy 轉賬 100 元 給 mary lucy 少 100,mary 多 100 事務四個特性(ACID) (1)原子性 (2)一致性 (3)隔離性 (4)持久性 事務操作(搭建事務操作環境) 1、創建數據庫表,添加記錄 2、創建 service,搭建 dao,...

    BPF數據傳遞的橋梁——BPF Map(一)

    Docker 技術鼻祖系列 對 ebpf 技術感興趣的同學可以訂閱作者的博客主題: https://davidlovezoe.club/wordpress/archives/tag/ebpf 這是一個實戰系列文章,它是eBPF 學習計劃[1]里面的應用場景之網絡部分,終極目標是源碼級別學習云原生網絡方案 Cilium(聲明:下文提到的 BPF 字樣是泛指,包括 cBPF 和 eBPF)。本篇文章從...

    猜你喜歡

    SpringBoot實戰(三)——junit4單元測試

    利用SpringBoot搭建的項目含有非常多的默認配置,所以搭建起來非常方便,單元測試也不例外,簡單幾步就可以實現,直接看代碼: 1、pom.xml引入test測試: 2、在src/test/java里創建class進行測試: Application是項目啟動類的名稱,且可以利用Autowired注入service等等使用。。。。 最后方法名上右鍵即可進行測試: 另外項目打包時建議去除TEST測試...

    藍橋2——Beaver's Calculator

    問題描述   從萬能詞典來的聰明的海貍已經使我們驚訝了一次。他開發了一種新的計算器,他將此命名為”Beaver’s Calculator 1.0”。它非常特別,并且被計劃使用在各種各樣的科學問題中。   為了測試它,聰明的海貍邀請了n位科學家,編號從1到n。第i位科學家給這個計算器帶來了 ki個計算題。第i個科學家帶來的問題編號1到n,并且它們必須按照編號一個一...

    第九屆藍橋杯省賽(Java B)

    1.第幾天 2000年的1月1日,是那一年的第1天。 那么,2000年的5月4日,是那一年的第幾天? 注意:需要提交的是一個整數,不要填寫任何多余內容。 思路:直接excel,兩個日期相差124天,由于2000/1/1算第一天,所以ans=125。 2.方格計數 如圖所示,在二維平面上有無數個1x1的小方格。 我們以某個小方格的一個頂點為圓心畫一個半徑為1000的圓。 你能計算出這個圓里有多少個完...

    安裝完eric6,找不到啟動的文件的解決辦法

    辛辛苦苦安裝完Eric6,唉?我的啟動文件呢?沒有圖標,沒有提示,什么都沒有,親愛的Eric6,你去哪了? 標準解決Eric6安裝問題,參考:https://blog.csdn.net/qq_39091354/article/details/79947264 解決方法,去找python的目錄,你的菜單里肯定有python的IDE快捷方式。找到Eric6的目錄,把代碼中的目錄改為你的目錄,保存文本文...

    靜態代碼塊、構造代碼塊、局部代碼塊(java)

    代碼塊:就是用{}括起來的有一定特殊作用的代碼 首先看如下的一段代碼: class Baby { int age; String name; Baby() {} Baby(String name) { this.name = name; } } class StaticDemo { public static void main(String[] args) { Baby p1 = new Bab...

    精品国产乱码久久久久久蜜桃不卡