电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

397

主题

397

帖子

2457

积分

三级会员

Rank: 3Rank: 3

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

u0dbekljdzp640339230.gif

u0dbekljdzp640339230.gif

1 f) g: K' w' M* x. n- J点击上方蓝色字体,关注我们
! x5 }& m3 A+ `8 ?
% B- o/ j# y2 A0 f5 Y: xv5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
9 e. ^  p0 t# @. |1
  b; i9 K) m4 o" }获取姿态信息4 j' c: i5 g2 m3 I% b0 g' \4 Z" x
1、KeyManager调用1 `: U, P: u; w* b

% |8 M0 [; {$ m. a( iKeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。9 ]* \" W. f: ^3 m9 [
下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。1 x. S* b4 N  q+ p2 w

5iqpab3kvyg640339330.png

5iqpab3kvyg640339330.png
6 [# j9 a& Y, t
此处是示例的操作方式,后面有在项目中使用的过程。9 e6 _: F/ Z9 |

; T( Q  v& F" S% z2、示例* f; j. q8 g8 w7 m; o7 `

' P. s/ }* O  `( o6 \% Q- |//获取飞机信息、云台信息" X, Q( ?8 a$ C3 }. t
    private void get3DLocation() {
# d) ]+ @! _! {5 ?2 V8 \0 d        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {7 n6 C( f8 u, Q, d5 R
            @Override
# E& ?. u0 D/ h8 l$ x6 P+ {            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {9 R, l) ?% E' m: ]$ P- F
                if (newValue!=null){
2 E4 o3 g5 [4 k                    lat = newValue.latitude;! f, D/ p' F( s0 H
                    lon = newValue.longitude;
6 k) W$ B8 u6 z                    high = newValue.altitude;# T/ M1 s- |) X# i/ g( V
                }0 B# `6 |& E* i. Q% g  M$ ?
            }
4 b8 V" ?3 t0 q+ W4 ^        });
0 Q: ~+ Z9 q$ Z7 q; R    }5 p0 y3 b3 J: D, X; ^) ?
    private void getAttitude() {5 k# v9 A# R9 w; Y# I% g
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {
- ~! _8 w- N: z# w2 M0 K9 }0 o            @Override
  F8 l. c& C1 \3 V, f& X            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
0 @# q5 b! h3 h6 @                if (newValue!=null){
* S/ o) a: U* s, Z8 ~                    pitch = newValue.pitch;
  y" j  ]4 B* d. \% b) g) m                    roll = newValue.roll;* l" X( C( E0 z8 S
                    yaw = newValue.yaw;* }+ r5 A0 x- i7 R" Z0 Z; g
                }- y8 T2 A# C7 L4 l& P" i" ^) h
            }
! n* M, k# X( Y/ m) ?        });
- y+ _* i' f- f5 |% C( @    }7 s9 A& x: h- ]; _: `: K
    private void getVelocity() {
! A# @0 ?+ R6 @        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
. ]" D# E& \4 V            @Override
+ D# j* j+ j: @; L# T            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {- s) e8 k/ E& r( H* @* h
                if (newValue!=null){
9 e7 }3 D+ g) E' b                    velocity_X = newValue.x;
1 m% p# Q5 e* T5 Y                    velocity_Y = newValue.y;
+ d' v/ G$ F1 |, a6 l6 e                    velocity_Z = newValue.z;; |8 n: J1 W) x0 ^: ?
                }2 m' Q" ~3 D$ O4 o
            }
( e# E3 e* o# \- j2 T# j        });
3 y; q/ w/ u1 y6 w4 G    }
7 H2 }. u& C. F) R# P    private void getIsFly(){
3 s; z, h7 J8 V% B. G4 v, B        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
- N- i6 P& J# N3 z7 ?5 W& T" N            @Override9 ^" e; N( T, f/ t5 M
            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {6 J. F* M6 E0 x; I( X
                if (newValue!=null){
& W; s# j) _5 _* q1 g# A3 `0 P$ h                    isFlying = newValue;
0 I1 R$ A  }8 m' J0 Q4 V. Y% k                }( I4 V% M. a* P- M& h
            }" y  e; W: n- @( }4 m
        });5 P' c/ Z8 K5 Q+ n1 u
    }% z% \' q& W) i+ a+ e$ ]3 F8 U
    private void getGimbalAttitude() {. D+ L, c" f2 B+ V( S
        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
9 D4 A2 o% u% O' l$ S) T! m            @Override7 B, B8 @- F6 s; W- `$ K! T/ J
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
7 v6 ]/ i  Q% X: ]                if (newValue!=null){
8 g' u& U' I$ O- C- k4 ]: X0 u3 h' N1 R                    g_pitch = newValue.pitch;
8 x# a& z) B* N4 }4 I                    g_roll = newValue.roll;
9 a( b% ]. f& ]$ f  o9 k+ C# \                    g_yaw = newValue.yaw;2 b4 |. p) C8 ~; _
                }
+ l* Q6 ^% l- a8 d            }& z2 @" ]$ i. T" o
        });
6 R( r5 g9 G) a1 Y; N2 i    }
$ k, `$ X% S) F% A5 H    private void getPower() {0 d( p% Q7 m4 b# _
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
7 H' _- V% K# B# O4 S            @Override: h- D& R& {$ j% X
            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {: V. w, P; [. i9 {9 Z# r$ H
                power = newValue;
; k) y. y7 G6 D* G/ F! ?            }
( ?8 ]  b0 t: a  Q" N        });
  Z) @3 R+ o7 _3 b    }
  T  @+ }& G2 z$ p  o    private void getTemperature() {1 W' Y9 W! d+ X
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {
3 E5 J: c* I9 Z, O            @Override2 A: ~7 f* M' i' ?8 ~
            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
2 l% p+ o  V3 T/ N6 a& Q1 Q                temperature = newValue;
7 b3 S! c8 H  j! T: C            }* o2 o" I, Y* W
        });4 a3 ?( F2 Q% D  P0 y; @7 w: F
    }
; x/ ^, N# O( S8 N
  • get3DLocation()方法为获取飞机经纬度信息。
  • getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。
  • getIsFly()方法获取当前飞机的状态值(是否正在飞行)。
  • getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getPower()获取飞机的电池电量
  • getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;
    5 P- W( \; m2 n6 S6 D- ]+ i  \- Q

    " L7 u. L9 w6 a8 E/ B" C
    + R& _3 O$ M/ M% b- o: L( l2
    1 G8 A' e  |; m1 q" x多媒体使用/ f2 A8 ]. V3 Y7 H2 q
    1、Sample介绍
    5 C( ]; {7 Y; W- M, R, |$ {# N& J8 v) ~: [
    拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
    % w* ?' J. S! [& C8 D$ Y下图为完整的接口展示以及接口调用流程示例。7 R* K( E6 N1 T4 e3 }5 H5 t, N
  • 多媒体文件管理调用流程
    9 W: }# o0 i; P) \

    fyfccoh3yao640339431.png

    fyfccoh3yao640339431.png
  • 视频文件播放调用流程: l4 H3 t. ?# d; ]! V- s" j: |* l  N
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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