電子產(chǎn)業(yè)一站式賦能平臺(tái)

PCB聯(lián)盟網(wǎng)

搜索
查看: 71|回復(fù): 0
收起左側(cè)

基于Mobile SDK V5版固件開(kāi)發(fā)大疆無(wú)人機(jī)手機(jī)端遙控器(5)

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
匿名  發(fā)表于 2023-7-7 12:01:00 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

點(diǎn)擊上方藍(lán)色字體,關(guān)注我們

v5.x版本的功能與v4.x基本相同,都是獲取飛機(jī)的姿態(tài)信息、獲取無(wú)人機(jī)多媒體文件、操作多媒體文件、航線規(guī)劃等。不過(guò)在上一章節(jié)中也大致說(shuō)了一些兩個(gè)版本的中API的差別,下面是根據(jù)一些API使用所完成的一些功能,因?yàn)轫?xiàng)目原因只能提供部分代碼供參考,后續(xù)如果有這方面需求的小伙伴可以對(duì)其進(jìn)行開(kāi)發(fā)指導(dǎo)。
1
獲取姿態(tài)信息
1、KeyManager調(diào)用

KeyManager類提供了一組方法來(lái)訪問(wèn)硬件模塊的參數(shù)和控制硬件模塊的行為,包括DJIKey的Value設(shè)置,Value獲取,Value監(jiān)聽(tīng)和Action執(zhí)行。通過(guò)KeyTools類提供的createKey方法可以更加方便的創(chuàng)建DJIKey實(shí)例。
下圖展示了使用KeyManager的接口判斷飛控正常連接并且GPS信號(hào)等級(jí)大于等于2級(jí),然后給飛行器設(shè)置返航點(diǎn),最后執(zhí)行返航操作的調(diào)用流程。

此處是示例的操作方式,后面有在項(xiàng)目中使用的過(guò)程。

2、示例

//獲取飛機(jī)信息、云臺(tái)信息
    private void get3DLocation() {
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
            @Override
            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
                if (newValue!=null){
                    lat = newValue.latitude;
                    lon = newValue.longitude;
                    high = newValue.altitude;
                }
            }
        });
    }
    private void getAttitude() {
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {
            @Override
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
                if (newValue!=null){
                    pitch = newValue.pitch;
                    roll = newValue.roll;
                    yaw = newValue.yaw;
                }
            }
        });
    }
    private void getVelocity() {
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
            @Override
            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
                if (newValue!=null){
                    velocity_X = newValue.x;
                    velocity_Y = newValue.y;
                    velocity_Z = newValue.z;
                }
            }
        });
    }
    private void getIsFly(){
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
            @Override
            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
                if (newValue!=null){
                    isFlying = newValue;
                }
            }
        });
    }
    private void getGimbalAttitude() {
        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
            @Override
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
                if (newValue!=null){
                    g_pitch = newValue.pitch;
                    g_roll = newValue.roll;
                    g_yaw = newValue.yaw;
                }
            }
        });
    }
    private void getPower() {
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
            @Override
            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
                power = newValue;
            }
        });
    }
    private void getTemperature() {
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {
            @Override
            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
                temperature = newValue;
            }
        });
    }
  • get3DLocation()方法為獲取飛機(jī)經(jīng)緯度信息。
  • getAttitude()方法獲取飛機(jī)的姿態(tài)信息(分別是航偏角、旋轉(zhuǎn)角、俯仰角)。
  • getVelocity()方法獲取飛機(jī)的飛行速度(分別是X、Y、Z三個(gè)方向的速度值)。
  • getIsFly()方法獲取當(dāng)前飛機(jī)的狀態(tài)值(是否正在飛行)。
  • getGimbalAttitude()方法獲取鏡頭的姿態(tài)信息(分別是航偏角、旋轉(zhuǎn)角、俯仰角)。
  • getPower()獲取飛機(jī)的電池電量
  • getTemperature()獲取飛機(jī)的電池溫度onValueChange()方法為1秒執(zhí)行10次,這個(gè)可以根據(jù)后續(xù)要求進(jìn)行獲;


    2
    多媒體使用
    1、Sample介紹

    拍照、錄像是無(wú)人機(jī)的重要功能,對(duì)拍攝的照片、視頻等多媒體文件進(jìn)行管理也就必不可少。多媒體文件的管理包括訪問(wèn)飛機(jī)存儲(chǔ)空間內(nèi)的多媒體文件資源、獲取多媒體文件列表與列表狀態(tài)、視頻文件播放等。
    下圖為完整的接口展示以及接口調(diào)用流程示例。
  • 多媒體文件管理調(diào)用流程
  • 視頻文件播放調(diào)用流程
  • 回復(fù)

    使用道具

    發(fā)表回復(fù)

    本版積分規(guī)則


    聯(lián)系客服 關(guān)注微信 下載APP 返回頂部 返回列表