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

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

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

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

[復(fù)制鏈接]

394

主題

394

帖子

2197

積分

三級(jí)會(huì)員

Rank: 3Rank: 3

積分
2197
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2023-7-7 12:01:00 | 只看該作者 |只看大圖 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式

+ ~3 U7 x4 J2 Z; `, o點(diǎn)擊上方藍(lán)色字體,關(guān)注我們
$ o( U/ O5 [7 T/ O. a  r  S0 U1 r( \
. r* Z1 y  I8 c/ O3 ?6 }0 L7 Xv5.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 s" r% r! Z" Z) e8 U  w1
5 S) b" J# N0 s) ?3 n獲取姿態(tài)信息
( g& L# E' A/ q1 B1、KeyManager調(diào)用6 Z8 N8 ^( s& h0 w) ?+ c, S
6 r: O6 U$ Q; |9 a
KeyManager類提供了一組方法來(lái)訪問(wèn)硬件模塊的參數(shù)和控制硬件模塊的行為,包括DJIKey的Value設(shè)置,Value獲取,Value監(jiān)聽(tīng)和Action執(zhí)行。通過(guò)KeyTools類提供的createKey方法可以更加方便的創(chuàng)建DJIKey實(shí)例。* ?2 j% p2 C: k& `; a
下圖展示了使用KeyManager的接口判斷飛控正常連接并且GPS信號(hào)等級(jí)大于等于2級(jí),然后給飛行器設(shè)置返航點(diǎn),最后執(zhí)行返航操作的調(diào)用流程。
# K, G6 I8 ?% n1 S) T ! a" [/ L+ T( F# j: J) \
此處是示例的操作方式,后面有在項(xiàng)目中使用的過(guò)程。
  f# Q* E6 n0 N3 p. `2 ?: `& e! y, \( I
2、示例6 W! c# W. ]8 M5 t$ P7 O9 X
- v, H8 U8 ^! J1 B
//獲取飛機(jī)信息、云臺(tái)信息5 [" s" \1 o5 ]3 H! i
    private void get3DLocation() {- _' d. z# B3 I- D0 K
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {% H8 R8 Z& O+ J  R
            @Override# Z) y+ L8 w2 c; m  j0 Q( |! ?
            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {- N, w; J, r  A6 T1 ~
                if (newValue!=null){
. A2 m% Y! P* r0 \                    lat = newValue.latitude;" j; Y0 D9 R; E7 R% c  H9 i' k
                    lon = newValue.longitude;
- V6 L2 g8 Q8 z1 b, M. u3 r: ^                    high = newValue.altitude;
& @0 \0 |  {0 j0 v; R4 I                }" T, t' V1 ^( J7 V8 I- E* a( q
            }4 o8 E& O: R  V5 l' @
        });4 b! s: C9 q: I/ k5 _. N0 f7 c
    }6 ?: Z& |! y3 j/ z
    private void getAttitude() {$ m' x- o. i( d1 D
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {
9 N9 X$ E9 k9 f* q: W% H& _            @Override% i9 O. S3 N5 P0 B- J
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
" N9 [$ U7 e4 w/ g( A8 ]# A; d) x                if (newValue!=null){
+ v; [' ?' p, R6 y. M" V                    pitch = newValue.pitch;" ?) [& C7 N- U4 y
                    roll = newValue.roll;9 Q2 C1 \4 l8 m8 h, E
                    yaw = newValue.yaw;$ J/ s7 E) U- G5 s( O- Q
                }: `& a( _9 K3 u0 V
            }
9 B3 P' N1 D) x# @9 @        });! ]% ?$ ^! g  g2 Q  o
    }
5 c: [, Z8 X$ y/ ]    private void getVelocity() {5 t5 H; V4 H$ \. @( X7 ~+ g; Q$ H
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
. ^" B$ P, ^6 n/ I            @Override! L- G! q" t% ^
            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {. Y) j& V% W3 ?+ p) D, K
                if (newValue!=null){
' j0 e& Y0 d# P' ~                    velocity_X = newValue.x;
" C, w; [: l, P1 C& ]! {- m/ `                    velocity_Y = newValue.y;. L( u5 I$ N6 y9 W
                    velocity_Z = newValue.z;
: ~& g, F1 X' v4 I5 v) K                }
" H, ^9 A5 J& O5 ]. A) K0 H            }3 x2 `/ ~  n; g+ C
        });
" d) g0 v: A4 H& E    }1 b$ r6 i/ D" Q. o: W4 q$ N
    private void getIsFly(){
9 U( Y1 ^; ]7 {8 k        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
0 M2 ]( |' m5 C            @Override" @" b1 l3 [; a
            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {, L+ [/ L& s; u  @7 }' Y
                if (newValue!=null){; {% h& V# e* _8 G. O$ T
                    isFlying = newValue;
& z* c* b) i! B                }
/ V" v$ ]: d% G            }
3 w& Q! p* @' w( O2 H, V; C( d- }        });6 x5 W  X7 c  A2 z8 `
    }
# r" l" }0 q0 s) P- R6 U7 U    private void getGimbalAttitude() {+ G+ n; j/ x6 G" i1 c. a! I1 g
        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
% }5 ~, Y, G! F" X: g            @Override
% d( d. O. e5 o, _            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {6 G2 L6 y) Z% C4 [: u3 a2 _: g& P
                if (newValue!=null){  {3 D7 Q! s% k) i
                    g_pitch = newValue.pitch;
7 J3 e/ C' u8 T" C2 @7 v                    g_roll = newValue.roll;0 P+ x, {6 Q6 q# A& O! `7 n
                    g_yaw = newValue.yaw;
8 ?4 ~5 A0 t4 z. f4 D                }
4 `; b( a8 q  Y$ P$ e7 a            }# u8 J5 y5 E, ~3 c  m' t1 V/ H' h
        });
" i" Z+ j0 D8 V7 y" _) g! o7 U    }6 v3 T/ _% f! P; T$ L* T1 A
    private void getPower() {( a8 ?8 V( H6 Z+ `: ]2 H
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
) T) H4 z$ B' ~4 k            @Override: `- U; S& r* {6 P
            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
; ]4 G9 k6 }" K5 Z: ?0 a                power = newValue;
8 ?3 k" H7 _. @! A& N, R            }: I1 u+ G: g6 h9 m5 |2 z) o
        });" O' W$ \) |8 I2 v4 g* H
    }( ]% ]9 u  e3 ^1 l
    private void getTemperature() {
9 N! O' H2 O$ Y$ \. x        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {: C' E9 N' T0 |. O/ [( o8 E
            @Override% ]) N/ }" q, H8 U9 s+ n' M9 ?: R
            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
( E6 _3 l' Q/ X( D& z% O: J                temperature = newValue;
: [. a. z' t1 t" I2 }8 Z2 A$ s            }" F2 i3 g+ J. g
        });( d+ h7 }( W  x. S
    }
. w1 n. [+ \; D
  • 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)行獲;
    " k% ?8 G0 q, C! R5 ]( S

    8 q, y+ K! a* K# V! P
    $ {+ G0 L1 l# p" T+ U2
    ; T  C) k  S) _5 Y. o1 K多媒體使用  R! D6 k. M7 d
    1、Sample介紹
    5 @' A' m4 b# r# G4 b: [. N9 m/ u
    - g+ x; U2 g3 X2 o$ ~拍照、錄像是無(wú)人機(jī)的重要功能,對(duì)拍攝的照片、視頻等多媒體文件進(jìn)行管理也就必不可少。多媒體文件的管理包括訪問(wèn)飛機(jī)存儲(chǔ)空間內(nèi)的多媒體文件資源、獲取多媒體文件列表與列表狀態(tài)、視頻文件播放等。4 c+ i0 A6 N+ X0 q. G
    下圖為完整的接口展示以及接口調(diào)用流程示例。1 \3 R7 i% g6 D! A0 u
  • 多媒體文件管理調(diào)用流程
    4 b7 ^( ?! r# S8 C, @7 f6 L" Y
  • 視頻文件播放調(diào)用流程
    ; G% e3 z$ D' m
  • 發(fā)表回復(fù)

    本版積分規(guī)則


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