电子产业一站式赋能平台

PCB联盟网

搜索
查看: 224|回复: 0
收起左侧

基于Mobile SDK V5版固件开发大疆无人机手机端遥控器(5)

[复制链接]

854

主题

854

帖子

8396

积分

高级会员

Rank: 5Rank: 5

积分
8396
发表于 2023-7-7 12:01:00 | 显示全部楼层 |阅读模式

d5kqz13hmwm64023070118.gif

d5kqz13hmwm64023070118.gif

& F4 S0 H: `: U6 N点击上方蓝色字体,关注我们
6 V) b) ?( o# ~+ v3 Z7 q) {: I: @& e* x# M' k& H* \. U
v5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
& |% X- l" {9 t' i% K9 V1# T9 \$ e0 _  ?+ J: \* L* ?% f2 [
获取姿态信息
' o8 `4 ^6 z1 L$ Z! m1、KeyManager调用: g3 ~" M4 {6 ]. E: o+ l! X5 w3 z

0 V: }$ `" ~6 @7 I7 y1 g  v) _1 nKeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。
$ s. `3 k) W% _- s, a7 k( a* K) F- r下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。
$ R1 y7 Y7 O8 x

1hygojudocf64023070218.png

1hygojudocf64023070218.png
$ j; `& K; \% p$ D
此处是示例的操作方式,后面有在项目中使用的过程。5 y! F& |5 |6 b6 P, n" L* b
) Y1 _4 H) r2 B1 A
2、示例2 E+ h2 _* r3 v0 n$ F' b

+ k' X# ~5 A, k1 i2 E7 ~- z7 R7 ^//获取飞机信息、云台信息
+ w+ ?  E* _! Z; q9 d  y+ n  ~; V3 V    private void get3DLocation() {& M6 {. x4 t' j# a& W
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
% S) V" d. |: v& F' ]; W            @Override0 [) R, N$ \1 [. S' R
            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {3 _7 J$ A5 G% }& M! N* n
                if (newValue!=null){
  B5 L+ p! K* j7 U: s  Z                    lat = newValue.latitude;
; H3 I& _# x1 r* N" r! Q+ h& L                    lon = newValue.longitude;( S5 C5 M; `: O& N% V7 `6 Q6 A
                    high = newValue.altitude;: n0 K& z% k: D: q3 h% v9 O: v
                }% ^$ n& R" L3 B* G
            }3 n2 k/ L9 D+ D  Q! ?5 F7 h
        });( \6 C# k3 |/ ]! N
    }7 Y% [' t8 `) |3 e3 M
    private void getAttitude() {! W* |& N9 S: t0 b
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {4 p# e! |. _6 N* a) ?3 p
            @Override: s- t1 c9 M1 `: J
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
  V3 q- J( a% g, j, q/ M                if (newValue!=null){' l! e7 M( n1 K
                    pitch = newValue.pitch;# \* P& D* I; T7 D/ d' }
                    roll = newValue.roll;# i; P4 r6 u: S1 W& |
                    yaw = newValue.yaw;
, b# R' R& Z7 x: U  L                }
+ T: Q# G% q+ F1 G/ p, o5 E            }  S* @. U. S/ I; u% n9 W7 Y  W) s8 A
        });4 j7 E& p3 g) w3 R
    }5 ]9 T0 I5 N: Y7 z! z
    private void getVelocity() {
' a1 C& @9 y. _: k        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
  [9 m, J0 z; x            @Override
7 E: m  v2 O7 t- t            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
) e; n5 b; M8 E  h! a2 `                if (newValue!=null){
, ~/ [. G. f3 u* |3 R                    velocity_X = newValue.x;
* m; L- d9 Y) h1 I# w+ Z                    velocity_Y = newValue.y;
. y3 O1 n' w% ^. D( j3 S                    velocity_Z = newValue.z;
( D) i* k; H# B9 P  Y) r                }
" Z# i! d& X) V; k            }: ]% `1 U: U2 X' J8 r/ n
        });) f7 S% S2 Z3 h; J
    }% u/ V1 j5 n* e( L) L6 M
    private void getIsFly(){. O$ {* `( I8 W/ C! [( s
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {4 S  Z1 Y6 [" O6 G9 d: t
            @Override/ e1 E: ]0 y# n* E/ V& R
            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {+ q- P) P2 J5 J3 F
                if (newValue!=null){7 p6 p# I: U: a; T$ C
                    isFlying = newValue;
4 H! K3 X1 T7 G5 |  d* I- D                }
/ K2 c# b) f8 d! L) w4 k1 M# V            }0 b7 h+ ~. }; T% t) S% N
        });
: ]3 q3 w: t; v" j% ]- Q! o+ ]$ a: K    }
: Q6 l6 P9 Y5 w1 O/ ]- m( \3 L3 e    private void getGimbalAttitude() {+ P9 D6 U2 R+ B( a+ X, L
        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {0 u$ U+ G" G/ J( X1 |
            @Override
2 V- T7 h2 V. a. h$ J; ~            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
' v  m4 k1 D: N% h1 J                if (newValue!=null){- w( P4 s( n0 O- K) s; p; y
                    g_pitch = newValue.pitch;
' V/ h4 a  w0 b3 ]4 f% m                    g_roll = newValue.roll;
6 u( [' C/ m9 d/ n                    g_yaw = newValue.yaw;
! b1 ?/ i! C- Y9 h) T7 l1 r                }2 |! u* w7 B! L0 }) i1 A" Z; C
            }
$ j* v2 W+ I9 p% Z) W6 I7 K        });
. X/ C( J2 B5 [" b& [    }
) a8 Y, K, v+ _) V2 g$ D! y7 u5 m0 H    private void getPower() {" q* D  E9 B- ^9 S
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {# e. O; |/ P2 i! }6 H& n
            @Override
! K9 T4 J/ U2 \# q1 X            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {& y; f3 r0 j2 Y9 ]' Q
                power = newValue;
8 i1 I* P' R) C2 _! M& F, J# [            }8 A' Q. D5 R& o# Y4 p
        });8 d8 }0 M/ ~+ q) [5 i
    }( |/ u" `( J. t3 R
    private void getTemperature() {7 R/ k8 p& I' V) B4 F" N) I% K, v
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {3 o" B! k# @# \* I9 ~
            @Override/ K! J* C1 n, h* Q4 i; [. C
            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {- Z- W; t( U: o5 n  Z9 \, T
                temperature = newValue;
0 X& N$ B( k8 g4 X  j( R            }0 {: Y( a2 ~7 i/ b/ S
        });
# N( B# V4 J- V    }
+ R+ W1 y+ D# {# L/ G( l! t; R
  • get3DLocation()方法为获取飞机经纬度信息。
  • getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。
  • getIsFly()方法获取当前飞机的状态值(是否正在飞行)。
  • getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getPower()获取飞机的电池电量
  • getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;
    9 F* H! @! v! Z" o) M; G) \

    6 I0 ~! x, D9 S5 s
    % F% I4 t4 U1 m1 D0 _5 ~' N; X20 L% l8 q3 P4 g! c3 e% b7 n1 y# o
    多媒体使用! h/ Y( f/ k& ]" h5 F: T, K
    1、Sample介绍
    ( B0 e( W+ x# q+ p- k% {) @: f) @" [( X9 F
    拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
    ! r. j5 y; N# C! g; Y4 m5 ?* E- ?下图为完整的接口展示以及接口调用流程示例。
    ) p& M' l/ E& X7 {5 o4 a, c1 D
  • 多媒体文件管理调用流程
    9 {/ W- I8 v$ o; B. d, R

    nx0bv4uu1dw64023070319.png

    nx0bv4uu1dw64023070319.png
  • 视频文件播放调用流程# Z& N$ d7 j$ J. v! U( t2 F
  • 回复

    使用道具 举报

    发表回复

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则


    联系客服 关注微信 下载APP 返回顶部 返回列表