电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

1001

主题

1001

帖子

8805

积分

高级会员

Rank: 5Rank: 5

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

l1vvqf0vb4364018791618.gif

l1vvqf0vb4364018791618.gif

: |$ F9 f) ?  x# ~4 `点击上方蓝色字体,关注我们
6 O/ q3 U; p2 k" ]' d; F+ o' P" U6 L
v5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。8 |' S/ o" h2 l% l! _
1
( }3 c% Z) f2 e% K' k2 \& e9 }获取姿态信息
& t, v# l- N2 F: m1 x2 O: L3 T9 E1、KeyManager调用
& {1 w9 p0 O0 [( f  L1 \0 p' i/ g
KeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。
" J8 Z; t6 r! D下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。
; X: W2 ^# z" T+ M* u3 E+ u

pc3pusun01464018791719.png

pc3pusun01464018791719.png
% U. R1 ~* C. q! f. P0 P
此处是示例的操作方式,后面有在项目中使用的过程。
6 Y# I) W) l6 r( c: T: t' u- X* n# B; {6 }: G0 |; P& \
2、示例" T6 o9 K& u) g: b! X7 Y0 j. m& o

1 A2 y8 h3 F" H/ a//获取飞机信息、云台信息
& a1 \( ]( H  \/ K- K    private void get3DLocation() {! y. e0 J8 P& `# X9 `- j, Z
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
7 t8 T- @; F! A1 J" @4 y& r( e5 {            @Override
9 F3 X5 x6 y; e$ S' d  N2 S            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {6 ?: P# @" m1 ^- i# t
                if (newValue!=null){4 t. J, A% l( _  g# l/ h0 a0 I" d
                    lat = newValue.latitude;1 ]2 a" Y  g: z- J
                    lon = newValue.longitude;
2 z. r6 k7 i. m) Y% h% C( F- F                    high = newValue.altitude;
2 a+ s+ q4 Z4 h- A5 z1 L                }) x; c& s7 Y/ K
            }/ T  J+ X' P9 I0 n8 T9 Z
        });
/ `, @9 X8 J) Q9 K6 x; K1 c# {" m) V    }1 M$ `8 n! B4 N  F( m
    private void getAttitude() {
- A; u# K% ]7 ?. a        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {2 R% E" N0 v! X3 B3 D
            @Override  U2 ?. I, y: \- y4 _
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {9 \" H' U$ b! F2 F1 o: W# |
                if (newValue!=null){3 _: o7 ]0 `* B+ f' y0 n5 Q
                    pitch = newValue.pitch;! p2 I3 ?( Z4 K4 u& v, u) Q
                    roll = newValue.roll;/ y- G- u; @  H
                    yaw = newValue.yaw;
+ d6 q; i) w" `- c4 ]* I9 d, G                }, n; l; ^- l& X1 ^+ Y1 u* {" I
            }
6 Z5 J. {  f- p8 {. B! h& ~* Z        });
6 P' N) k) M/ Q: ]    }
+ E; ]* d, g2 C% L# Z& [( Y! |    private void getVelocity() {7 i6 k: B$ F' `  h2 M+ r2 T5 X
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
5 K; p& r+ [' B+ x1 ~            @Override. @0 s# V3 V2 m0 z3 X
            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {4 `3 o" q5 U5 N. f, m! @5 \$ H3 U# g
                if (newValue!=null){
/ U" W* T! R! ^                    velocity_X = newValue.x;0 p9 X  w1 o+ G; o9 |
                    velocity_Y = newValue.y;
# `! K' y) \2 y6 h' x; \                    velocity_Z = newValue.z;- C. X" h$ S0 G
                }
8 F  P; m' `; r1 |            }
. X  ]* Q) {1 W( _( b/ I+ t        });
# k3 D0 F6 r% \8 G  g    }; h2 e8 C: }& M8 `" F  {) ?
    private void getIsFly(){8 D% l) D/ ?7 D/ j; m
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
: P* X' `# ~: M9 E. h* F            @Override$ i! Q( m3 c, ]& g; F! B  u
            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
; q9 C9 H5 }3 [; W                if (newValue!=null){5 U* C- J8 k5 T8 V2 U# b6 V
                    isFlying = newValue;" A( f$ o$ [4 s, h! U
                }, L1 L8 t- r" A3 D( c8 z3 I
            }5 S8 x' T2 ~' W  n' v
        });
: S9 x% W# i* V3 q& ?    }
. A+ A2 M* Y$ y2 I8 P9 v    private void getGimbalAttitude() {2 U8 H  X2 w1 g9 ]  _
        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
+ G1 |& \* ~/ r: D" `/ V' k            @Override3 v0 ^& |9 ?2 V% E/ n, z4 s
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
* Q4 S4 ~; E, c/ x; |1 j2 u                if (newValue!=null){
: C6 Z7 y2 O  V. h: O" t& u                    g_pitch = newValue.pitch;9 I- F$ j6 v$ i- e0 {
                    g_roll = newValue.roll;
( R0 a9 ?' y( [% y; b                    g_yaw = newValue.yaw;0 t, X0 i! q/ \: c  ^
                }1 D( \2 }) Z6 [
            }: i% ?# L' P6 ]+ ?  A0 ]
        });2 u% t$ c( H1 v2 R2 s
    }4 S( N- T6 w1 {
    private void getPower() {
. J6 }7 g( x4 A+ T- Y        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
& e& [2 y7 z. E2 w' Y( W; \            @Override
: t5 S+ a: v1 A+ f% S  Z% S1 p" S            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
4 g" G8 U. t, L( J% S& e                power = newValue;
# E4 c4 B( [& X0 B1 l# A- r            }4 o) ]. y0 c* Q8 {) @
        });
# w) G$ T+ G% C8 e, e# o    }
) V3 c& u2 Z" P* ~: G    private void getTemperature() {
7 g6 \" \! F& o9 ]' W( E        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {( Z3 e+ o6 E+ g
            @Override
/ e2 C* k9 S, i! S5 D) j- G            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {- ]3 M6 \: b) g4 T9 E  [4 }
                temperature = newValue;6 t1 u+ B. b- [- T" `+ z  b* v
            }
1 X( `- j6 G% d2 \        });
. T( l) w8 w1 b) R2 m* h1 h" y    }
9 M4 W$ _# z- N
  • get3DLocation()方法为获取飞机经纬度信息。
  • getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。
  • getIsFly()方法获取当前飞机的状态值(是否正在飞行)。
  • getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getPower()获取飞机的电池电量
  • getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;2 _6 ]) M% M) A& ?
    ! e2 b4 H  N' F" j" R, W
      x; l" C, L! c/ V  _
    2
    $ i. r( n' Y2 _多媒体使用
    8 q$ R- P9 S* O) _1、Sample介绍
    * s. O; Y/ F/ V% C. e2 l) E" I8 Y( R
    拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
    7 W, h: v8 S. p2 U+ r" r5 {下图为完整的接口展示以及接口调用流程示例。) f  E+ s+ O0 T! j4 B. n
  • 多媒体文件管理调用流程
    ) Y* D4 A# ~5 d* x8 n

    ln5lcvw2imq64018791819.png

    ln5lcvw2imq64018791819.png
  • 视频文件播放调用流程
    & O: u3 j( I5 }0 r1 C. z( D
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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