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

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

搜索
查看: 46|回復: 0
收起左側

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

[復制鏈接]

660

主題

660

帖子

4567

積分

四級會員

Rank: 4

積分
4567
跳轉到指定樓層
樓主
發(fā)表于 2023-7-7 12:01:00 | 只看該作者 |只看大圖 回帖獎勵 |倒序瀏覽 |閱讀模式

& W: d, k# e( f  A( y點擊上方藍色字體,關注我們
4 {4 T* w) f& F$ v" _& D
0 n  ^* j3 ^* f. vv5.x版本的功能與v4.x基本相同,都是獲取飛機的姿態(tài)信息、獲取無人機多媒體文件、操作多媒體文件、航線規(guī)劃等。不過在上一章節(jié)中也大致說了一些兩個版本的中API的差別,下面是根據(jù)一些API使用所完成的一些功能,因為項目原因只能提供部分代碼供參考,后續(xù)如果有這方面需求的小伙伴可以對其進行開發(fā)指導。
! e( L& H2 y7 `; b$ K% O( F16 H5 i3 ^: ~' c% P/ J
獲取姿態(tài)信息" B& a2 T8 `' G6 h
1、KeyManager調(diào)用- @5 `9 B% z/ R/ q4 i' R
% ?0 G. W4 {+ [
KeyManager類提供了一組方法來訪問硬件模塊的參數(shù)和控制硬件模塊的行為,包括DJIKey的Value設置,Value獲取,Value監(jiān)聽和Action執(zhí)行。通過KeyTools類提供的createKey方法可以更加方便的創(chuàng)建DJIKey實例。3 k! y6 E- P3 u: y' R: s
下圖展示了使用KeyManager的接口判斷飛控正常連接并且GPS信號等級大于等于2級,然后給飛行器設置返航點,最后執(zhí)行返航操作的調(diào)用流程。
' Q, a9 c5 m; {" A
  n3 @, a5 j2 L. ~此處是示例的操作方式,后面有在項目中使用的過程。
" c3 O2 y! y1 p4 z' Q: F6 o. E; [$ k& D& W' {) @
2、示例
2 x5 w) ?6 |1 |4 g) s7 p( C
( S3 t$ z# ^. M# h! S# i//獲取飛機信息、云臺信息$ [6 n; `8 e% d/ X& R8 a( }6 l7 Y
    private void get3DLocation() {2 T! @- E/ T( v9 q4 H7 u4 P1 v
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {+ M7 t9 h( \9 Y0 w
            @Override
* d! W. \9 b2 }( D, y            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
* J# f% V. v4 X5 x: g                if (newValue!=null){
5 a, W7 M2 _) K" z8 h                    lat = newValue.latitude;
+ f% F- Y: H! j, p+ J: N. ]                    lon = newValue.longitude;
9 b  \4 k: `0 m                    high = newValue.altitude;' P$ A( ^) i( K' ~  t
                }
" _) a$ S( s: l8 T, W. O            }1 o* W; J, ]. z+ _1 E
        });
  _" h( V2 l' o/ ~' h2 Y    }
5 b% C: l5 ]! S, I0 |! V7 Y* ~0 u    private void getAttitude() {
4 @" i* j: V' P% T- w5 U$ v( n        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {
5 x$ M1 y" k; d8 C            @Override9 S4 J+ x5 T1 b  Z6 K
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
! Q8 |0 r8 g: l                if (newValue!=null){
. D# F& n% H( A9 H& G& C# [4 m                    pitch = newValue.pitch;/ `! Z4 K7 }) E/ V7 [/ H' q
                    roll = newValue.roll;
, Y) s! u  G6 m3 Y# x$ o                    yaw = newValue.yaw;* K9 T9 ?# s4 i+ Y; D
                }6 ~5 ^) @& [5 p9 x" P. y
            }
. P: ?! j( W9 J- I- t6 \2 a$ H        });
- S/ h  G! a8 z6 C/ X4 \9 v  u# Y7 D    }
" O- b6 `9 K+ n% r0 t' v0 g4 w    private void getVelocity() {
( D- N9 f; y4 p: G5 o% {        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
, x7 Z& i1 z1 w4 `. @            @Override
' @# V% W! m7 {6 f/ D) A            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
7 r+ U/ k0 \% C  f                if (newValue!=null){
4 r: c5 x& ]7 @! o0 v: q; i; f                    velocity_X = newValue.x;
1 p: ]  ~# d9 K                    velocity_Y = newValue.y;
! Y; @1 r/ n8 g8 G$ ]  o3 W! \                    velocity_Z = newValue.z;( h6 V. d# }% f# Z
                }
5 _; e* ^1 B" b$ u% _' E! L% O            }
; l, I& U5 K4 w) A) S        });
4 s/ s  N$ v( z" q: H9 o0 C+ u    }4 E, R  F% F6 K- p4 Z1 [& N
    private void getIsFly(){/ t( O* N$ O3 {' Q0 [
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
6 l$ ~2 z+ M( A. ]            @Override
/ i) e8 j- H" ]/ S3 {: j            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
6 j: l; T* t4 [0 r                if (newValue!=null){
. N" p- u9 X4 H/ J                    isFlying = newValue;
9 u3 L- m% {6 N* c3 D- ^: v                }  [9 x. }4 [( d$ L3 I6 o
            }* v9 [5 X$ b4 ^: C: S
        });7 N- ^- i+ q& J9 ~5 E
    }% I# R2 p. t  Q
    private void getGimbalAttitude() {
3 Y3 s- N8 Q% o. {% z        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {, _; B6 u# ^9 m
            @Override
0 A* E/ }5 }+ W9 P            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {/ l4 O6 ]5 _/ K7 I' T
                if (newValue!=null){. p1 t# c( `  u% p, P8 j. M% N
                    g_pitch = newValue.pitch;
4 S8 |' v  `% V# L, f& m$ M/ _3 O                    g_roll = newValue.roll;
. \+ g$ E* }+ p                    g_yaw = newValue.yaw;
- g  `# @! C! y2 L; ?( Z7 i                }& }9 {2 D. _. K6 d# M; c
            }4 E. }. h- F  h, k" i% w# [
        });
( ^# I5 t' e# J( I( t    }/ N' j% Q/ K. L( l. b+ r
    private void getPower() {
2 V6 _8 N" I' k' U* W6 Q        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
8 W$ O5 ?6 _+ c. S            @Override! O, \" l# C6 c1 U2 C6 H8 x
            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
0 U3 L9 v/ k4 S7 Z                power = newValue;
/ K) S0 ^8 B' r            }
0 a; H8 Y* v) e7 m4 G$ S( t: H        });7 A6 I+ t/ I& D5 ]3 i: [
    }3 v6 e9 p. G+ G; e- P: }, d) o
    private void getTemperature() {
2 n7 w9 R2 }% _" R        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {4 V; d) \" w- [' o2 k
            @Override
1 y3 K; B0 ^2 M            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
7 R) q, z  B* m3 Z7 y                temperature = newValue;/ u8 W  ?' z1 m: h7 ~4 T
            }
/ M1 r9 V/ u1 u: H+ f  L        });5 I7 t+ _3 \0 q& p8 q0 e) X2 W. |
    }5 h* h5 n/ w! E) m  a% i' U& U
  • get3DLocation()方法為獲取飛機經(jīng)緯度信息。
  • getAttitude()方法獲取飛機的姿態(tài)信息(分別是航偏角、旋轉角、俯仰角)。
  • getVelocity()方法獲取飛機的飛行速度(分別是X、Y、Z三個方向的速度值)。
  • getIsFly()方法獲取當前飛機的狀態(tài)值(是否正在飛行)。
  • getGimbalAttitude()方法獲取鏡頭的姿態(tài)信息(分別是航偏角、旋轉角、俯仰角)。
  • getPower()獲取飛機的電池電量
  • getTemperature()獲取飛機的電池溫度onValueChange()方法為1秒執(zhí)行10次,這個可以根據(jù)后續(xù)要求進行獲取;, Z( l  m) N1 _1 i: h7 U

    ; c4 M0 i' p8 ?2 ^
    & p" `- `6 |& l9 o, \6 z2
    2 F& H$ l2 ^+ o) \5 L* I多媒體使用" V) p9 R6 |" h' M1 O0 h
    1、Sample介紹
    / ]' X  C( j( H1 g, N: }1 M! F# Z4 U
    拍照、錄像是無人機的重要功能,對拍攝的照片、視頻等多媒體文件進行管理也就必不可少。多媒體文件的管理包括訪問飛機存儲空間內(nèi)的多媒體文件資源、獲取多媒體文件列表與列表狀態(tài)、視頻文件播放等。
    5 p$ g* A4 w; H2 i2 l) n3 u下圖為完整的接口展示以及接口調(diào)用流程示例。
    8 F8 d) q1 A. ?( m
  • 多媒體文件管理調(diào)用流程+ n+ i2 {( i$ t$ J9 `
  • 視頻文件播放調(diào)用流程2 g- @. c% B. X8 O
  • 回復

    使用道具 舉報

    發(fā)表回復

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

    本版積分規(guī)則


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