电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

1001

主题

1001

帖子

8805

积分

高级会员

Rank: 5Rank: 5

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

ur4rfcigipz64025005929.gif

ur4rfcigipz64025005929.gif
# J! [/ |: {$ h- j# s8 p
点击上方蓝色字体,关注我们- E( j: ^( a0 f

" u  {9 J9 ^& i* o- j9 Jv5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
- R" X' |# F# |% K5 `1# B  s7 b- X2 ]9 u6 a% O% \
获取姿态信息0 p* w9 L1 z9 h5 v. n5 q6 o3 K6 O% J
1、KeyManager调用
5 r% ?( r( y7 \4 W/ _" ^; [* X$ M- H) N3 k7 w5 p
KeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。3 c* I  b, y4 z; G
下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。. }% M* ]: N8 @6 c

syxjjgb0l2064025006029.png

syxjjgb0l2064025006029.png
1 t* b1 k8 `  z/ E# K
此处是示例的操作方式,后面有在项目中使用的过程。. {: z- e1 V/ J  T! B) i- F

7 u: J" g7 Q) Q. o! z( g- k2、示例: g7 j/ L' t5 h1 t' y) Q, X
; i$ ~6 r9 z  M. M0 `, p; L
//获取飞机信息、云台信息, J  I& g. U' I7 V2 O/ z
    private void get3DLocation() {. f2 Q* i- D0 [4 R- ]* J
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
2 w! O; a& `% [' z7 N; F$ I  n            @Override& m6 A- i& Y6 h; E3 p1 w0 y
            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
" L  h* Z* M0 c. q5 x                if (newValue!=null){# o( U3 H4 T/ F* v# d
                    lat = newValue.latitude;+ z9 a5 {7 x/ y& G7 C4 U7 ]
                    lon = newValue.longitude;
: _% n+ C/ n( U% q+ V% m1 b  N" s                    high = newValue.altitude;# ~9 U# w8 r& L6 w  J% I4 J
                }/ D/ l9 y! V2 @! E6 l
            }( r; Z& ]! N3 T+ j7 \/ i
        });9 y+ K; ?5 ~8 u5 t7 e
    }. [/ E) o0 X" }" N* G
    private void getAttitude() {+ i  Q  g# e7 B: \5 ~
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {' J8 g1 i0 B/ I
            @Override' H4 d6 M4 h5 q) @6 m1 n* X
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
& ]8 M# T9 Z4 B9 t                if (newValue!=null){
& k8 x) Y7 d; @  ]: C3 |: j                    pitch = newValue.pitch;; h, n2 d( F* Z
                    roll = newValue.roll;
7 m) @0 D% G8 ~: k                    yaw = newValue.yaw;
' y7 z( I$ k* y; @* n! ]                }: y/ h3 N/ N& Z6 L
            }) d2 Y/ `- E" ~% W
        });- z  }9 j( Z/ L' {3 h& m4 d* ~
    }. _$ g! t1 N( i! v1 X8 j6 G
    private void getVelocity() {; O7 ~9 a0 C2 Z
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {6 `* Q$ V, v) s. M- f# c  a4 K
            @Override
2 c" P/ i$ z/ x* j) D; ?            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {8 L5 N/ z5 M7 q8 }
                if (newValue!=null){
" R3 L) N* t6 b+ `3 P! T2 g" P6 I                    velocity_X = newValue.x;" {# h$ E# u& a" |4 }2 [9 c! g: N
                    velocity_Y = newValue.y;" u& K7 g5 o* x! m
                    velocity_Z = newValue.z;
( X; B5 Z: Z2 g1 {                }
( @1 Z6 y; v7 E" z( P            }* {0 ?8 I) t5 t  N8 k  D/ ~. {
        });
5 \  Y5 V8 g$ ~) Z* Z  c    }
; w- O+ `2 S5 V+ ]    private void getIsFly(){: n6 H2 }: ~3 m* `9 _& N- Y5 ]
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
8 L# a. W* g" E# v. ?% y2 Z2 c            @Override
* W1 H8 z' G6 {; t) d* L6 }            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
3 q2 Q( `* U& k  Z  m1 V  m                if (newValue!=null){5 q& @6 u7 l( u+ o' D) I
                    isFlying = newValue;
/ D9 b# I7 m% t8 G" ~" r                }
" W+ Y! l1 w) i, x% b, r            }* T1 N+ N  l/ Q9 _" U/ V' {
        });$ _; r6 Z; a* x2 H0 _
    }
2 c& |9 J7 W4 y" m    private void getGimbalAttitude() {
  J% y2 p/ p) S        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {0 M7 ]- n7 y& M+ _0 o$ J; t
            @Override7 B- U- T% ?) e9 M- ?' R, d; J
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {' G6 T7 H% v6 s' y, _" t0 K1 }9 q* y! @
                if (newValue!=null){" m/ h! u- A" i+ w: H* Y* z
                    g_pitch = newValue.pitch;9 m* v7 ?, o2 [8 m8 P! W
                    g_roll = newValue.roll;, Y. T2 s. g# F
                    g_yaw = newValue.yaw;
& n# B0 Z# c0 a4 y6 B0 n                }
# i* ]  J& x; a; R! Y0 w0 y' ]            }
+ P3 }- r. d: V        });
& w9 {& e8 T& n9 [2 @$ U1 b    }
3 [* p$ e7 M  w    private void getPower() {
1 ]9 s% P) G5 J4 g        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
& z9 G/ v( O7 h* D! H) B            @Override
" @( ?- d% }  f6 K            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {# M! W: ?& k2 b6 |2 d. W' N
                power = newValue;- p  ^) q* h) O+ E% k
            }
; `9 O0 k  N. @6 p; Y/ c        });# J" R5 U4 |2 L
    }
" w! H  i- x6 H! {$ b9 p- R    private void getTemperature() {
( {5 z/ `4 R. d9 F( F. T        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {0 [& o# s+ Y* Q! x6 ]
            @Override
: H+ n5 Q" j" P4 D/ e' ^, }9 v' x, R            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
6 X  J% ^& b, C( c2 g, O                temperature = newValue;
) D9 P% S9 P, E; F1 p: Z: V# s            }' y. }: S! g. b+ x
        });6 }$ f! g$ R" I0 u( `9 O# p
    }' Q" l1 w/ y3 [1 s9 f
  • get3DLocation()方法为获取飞机经纬度信息。
  • getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。
  • getIsFly()方法获取当前飞机的状态值(是否正在飞行)。
  • getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getPower()获取飞机的电池电量
  • getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;
    & H6 H. C9 Y) x
    * x$ p2 I! d8 o9 @& i

    9 {% U- V9 \: `, ^  w: }0 |2+ k: u' u" H- a, h$ r; |
    多媒体使用
    0 m: h9 M; r0 N& l6 e1、Sample介绍
    ( r) w9 N1 r5 q7 E! f, p0 @- d, M: L3 G- o5 m0 k* s/ J
    拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
    ! }) o9 [3 U" L6 ], a. p$ t下图为完整的接口展示以及接口调用流程示例。
    ) _$ ^) N9 C6 j: Q: P! R  v
  • 多媒体文件管理调用流程
    . V/ J; }, m" `5 z! |/ Z

    42d22urinq164025006129.png

    42d22urinq164025006129.png
  • 视频文件播放调用流程
    2 u- f3 K8 X; h% q9 E; ]
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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