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

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

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

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

[復(fù)制鏈接]

660

主題

660

帖子

4567

積分

四級會員

Rank: 4

積分
4567
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2023-7-7 12:01:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式
$ c$ W, b0 v5 f: [' A* n- a. b/ C8 t
點擊上方藍色字體,關(guān)注我們
5 g( J" o8 B( W" U* p
( X* k8 h8 P2 Hv5.x版本的功能與v4.x基本相同,都是獲取飛機的姿態(tài)信息、獲取無人機多媒體文件、操作多媒體文件、航線規(guī)劃等。不過在上一章節(jié)中也大致說了一些兩個版本的中API的差別,下面是根據(jù)一些API使用所完成的一些功能,因為項目原因只能提供部分代碼供參考,后續(xù)如果有這方面需求的小伙伴可以對其進行開發(fā)指導(dǎo)。
. Z6 }& y0 h$ T8 h7 N& S! v, }+ v( d1
5 O4 `" b- y+ z6 X0 o3 P9 M( c1 P獲取姿態(tài)信息% }5 a: d; l, a: q
1、KeyManager調(diào)用" O/ t$ }! H1 @& g$ r
) }$ b8 g/ `4 n3 z0 A: I
KeyManager類提供了一組方法來訪問硬件模塊的參數(shù)和控制硬件模塊的行為,包括DJIKey的Value設(shè)置,Value獲取,Value監(jiān)聽和Action執(zhí)行。通過KeyTools類提供的createKey方法可以更加方便的創(chuàng)建DJIKey實例。
' w- t7 g! B2 M4 t" g. b9 d下圖展示了使用KeyManager的接口判斷飛控正常連接并且GPS信號等級大于等于2級,然后給飛行器設(shè)置返航點,最后執(zhí)行返航操作的調(diào)用流程。
& T# R% Z$ c' B, t
$ c5 B0 P! p! X; I此處是示例的操作方式,后面有在項目中使用的過程。
' [! m' i( k) h2 v. [6 Z6 k- P
) _/ N9 v0 w0 O$ v6 x* P* @2、示例
3 I7 a2 F. }% Q) n. C4 ~+ v# j4 H" o; L
//獲取飛機信息、云臺信息
4 c( h* C; r8 v+ c) V9 c! ?& H7 r    private void get3DLocation() {# F# I& Z5 L6 B- M6 Y
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
& Z+ }% }+ Y( S* d+ V3 K            @Override
- q! ~: Q; ~$ d; p! E+ h- I            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
, F# b( D5 K5 F  a4 J                if (newValue!=null){7 ~6 D2 W( A2 {# T2 e
                    lat = newValue.latitude;! J3 Y* v1 d& n0 x7 b9 i7 ^
                    lon = newValue.longitude;
1 ~; p. ~  A0 C! R. `) O/ r% G0 S; h                    high = newValue.altitude;
& D) J  f# ^" Z( `                }
3 {7 h# I) R5 q$ A0 @! g) n            }
5 @( L# P& @- h) b. O2 A6 X        });
# B2 T% @2 |$ y& q    }
+ i. G, f- a$ F& p3 m    private void getAttitude() {
" y8 |; x2 p! ]* t6 M: Q        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {: A6 N# C& {; w) J
            @Override' s/ w& M! R3 y5 |
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {) ^* j$ v4 c$ @0 F- _9 T: b
                if (newValue!=null){! ^2 u. M# ~4 u. ~& A- P  {, ?" O
                    pitch = newValue.pitch;0 _) `3 N0 d! b2 T% P1 M/ m
                    roll = newValue.roll;) f: x& |/ ?% Q# ^/ @* g
                    yaw = newValue.yaw;/ `6 x/ s# u2 ?% i) K6 y% f# g. M
                }
9 y$ F) ~( v% G2 P. Y* n8 M" I; `1 X# R            }
0 ~- u* X! ]/ i! H9 Z# T5 ?        });
+ S9 q# n5 H  S$ P1 {7 l5 r5 l    }
# G* x$ P5 R, M+ M% o- J    private void getVelocity() {
1 G6 b2 k  {4 _3 A' j        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {5 @& Y: r2 @' U' p! @! H
            @Override  l2 q9 d) E$ W, e* W/ D
            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
! s1 l: G: f; E5 J                if (newValue!=null){* W, p$ V' p- _" X, D! n6 j0 B; K
                    velocity_X = newValue.x;$ g: H! r3 \7 r
                    velocity_Y = newValue.y;) L0 ?5 u1 \. e! ?. _8 t4 i" a, `
                    velocity_Z = newValue.z;
" R4 v# E: W: ^; t7 n                }
2 \, A8 ?$ v& S$ V, d, N            }) e$ W0 s) U! T& {+ \
        });5 E  O6 j2 p  T* E' `  U( n
    }* ]0 O! \2 p1 C+ D3 z: J7 q3 k* B" d
    private void getIsFly(){
0 D  Q, @' V, j' X        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
& @+ v* D) m: F$ Y3 R) T            @Override# l( N% e, T; U; [: o
            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
7 v" J6 T% v0 j! ^- D5 a                if (newValue!=null){
8 g4 ]3 }, @* b  L4 w                    isFlying = newValue;
/ L/ S7 x1 [) Q; h                }7 r6 }0 e& `- c
            }) n* J/ N- S' J* z1 t  c5 K+ S
        });
/ N) U0 G0 V1 u2 _    }
: s2 z/ a/ [' a( A    private void getGimbalAttitude() {
6 q7 r# [8 U) e4 a        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
  m% v) p& ^$ G4 f" l) Q& w. ]4 s* Y            @Override
3 S( A  g4 G( L, y( O! L, ~            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
4 D$ c3 H- C; U; b                if (newValue!=null){; e8 u5 Q8 C3 ~- U# {
                    g_pitch = newValue.pitch;
4 `# v4 j' s* c- q4 k1 h4 l# u                    g_roll = newValue.roll;4 q  c/ X4 O8 G  O4 F9 Y% z
                    g_yaw = newValue.yaw;
4 V. f* _  {( Y4 ~  z4 d! ]+ E& |$ Z7 i                }
0 @1 D% P- b5 w' g5 f7 p            }1 T* G6 h2 q( f- T
        });( ?# s3 w) {  O. {4 C  D3 w' _! q
    }+ r5 g* D+ {' `6 C3 L: ?
    private void getPower() {
% k- V6 c2 s" e        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
! v+ @+ W8 P# E( ]( f7 v$ R            @Override' g5 `9 L1 c" a
            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
5 x/ w* j% u4 K& q, k3 I, M                power = newValue;5 K% r% n0 T/ q9 k  w1 I7 w
            }- f+ L, I7 O' R* m. N5 C
        });' `3 ]  n1 X! c& Z
    }
& ?- n6 P- [+ X) N    private void getTemperature() {( M7 Q% J4 q; M0 [5 X+ I
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {) [* a, H; L3 a
            @Override
+ ]1 `1 U3 L$ g4 ^) x            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {6 u2 a+ G) j0 V* C1 |& u( s/ D
                temperature = newValue;
4 o( N4 E6 i* b0 g8 I4 x) {            }/ f+ U7 ^3 f% u* A, B. R  I
        });: T1 y: U# Z4 D' Q1 b& y
    }
& _6 N; E' R6 h: m
  • get3DLocation()方法為獲取飛機經(jīng)緯度信息。
  • getAttitude()方法獲取飛機的姿態(tài)信息(分別是航偏角、旋轉(zhuǎn)角、俯仰角)。
  • getVelocity()方法獲取飛機的飛行速度(分別是X、Y、Z三個方向的速度值)。
  • getIsFly()方法獲取當(dāng)前飛機的狀態(tài)值(是否正在飛行)。
  • getGimbalAttitude()方法獲取鏡頭的姿態(tài)信息(分別是航偏角、旋轉(zhuǎn)角、俯仰角)。
  • getPower()獲取飛機的電池電量
  • getTemperature()獲取飛機的電池溫度onValueChange()方法為1秒執(zhí)行10次,這個可以根據(jù)后續(xù)要求進行獲。
    9 p# }1 j5 e8 p  g9 _3 n
    , a1 q% e5 i; D$ h

    & e" E7 K% x0 o1 \# X2. {, @" |: o+ k8 W) [+ V$ K
    多媒體使用- t7 C* J6 |; N  W) Q/ `
    1、Sample介紹
    ; _/ Y5 |' x* R% f7 C6 L6 u+ [) @) n0 }1 M
    拍照、錄像是無人機的重要功能,對拍攝的照片、視頻等多媒體文件進行管理也就必不可少。多媒體文件的管理包括訪問飛機存儲空間內(nèi)的多媒體文件資源、獲取多媒體文件列表與列表狀態(tài)、視頻文件播放等。
    , D7 \5 P6 f. e, K3 t) D  H下圖為完整的接口展示以及接口調(diào)用流程示例。# O9 F9 [& v: C; q; r8 t6 @% }
  • 多媒體文件管理調(diào)用流程4 T7 k  Q/ \- x( Z5 {. O" [
  • 視頻文件播放調(diào)用流程. N' y) i2 t" B3 Q
  • 回復(fù)

    使用道具 舉報

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

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

    本版積分規(guī)則


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