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

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

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

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

[復(fù)制鏈接]

660

主題

660

帖子

4567

積分

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

Rank: 4

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

, l5 y! r8 a6 F$ t點(diǎn)擊上方藍(lán)色字體,關(guān)注我們1 c$ C6 d! s% ^6 C( f

8 k% [' P. z( A6 i1 _1 d& K1 e/ ~v5.x版本的功能與v4.x基本相同,都是獲取飛機(jī)的姿態(tài)信息、獲取無人機(jī)多媒體文件、操作多媒體文件、航線規(guī)劃等。不過在上一章節(jié)中也大致說了一些兩個(gè)版本的中API的差別,下面是根據(jù)一些API使用所完成的一些功能,因?yàn)轫?xiàng)目原因只能提供部分代碼供參考,后續(xù)如果有這方面需求的小伙伴可以對其進(jìn)行開發(fā)指導(dǎo)。9 Q8 }* f/ T5 s+ r+ |
1
- p& a' o9 [9 W. P8 h' A9 J獲取姿態(tài)信息
$ U3 N" n9 n5 \' ], u! Z0 B, ?1、KeyManager調(diào)用3 g& C6 i# c% h* j- j

' l. Q( L! ?7 W+ oKeyManager類提供了一組方法來訪問硬件模塊的參數(shù)和控制硬件模塊的行為,包括DJIKey的Value設(shè)置,Value獲取,Value監(jiān)聽和Action執(zhí)行。通過KeyTools類提供的createKey方法可以更加方便的創(chuàng)建DJIKey實(shí)例。
2 K3 u5 E7 ]* C4 \下圖展示了使用KeyManager的接口判斷飛控正常連接并且GPS信號(hào)等級(jí)大于等于2級(jí),然后給飛行器設(shè)置返航點(diǎn),最后執(zhí)行返航操作的調(diào)用流程。/ j" p3 Y# Y9 X* T* e  ]
  f) h9 n9 P4 R+ w, }
此處是示例的操作方式,后面有在項(xiàng)目中使用的過程。
! N2 d$ z; g9 F- z( i/ Y9 o; a. i+ Z5 z3 w7 t
2、示例
4 Y+ O+ D- j8 V, I$ @4 P0 L' ?6 y: a" o# F$ K/ n7 P
//獲取飛機(jī)信息、云臺(tái)信息# h6 k* H$ m* w7 V4 y( E, Z0 a. y
    private void get3DLocation() {
0 w8 T/ v& M' x/ l  u+ O9 E        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
3 d8 p; [/ @9 ^% w+ N1 Z# g; G/ J            @Override* y  i6 O3 \3 o1 v! P
            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
/ \0 _, F$ P1 P  J$ e/ T& ?                if (newValue!=null){% r& }* i2 X5 Y, x6 q: V7 e
                    lat = newValue.latitude;# D# ]. F, I' |# t
                    lon = newValue.longitude;: n- i  g. K$ ]( F# k
                    high = newValue.altitude;2 t, a8 o& c; u4 A
                }
% y- i, H' ]8 i  J            }  \- h8 A" y4 d2 X+ @
        });
: c( W; V% O) _  |* `    }
7 X& a" R3 j" _    private void getAttitude() {, A* s/ v5 a" B- h) B5 ~* x1 `. Z
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {% n2 v/ `4 g# P
            @Override
& w8 M" ?% z2 e$ m$ r            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {( p6 S2 c# a$ ~9 a1 J
                if (newValue!=null){1 U( E( `+ @2 q
                    pitch = newValue.pitch;
, U6 H  Z7 E5 w7 w9 D$ T                    roll = newValue.roll;
+ K4 _. p* Z5 Z3 B# P3 T                    yaw = newValue.yaw;
9 f4 ~3 ]; v( A2 g% ?, ^% ~+ R                }
4 T# Z: q& F9 `6 X            }
# S; S) w& a9 e) k( g        });# W/ i3 N# g. B8 r4 T* `
    }. _" I/ r5 E0 A2 J( s' `/ n( r
    private void getVelocity() {
# c* L5 N4 U9 A5 e& ^0 k        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {5 y+ b+ A: Q0 n2 F9 C1 o
            @Override/ j! t7 i) F. Z% l0 U/ U
            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
" `% F9 {: W! _$ i- J                if (newValue!=null){- i% ]& K* r4 s- y3 S
                    velocity_X = newValue.x;* ?. H6 Q6 \! z% b" \8 w9 a
                    velocity_Y = newValue.y;
# t, w" a1 E* p6 V6 b8 W1 r                    velocity_Z = newValue.z;" w& H- A4 U6 }* e$ Z. ]
                }$ ]7 u  o# Q6 [( ^
            }
( C, ?* a) G' U/ u8 l, c        });
" V( h. E, U) b) ~2 j    }
  F) H/ @% g& B3 y( G5 m: y    private void getIsFly(){+ Y' ~. F0 o  i" l! b! V3 Q
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {5 T' t3 N0 a; @& [, X% g/ o
            @Override. `& K' z0 S- N( b! h4 ~
            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {' k( t2 m( j; h0 {
                if (newValue!=null){9 j4 J, m; S, O4 Z5 w' M0 _) Z5 x& i
                    isFlying = newValue;
5 W/ H' m" j( a                }
) v& g3 S$ M" n3 Z& Z- Z* C' p            }& V( Y3 y9 ?4 F4 N9 v
        });
2 a5 [7 _6 ~( R( e* }    }5 y% ]9 P  O8 B7 q" D; j
    private void getGimbalAttitude() {
& Y  W- R% i: a, D        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
( R- y7 X- L8 `; e8 r$ h            @Override. j3 m* L0 w0 M' o. L( `) `
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {1 k3 v! M5 |! L: A
                if (newValue!=null){
1 f' M1 F3 {7 A# e% ]- h                    g_pitch = newValue.pitch;; P" S( j! `) r, g0 N# d  m) a1 ~! L
                    g_roll = newValue.roll;0 u* a& {* b; s, F( J
                    g_yaw = newValue.yaw;* q' N8 R) g* O& @- h! b
                }8 ], `( ^! `8 R' V; ]& ~3 P
            }, n& M  [% \" d8 Z1 N* p
        });, T* |8 \' z0 l' ^( D
    }' L3 L) j, G* _) i! {" n
    private void getPower() {; O8 o$ N- \- K6 j+ v% y/ J
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
0 P, x/ F0 n; p            @Override. G+ H. f' v& ]0 u$ _' L+ a
            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
. j! q( e/ h; m' n% H  p                power = newValue;
% ]* {" K' p3 `" ~( I( }            }
+ J& E0 c, u+ U: c/ D# C& v        });* ^; U3 v7 o' F: r3 H  E8 O
    }
! a) `! L9 }" q. d' i5 y    private void getTemperature() {
1 z: L; L0 [5 t2 h5 M( H, Y+ Q        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {8 u* f4 D$ b/ ~% d% n1 T
            @Override
4 i8 s0 i; g' r8 F- b            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {, Z% h! l# z. R" E
                temperature = newValue;" i! T, {6 i# J4 a0 C
            }- k/ V  u: d* c3 ^, C" A! x
        });
1 I# x/ _7 x! o. a    }" F0 z' {$ S+ T* |$ m  `0 s# @
  • 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)行獲。
    % m: O% {) J* f7 w: Y0 G/ H  f7 J
    . W* K: r. }" C1 S% D

    , ]% D3 ^, U) V6 }2- W+ |2 S; m1 D, X9 l7 p& U
    多媒體使用4 L- ^4 q, s: y6 Q' M
    1、Sample介紹" g2 M* E, b( G' `

    ) Q9 {0 E( t2 p: W) P$ J9 `拍照、錄像是無人機(jī)的重要功能,對拍攝的照片、視頻等多媒體文件進(jìn)行管理也就必不可少。多媒體文件的管理包括訪問飛機(jī)存儲(chǔ)空間內(nèi)的多媒體文件資源、獲取多媒體文件列表與列表狀態(tài)、視頻文件播放等。5 L" g) @" ]: q% o8 c" Y
    下圖為完整的接口展示以及接口調(diào)用流程示例。, m" M" M0 t1 w& U- u( V* E* \" b
  • 多媒體文件管理調(diào)用流程
    8 S) M- Y; M; Z5 {+ ^
  • 視頻文件播放調(diào)用流程
    7 S+ x+ c5 m6 c. E5 T6 k' G
  • 發(fā)表回復(fù)

    您需要登錄后才可以回帖 登錄 | 立即注冊

    本版積分規(guī)則


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