电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

1047

主题

1047

帖子

9726

积分

高级会员

Rank: 5Rank: 5

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

z2wzubp2str64015942729.gif

z2wzubp2str64015942729.gif
& I9 Q1 ~! p% \, }
点击上方蓝色字体,关注我们
% ?4 C1 |+ w+ {. O) c+ G
9 G3 }; o+ ?6 D. X' qv5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
& B1 f6 [  N2 l* T1
: k- J' \2 K3 m. i0 y获取姿态信息, u# B. F/ N: B
1、KeyManager调用
& m9 h2 G+ J* [) k* X/ p) x- D9 ~6 E2 f" _' r% b
KeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。
3 s8 }. i, O$ o" r8 o, o, v下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。
5 W2 N1 R6 X2 b9 n

vccaqthutua64015942829.png

vccaqthutua64015942829.png
$ V: v9 d' P' h, O* E
此处是示例的操作方式,后面有在项目中使用的过程。
. {, v8 |7 E4 A
: W# ]' j" q) _; R  I/ g. o0 n$ u2、示例
$ n9 J- X  {' G+ p: e
+ y4 q$ v1 x* P" ]9 A. f//获取飞机信息、云台信息0 V9 L0 M; G. B" ?' l' G+ }
    private void get3DLocation() {. B5 Y9 |# U) W1 n
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {& _, b8 V( j" h9 d1 q- v
            @Override( G- {# ~  `, q. F2 q4 a5 r
            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
  C) T1 q+ j3 Y) x" Q                if (newValue!=null){$ Y( j9 Q4 }* b7 v. ^, m: g6 F' ?
                    lat = newValue.latitude;
( V0 S3 t4 M6 o1 X7 a5 K8 j                    lon = newValue.longitude;5 q3 U+ D  m0 B& g4 ~5 q3 i
                    high = newValue.altitude;
, c! F7 u; }$ k4 F) ?; X& i                }
: p) e  ^# C1 D" }0 M            }
# O1 ]; h9 Q8 ]+ }        });
2 q# k( L5 d: M    }' c& ]  Z) A4 a3 h* F  T" h" T
    private void getAttitude() {
8 a! e1 n" n( ^% E6 u        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {5 {: P, M$ q4 Q2 G
            @Override1 R! d5 x4 V* J7 p/ D
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
7 J( Q' _* h  K- z                if (newValue!=null){
( e! G: a4 p3 l  r4 }/ m' A                    pitch = newValue.pitch;
2 u( e* O3 t3 r5 q) I                    roll = newValue.roll;  q( i: y2 }# }+ t
                    yaw = newValue.yaw;
: ^6 U4 c; h! N2 i% x7 V                }# \/ m; Z% {: q
            }& i5 `7 d' n" ?. I! J
        });
& N' `) a) N4 w9 A% j/ y7 ?    }1 N4 @) |, A) \" s: Y9 O: a. G
    private void getVelocity() {
: {; @( t- n4 Q0 Y6 U. `4 V        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
' x" ?/ n& E8 X( A) ^            @Override: g# m9 r# e% u6 b3 [  p
            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
* u2 z! E" f7 S+ a: v% D. U8 {' V2 n                if (newValue!=null){: P/ X5 ?% ~9 J: x& `
                    velocity_X = newValue.x;
3 l) b) J/ y2 o                    velocity_Y = newValue.y;
: `  K; W+ \/ k% t# s7 \, Q                    velocity_Z = newValue.z;+ Z0 f) G/ b& {9 x
                }
# `1 O6 r. a* R8 J" V% n5 E            }
$ T& }2 O( A7 l2 H5 h        });
6 m: W5 f! ^* q0 E' Z# g" U, }    }
; Y1 f# d# s4 i& C4 t8 j    private void getIsFly(){+ H/ q- b( V2 U! |8 F2 H+ ?. |
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {! K  E5 ~1 o/ a9 {( q3 R! U
            @Override3 o1 P% N( x) y8 ^
            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
0 [/ N" g# @/ E1 z' Q% \; C, D5 C% B                if (newValue!=null){+ L$ I# k: U, v- a6 \% t
                    isFlying = newValue;- A1 w5 V6 L( b1 ~( d" z
                }3 ?& J0 P% M7 q: g, S7 q% p: \
            }
# h; K, ~% L( {* P6 b        });
9 D1 U+ I% ~" T" b; F' z    }( Z7 o6 [8 x( |$ S) }
    private void getGimbalAttitude() {& x0 L; ~% F/ h) _
        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {9 H8 }4 x  e0 g
            @Override2 T% R- s% H, r& ]( d- j
            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {- C9 G+ F- \+ X' p% s
                if (newValue!=null){
' v$ }: z9 u+ R" L                    g_pitch = newValue.pitch;
" A9 _/ s! \( O: x                    g_roll = newValue.roll;
' B7 x% i" s: f/ ^$ n                    g_yaw = newValue.yaw;$ x" I7 S0 G: T; V- t/ g
                }8 @6 R$ V/ k- O* p
            }
0 P* R- K# i' v# H        });
% [) {& F% }" m5 X  {% U    }
* T5 r. T* W% w$ W( [    private void getPower() {
% }. ]2 Z. {8 a8 x$ E& Z        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {  Q. y, G. D' @" ?2 b+ {6 X5 U, s1 z2 @
            @Override
0 W' m" e) o) ]% x            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
/ ^5 K) I+ C2 U7 r$ n; C, B: j9 }                power = newValue;" P/ F4 E: ~) `# U( ]
            }
3 C3 v  o6 V' A5 X7 V5 a9 v. L        });# c; E! o/ j' s% d
    }. ~- Z+ @2 l3 B, B; D3 |- E
    private void getTemperature() {7 C# }  Z$ {9 l% I. F/ {0 a, d3 \3 H; \
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {! o; b5 v1 x" F8 o8 f7 q7 p
            @Override  \; |8 ?* V5 K
            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
9 W# z8 A5 T  B8 A5 b3 e6 e                temperature = newValue;
$ j7 w4 G! x! |. Z9 ]% ?" ~            }
3 x1 v7 {7 S0 z4 r2 |        });
' M, Y) y& l- ^& t    }
6 s7 U* _' n3 |+ {) W
  • get3DLocation()方法为获取飞机经纬度信息。
  • getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。
  • getIsFly()方法获取当前飞机的状态值(是否正在飞行)。
  • getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getPower()获取飞机的电池电量
  • getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;
      v! Z/ g* r" P* v6 _5 a
    % j7 Z+ o1 `1 ^. D: y
    : x% G" V7 U; U" O" W
    2( w( u: t* C( _& y- n1 o8 [$ j3 A
    多媒体使用& s! O7 L/ ]+ U; N- T
    1、Sample介绍
    / s  Y, g- w, R7 |% s6 i' {! s) M4 _) N+ E
    拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。! c# z4 U" l9 @: n  d
    下图为完整的接口展示以及接口调用流程示例。
    + G  D9 _& r& X3 s* \* m
  • 多媒体文件管理调用流程& q9 H6 ]. w3 V& Y, h  }1 c; d

    qefw131ol4h64015942930.png

    qefw131ol4h64015942930.png
  • 视频文件播放调用流程  |( U% @6 h- L/ T9 a3 u9 r
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条


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