电子产业一站式赋能平台

PCB联盟网

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

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

[复制链接]

1001

主题

1001

帖子

8805

积分

高级会员

Rank: 5Rank: 5

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

ur4rfcigipz64025005929.gif

ur4rfcigipz64025005929.gif
: h" S8 Y1 d$ M& k1 s) ?/ }& s  L
点击上方蓝色字体,关注我们
& s) U% Z( e% C& S3 i7 A2 S  E) c' n; w/ F
v5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
% _$ y  _% \  [1 c5 }5 U2 E( c1
/ }2 j3 ?) A1 H$ B获取姿态信息
7 U# H3 \7 `# e$ o/ h$ W1、KeyManager调用% S& V9 }' L1 y; R! I7 O7 ^

3 ]# E! I' [# c; oKeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。/ w5 h8 ^$ L9 }$ Q8 [7 _
下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。. H0 m" R- ~1 q! i! d

syxjjgb0l2064025006029.png

syxjjgb0l2064025006029.png
! v; \, t: v9 h& p* y) B0 g# E# f
此处是示例的操作方式,后面有在项目中使用的过程。
$ f& J* _  I( ]  V3 Z# ~1 Q8 M% |8 j6 V5 T. B
2、示例$ ~& B0 l1 E% ]# J6 v3 B% O; J

1 N: Q9 |" N0 O' i//获取飞机信息、云台信息
& u. R* o$ L9 }5 G    private void get3DLocation() {5 U6 f) {* l+ j2 m8 i4 S# |
        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
, W6 ^) U3 d/ `0 \8 ~            @Override; t- v% n6 K- @1 o2 U& I) J& v" Q
            public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {1 I* h/ A% I4 f+ p
                if (newValue!=null){
6 P, w! k" d, J' r                    lat = newValue.latitude;, S* [0 a. M. W. ?" p5 u
                    lon = newValue.longitude;
0 L" ^3 P  c1 O                    high = newValue.altitude;
$ }6 g; ]* T' G9 a: ~* C1 A- |                }
- A* C! V' r# ]7 {; M            }
" y; Z  W5 O% k  x, w        });
- M% a9 q' X* E  V6 h    }
4 T4 H8 x! h. s6 Q    private void getAttitude() {
8 s2 X% d6 }" t) s% J        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {) [5 r; T$ t1 y. Q
            @Override
& |  r& V+ b, j; M1 j; ?  J            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {- Q* m6 u' H% c+ Q+ c5 d9 u2 n
                if (newValue!=null){% {6 [6 e3 x5 @6 k
                    pitch = newValue.pitch;
5 X+ T- V. ^$ y' H2 ?9 X$ [                    roll = newValue.roll;
; [4 Y1 F2 k7 ?8 {* Z# g2 x                    yaw = newValue.yaw;2 {* Y) s2 o/ Z( m
                }
9 R2 K& m4 r' I$ i  z2 B+ H" R! b            }% [# e) {/ }9 X, m. K! {, E, t
        });
+ O8 n% N; S' L- U    }3 ^' Z& f; ~/ `  G& V
    private void getVelocity() {
4 i% \& e3 @2 l3 ]/ y        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
7 z- ?% O6 X2 [. o            @Override
9 E& C- c5 }- G+ u5 e5 u3 o            public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
! y) d/ L* v* v& L/ V% W                if (newValue!=null){$ z: a# G# q, @' K' k- @
                    velocity_X = newValue.x;
3 s5 z* L5 s! a                    velocity_Y = newValue.y;& E5 u$ b+ y" o- D, b, w
                    velocity_Z = newValue.z;
/ w' d. X6 j0 p5 I  D& s& H                }
/ v, N' D9 {( q0 ~# h1 I            }7 z; M3 u$ F9 c+ z4 \" x( |
        });  B7 M5 I& h* t# {' \4 R
    }4 W2 d( b1 O" Q) s/ I4 p" t( V
    private void getIsFly(){
& A# E2 M' Z% v$ W        KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
' i) W, N. a5 A9 R; M* J  K+ f            @Override5 q) M9 N6 ]' M7 W7 m2 P8 g( t
            public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
1 Z1 I2 O  E- |$ T                if (newValue!=null){3 V) r, l5 ]: p. m7 A
                    isFlying = newValue;
& R* M. t& T7 _. e; |                }
7 z* L0 L! M0 F2 U4 X# s4 k            }% d% `  ^3 L8 H; {" Y  G# e; t
        });
4 F+ A' D1 f8 J4 q    }, C* _: n4 Q1 v6 a
    private void getGimbalAttitude() {
- g6 L: z0 J* W1 K+ j3 u7 s7 X        KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
7 y! C8 j" E, g            @Override
4 G9 A- y1 s; b3 ]* z            public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
  L+ ~/ ^6 Z$ Y; S                if (newValue!=null){$ u1 m& c$ E1 }, u3 `1 F+ R  A/ v7 m3 B
                    g_pitch = newValue.pitch;
3 {/ j  D  L8 A5 Z# i* X                    g_roll = newValue.roll;
7 A+ C! S3 l# T1 }- f% u                    g_yaw = newValue.yaw;/ n; ]% a$ W3 N' C
                }3 a7 M* p6 N4 |5 Y- _3 H' M
            }
- D# g% I& T- s# |9 W2 t        });
1 W- P: I5 L+ f5 k! Y! `% u# u2 b    }
2 M# M/ f: m: O# H    private void getPower() {, |' s# L  Z! w, m1 a9 F/ n! L" E
        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {2 {# Z/ S; `4 M6 p. I9 {
            @Override
. D5 |7 q+ p3 g& A  a9 }# l% Y            public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
4 s* f! s. X8 ~' c                power = newValue;
) f$ F* u: ^- Z* ?            }' b+ b) ^+ I5 ~& q" o( |& k
        });
% n+ T  W0 e" B  D& Q# X    }
+ a% l* {/ Z- e. F    private void getTemperature() {
- p4 r8 H( {- S% I7 X1 ?. ]        KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {
; }& F0 m( I7 k3 M4 B            @Override
( h" \# y, f; N8 M1 D3 S3 L8 M            public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {: V9 o8 |: P( o. P. ?: x! e
                temperature = newValue;
. c% L, b$ x: i3 K            }
5 A" U' X. U0 n& V/ z6 ~        });) @/ f( ^$ a0 T4 x3 _2 l
    }( K7 T! A, w3 @% a/ L# r
  • get3DLocation()方法为获取飞机经纬度信息。
  • getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。
  • getIsFly()方法获取当前飞机的状态值(是否正在飞行)。
  • getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。
  • getPower()获取飞机的电池电量
  • getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;! h- }0 \1 r% A8 f/ I9 i
    8 ~' N' N: b; J. R$ I& w( ]: ?

    " N3 V1 R2 Y& U' D! N2$ ]6 w8 C" o$ `+ d7 s4 z2 P
    多媒体使用
    ; c1 Q6 H9 G" Y1、Sample介绍1 M, M; x) W1 V/ N, \5 X
    " z) ~- I3 L! b# Z$ ?5 `. E! E5 s
    拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
    ) P" e/ o  l! @! m' I下图为完整的接口展示以及接口调用流程示例。* `8 t+ Z2 }# C$ [! P: `
  • 多媒体文件管理调用流程
    6 t# N# S0 l& z, k3 E& b/ }

    42d22urinq164025006129.png

    42d22urinq164025006129.png
  • 视频文件播放调用流程4 N7 U1 F: e5 @/ i1 o
  • 回复

    使用道具 举报

    发表回复

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

    本版积分规则


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