|
d5kqz13hmwm64023070118.gif
& F4 S0 H: `: U6 N点击上方蓝色字体,关注我们
6 V) b) ?( o# ~+ v3 Z7 q) {: I: @& e* x# M' k& H* \. U
v5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
& |% X- l" {9 t' i% K9 V1# T9 \$ e0 _ ?+ J: \* L* ?% f2 [
获取姿态信息
' o8 `4 ^6 z1 L$ Z! m1、KeyManager调用: g3 ~" M4 {6 ]. E: o+ l! X5 w3 z
0 V: }$ `" ~6 @7 I7 y1 g v) _1 nKeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。
$ s. `3 k) W% _- s, a7 k( a* K) F- r下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。
$ R1 y7 Y7 O8 x
1hygojudocf64023070218.png
$ j; `& K; \% p$ D
此处是示例的操作方式,后面有在项目中使用的过程。5 y! F& |5 |6 b6 P, n" L* b
) Y1 _4 H) r2 B1 A
2、示例2 E+ h2 _* r3 v0 n$ F' b
+ k' X# ~5 A, k1 i2 E7 ~- z7 R7 ^//获取飞机信息、云台信息
+ w+ ? E* _! Z; q9 d y+ n ~; V3 V private void get3DLocation() {& M6 {. x4 t' j# a& W
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
% S) V" d. |: v& F' ]; W @Override0 [) R, N$ \1 [. S' R
public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {3 _7 J$ A5 G% }& M! N* n
if (newValue!=null){
B5 L+ p! K* j7 U: s Z lat = newValue.latitude;
; H3 I& _# x1 r* N" r! Q+ h& L lon = newValue.longitude;( S5 C5 M; `: O& N% V7 `6 Q6 A
high = newValue.altitude;: n0 K& z% k: D: q3 h% v9 O: v
}% ^$ n& R" L3 B* G
}3 n2 k/ L9 D+ D Q! ?5 F7 h
});( \6 C# k3 |/ ]! N
}7 Y% [' t8 `) |3 e3 M
private void getAttitude() {! W* |& N9 S: t0 b
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {4 p# e! |. _6 N* a) ?3 p
@Override: s- t1 c9 M1 `: J
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
V3 q- J( a% g, j, q/ M if (newValue!=null){' l! e7 M( n1 K
pitch = newValue.pitch;# \* P& D* I; T7 D/ d' }
roll = newValue.roll;# i; P4 r6 u: S1 W& |
yaw = newValue.yaw;
, b# R' R& Z7 x: U L }
+ T: Q# G% q+ F1 G/ p, o5 E } S* @. U. S/ I; u% n9 W7 Y W) s8 A
});4 j7 E& p3 g) w3 R
}5 ]9 T0 I5 N: Y7 z! z
private void getVelocity() {
' a1 C& @9 y. _: k KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
[9 m, J0 z; x @Override
7 E: m v2 O7 t- t public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
) e; n5 b; M8 E h! a2 ` if (newValue!=null){
, ~/ [. G. f3 u* |3 R velocity_X = newValue.x;
* m; L- d9 Y) h1 I# w+ Z velocity_Y = newValue.y;
. y3 O1 n' w% ^. D( j3 S velocity_Z = newValue.z;
( D) i* k; H# B9 P Y) r }
" Z# i! d& X) V; k }: ]% `1 U: U2 X' J8 r/ n
});) f7 S% S2 Z3 h; J
}% u/ V1 j5 n* e( L) L6 M
private void getIsFly(){. O$ {* `( I8 W/ C! [( s
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {4 S Z1 Y6 [" O6 G9 d: t
@Override/ e1 E: ]0 y# n* E/ V& R
public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {+ q- P) P2 J5 J3 F
if (newValue!=null){7 p6 p# I: U: a; T$ C
isFlying = newValue;
4 H! K3 X1 T7 G5 | d* I- D }
/ K2 c# b) f8 d! L) w4 k1 M# V }0 b7 h+ ~. }; T% t) S% N
});
: ]3 q3 w: t; v" j% ]- Q! o+ ]$ a: K }
: Q6 l6 P9 Y5 w1 O/ ]- m( \3 L3 e private void getGimbalAttitude() {+ P9 D6 U2 R+ B( a+ X, L
KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {0 u$ U+ G" G/ J( X1 |
@Override
2 V- T7 h2 V. a. h$ J; ~ public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
' v m4 k1 D: N% h1 J if (newValue!=null){- w( P4 s( n0 O- K) s; p; y
g_pitch = newValue.pitch;
' V/ h4 a w0 b3 ]4 f% m g_roll = newValue.roll;
6 u( [' C/ m9 d/ n g_yaw = newValue.yaw;
! b1 ?/ i! C- Y9 h) T7 l1 r }2 |! u* w7 B! L0 }) i1 A" Z; C
}
$ j* v2 W+ I9 p% Z) W6 I7 K });
. X/ C( J2 B5 [" b& [ }
) a8 Y, K, v+ _) V2 g$ D! y7 u5 m0 H private void getPower() {" q* D E9 B- ^9 S
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {# e. O; |/ P2 i! }6 H& n
@Override
! K9 T4 J/ U2 \# q1 X public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {& y; f3 r0 j2 Y9 ]' Q
power = newValue;
8 i1 I* P' R) C2 _! M& F, J# [ }8 A' Q. D5 R& o# Y4 p
});8 d8 }0 M/ ~+ q) [5 i
}( |/ u" `( J. t3 R
private void getTemperature() {7 R/ k8 p& I' V) B4 F" N) I% K, v
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {3 o" B! k# @# \* I9 ~
@Override/ K! J* C1 n, h* Q4 i; [. C
public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {- Z- W; t( U: o5 n Z9 \, T
temperature = newValue;
0 X& N$ B( k8 g4 X j( R }0 {: Y( a2 ~7 i/ b/ S
});
# N( B# V4 J- V }
+ R+ W1 y+ D# {# L/ G( l! t; Rget3DLocation()方法为获取飞机经纬度信息。getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。getIsFly()方法获取当前飞机的状态值(是否正在飞行)。getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。getPower()获取飞机的电池电量getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;
9 F* H! @! v! Z" o) M; G) \
6 I0 ~! x, D9 S5 s
% F% I4 t4 U1 m1 D0 _5 ~' N; X20 L% l8 q3 P4 g! c3 e% b7 n1 y# o
多媒体使用! h/ Y( f/ k& ]" h5 F: T, K
1、Sample介绍
( B0 e( W+ x# q+ p- k% {) @: f) @" [( X9 F
拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
! r. j5 y; N# C! g; Y4 m5 ?* E- ?下图为完整的接口展示以及接口调用流程示例。
) p& M' l/ E& X7 {5 o4 a, c1 D多媒体文件管理调用流程
9 {/ W- I8 v$ o; B. d, R
nx0bv4uu1dw64023070319.png
视频文件播放调用流程# Z& N$ d7 j$ J. v! U( t2 F
|
|