电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

840

主题

840

帖子

6491

积分

高级会员

Rank: 5Rank: 5

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

dwrd0tpgczs64011345511.gif

dwrd0tpgczs64011345511.gif
4 k0 T& v9 @4 S7 i- w
点击上方蓝色字体,关注我们9 W& T( }: G4 N, T$ d  o& p

3 Y! @7 @* X/ {- E( U$ y# Lv5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
+ ~, y( g8 R0 i( t3 L2 [4 S1
2 |$ f! d4 I% U' `1 L6 L获取姿态信息- v' q! f8 l8 x6 N( n# F1 h! b
1、KeyManager调用. c$ I  V" q  |9 ~. A" A

1 h6 d# y( q) j* T. r/ K* P% i% q8 sKeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。
0 y; I! h' m8 Z1 E  h; A8 @& W% a下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。
5 j" V3 D$ E; v) }6 \) T$ ?

2w12odnv0sh64011345611.png

2w12odnv0sh64011345611.png

2 R. s9 n4 m; X( V此处是示例的操作方式,后面有在项目中使用的过程。/ M/ A; B1 g% u1 K3 H

/ R6 A% `  ^. @- I- N  Y2、示例% _+ @# D2 t; y6 {) b1 \
' @; u0 F. r$ k; D4 M: y- H% q
//获取飞机信息、云台信息: t8 J3 ~0 P5 @% ]- U" H' s. h
    private void get3DLocation() {& M9 i* k9 i5 w/ i! s
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {/ t! d, m& b2 q+ h# r, e$ H
            @Override
: ^8 N) c: k: K% H9 K            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
* {0 j" ]. S, A" H) K                if (newValue!=null){4 O2 S1 n9 [8 F; c% N3 Z' C! K/ Y* q
                    lat = newValue.latitude;" C. B' h0 @7 x  D
                    lon = newValue.longitude;5 m" E) C( N9 e5 X1 q
                    high = newValue.altitude;: u9 e$ A$ k) a1 H) m* Y1 @& b
                }
: V9 z+ G6 |% b& |            }- F2 A4 }  _. Y$ T+ ]
        });
. B  g- ]+ H5 @& Q/ E. b    }3 B- S( w" j! n" I
    private void getAttitude() {
* Q  I: d+ N( r) c4 ^% u- p        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {
0 H( X% t. ~7 n            @Override
; l* n" M# g! V; l3 E0 u            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
1 l# O6 c: t; O4 I                if (newValue!=null){
$ U& [! t  D( w1 A) L3 G. U5 h                    pitch = newValue.pitch;7 h0 Q- g* \2 ?5 L
                    roll = newValue.roll;, K' k7 E9 r# t1 Z, y/ P# @# [
                    yaw = newValue.yaw;
) \/ j; q! d+ v; @                }
- p* Z. ]7 X$ I. n; z            }1 Y2 e1 @5 ^8 _  S: p, Q
        });
7 h  }. J! k% j- d- w    }/ h6 z( ]: d; c8 `% y
    private void getVelocity() {
- ?+ \+ q9 y$ E- q        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
% Z. l! B6 {! @% f0 ^( R) S            @Override
2 E1 e1 V) `9 O+ P8 B' w3 F            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {' |" v1 n2 {1 O/ k* j  q
                if (newValue!=null){' s% c3 \8 E: \) \: A4 [7 f
                    velocity_X = newValue.x;
. h$ Q: g) w/ q; U                    velocity_Y = newValue.y;* }: h# q1 y4 _: ~5 f" ?
                    velocity_Z = newValue.z;  i2 ^+ W  l9 R- P& E1 R
                }8 d& w% {9 d1 x7 D4 {
            }6 y4 `7 i; c: Y6 Z6 n
        });
8 ]% A3 X, O( T. t    }3 _, E. H) e5 S$ ^: D' w
    private void getIsFly(){
/ L1 I7 [( k0 h6 W/ X        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {+ h1 ~& |8 I$ k, c
            @Override
. j0 T' T4 g1 |( U1 b# V! T- C. g            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {( k9 P  i% w( y1 X; }* y8 v/ O- z
                if (newValue!=null){
; Q# Z" s! L( O3 n6 I                    isFlying = newValue;$ Q% C7 F+ b: D! C7 f# q
                }
1 H- E: J$ \6 ~' `1 d2 d            }
: `& z( Y1 [# G$ A! c  h        });/ A/ H2 R# s5 i$ _( h  E
    }
% `  [8 c' {: |    private void getGimbalAttitude() {* `3 ~; |+ o1 v( g
        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
7 P5 F' K# U- S0 S: t            @Override) B; z( r4 @$ g9 F" U
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {, J/ x2 o! t. l$ X% T
                if (newValue!=null){
% R, y8 S, g. }7 V                    g_pitch = newValue.pitch;
+ a8 V5 |1 S# p0 y/ Q                    g_roll = newValue.roll;9 ]1 Z$ l# \& b
                    g_yaw = newValue.yaw;% V. O" m3 D6 C% G/ U+ X! W2 f& H
                }
5 b/ K. A3 X' N% r" ^% Z            }; g: |& ?7 ]2 G; r+ F+ K: h, H
        });
" L; i2 S9 }' x+ g/ c. ^' N    }5 h* G6 T& X2 J6 I. Z& M
    private void getPower() {1 L8 [/ v' b' w: ^4 B0 N
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
& `6 E) J) z/ t            @Override& b' ^  G7 z: Z1 L6 y
            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {* F# Y- C+ u: O& q* E+ F
                power = newValue;5 N0 I" N+ k. [* b  b
            }/ K8 T4 z" ]% P9 B
        });5 t0 }& ~! V* K( f. ?+ f; X
    }
. \7 b4 p' P3 w, X    private void getTemperature() {2 H, U1 D- {1 W1 |$ i  H
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {( D0 b+ j/ e. I1 s9 j9 ?% U3 {2 ^
            @Override; n* p  g6 u. p$ d
            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {% o6 S; N1 u' W
                temperature = newValue;; `5 j, w0 J* u+ |6 O' m) q3 Y
            }
0 Z' m, u/ y- U( w! v: B1 Y! m        });  ~" P8 `. S& G7 P& B, [
    }) G( n$ Q% p* I: S) c5 \  C- K
  • get3DLocation()方法为获取飞机经纬度信息。
  • getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。
  • getIsFly()方法获取当前飞机的状态值(是否正在飞行)。
  • getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getPower()获取飞机的电池电量
  • getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;
    ' l* w- T$ `5 d0 Q* N2 b: C
    6 u# P  S+ p" i; L
    * I$ }& i+ Q; W% H2 ]8 p: D: F
    2& y8 r  k9 A3 _/ s
    多媒体使用9 |1 [+ o  O/ m. R2 S  O, O
    1、Sample介绍
    : z+ R) ?3 w8 ^
    . i4 k+ l6 O- M5 N# F9 V( p  v% x拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。2 A* z( i, Z% \  q- M8 U
    下图为完整的接口展示以及接口调用流程示例。. K( f2 r% u5 ~/ @# X) v
  • 多媒体文件管理调用流程
    - t: k9 h( U9 m; m6 {0 A

    twj0cie00ta64011345711.png

    twj0cie00ta64011345711.png
  • 视频文件播放调用流程7 g- L" \, U% e3 q
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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