|
l1vvqf0vb4364018791618.gif
1 n: ~+ l5 i: C9 L" _
点击上方蓝色字体,关注我们
$ Z I0 z' _/ c4 F; y; Z" b4 R b. s% Q3 ^$ J7 v$ ?5 Y& p
v5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
' I. N. i9 t( K: W. Q3 ~8 ~2 H11 R" V* L$ R5 b" S1 V* i! g* j
获取姿态信息7 f7 G U- E7 N; p, K( \
1、KeyManager调用
- G3 h' G6 \% Z- P! Y7 _/ j4 Y$ M& [5 `$ J/ Z' E
KeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。
) @/ X$ H4 j* [! s: h, W8 P下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。! D1 t5 O7 y+ V( I$ I5 p+ p
pc3pusun01464018791719.png
0 a3 J. R; Z5 K4 L% W3 r' u8 N此处是示例的操作方式,后面有在项目中使用的过程。3 O9 y& e+ D( s& a
' D7 `, I6 I5 [7 T2、示例! e- P/ a/ e; G% ?# \1 i
g# O, y: ]1 j) N
//获取飞机信息、云台信息! ^; b" j$ K# Q* p" \/ D4 m" @; g
private void get3DLocation() {
& k; {& U7 x# z) O KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
0 V# n9 j0 m( D, @ y/ W2 r @Override# I7 _8 P. p6 }- i' p1 V- h
public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
5 H0 X: y- _3 A3 |5 b6 W if (newValue!=null){
5 F. t$ L6 [ d& K3 O lat = newValue.latitude;* ^. d9 k7 e6 u. L4 S, p7 c1 X
lon = newValue.longitude;, e' `+ b6 l9 k% `# S
high = newValue.altitude;6 Y/ i5 ]$ v8 m7 n6 v% o
}; U# [. e0 ~6 R+ f6 c
}" X# n) i* i: Y. ?/ p
});- u9 Y4 A4 e, N3 a" J+ ?
}; E7 [. H2 R0 n; d, T+ Y
private void getAttitude() {
1 h4 Y/ _1 E% q, D8 D KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {# d+ c& V+ L4 E$ V `) Z
@Override
$ m' n6 P j0 ], y. O2 r( v2 u8 @ public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {5 I% j/ i* b/ d3 q4 v$ G) h/ L
if (newValue!=null){
' `! n1 b3 q1 Y1 }( U5 ]# \ f pitch = newValue.pitch;
+ x8 B: D3 C" x- J7 s- X roll = newValue.roll;
; @8 u4 C0 ?$ c# s8 O% N; a yaw = newValue.yaw;- `! g C; m- e- p6 N5 i
}
$ N+ |, a3 L" ]$ ~; Q9 @ }
5 A0 Y2 \- E" D# T" K });* e) t. Z6 _5 p0 k' a& @6 s# w
}) K0 p$ c6 ~- L: {; f+ f
private void getVelocity() {
) E$ p6 g( o' @ k/ _ KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {- L, I- [$ b2 f" ] N1 A' X8 Q2 _$ X
@Override
6 t" }" i: A7 z+ R! k( _ public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
4 Q' x4 a. F0 c; b5 \ if (newValue!=null){
3 g; v5 u D4 E1 z# f3 W& h- V velocity_X = newValue.x;
" l4 }0 U1 f2 e4 G velocity_Y = newValue.y;
: u/ S ?' @9 a% s9 k) e velocity_Z = newValue.z;
. ]7 K7 s/ H0 A2 V. W }- A9 I% P( N7 D3 `
}9 x) Z* w$ `/ f8 [) ?! H& D- U: h
});
( v% v b6 ?+ ?! B& w }( r+ Z7 |7 E/ A+ E \2 l F
private void getIsFly(){, x1 ]& u5 U6 C1 P* G7 l2 m( _7 q
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
, P9 u0 A$ `/ F& _: e @Override' I# W; |4 C O2 d
public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {# g( _. H# t6 D( r" f
if (newValue!=null){0 p- h% z6 J/ a* s" [- p& ?# z
isFlying = newValue;- L1 R" b6 Q# U* V7 }) s5 k% S
}
* G7 d" a' U8 u8 W6 c: i& N }* n9 M' p6 s. Z# M) b. d
});
+ Z( y$ O4 [. d5 t }0 U) ^7 s7 B8 R' D8 `: {: T
private void getGimbalAttitude() {: O" R- h. e+ i6 P3 p2 ~
KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
7 b6 T# X, B3 R4 [- r7 `. V @Override
8 B9 q& y4 |% X8 d public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {0 D z8 a- _3 f# ^" V; b8 ]$ w# Z
if (newValue!=null){$ J2 Q0 o; W9 v5 N
g_pitch = newValue.pitch;% F9 b( U% p* |; X) w# O
g_roll = newValue.roll;, K P5 ^8 G. _8 W8 u i
g_yaw = newValue.yaw;- U3 t1 G5 r" [; G& {
} `: a; S6 Y; n1 r
} M9 A/ |: C0 A
});/ y! ]1 B) Q6 j& e, D
}9 k0 ]7 P' d k' ]3 p' p7 n
private void getPower() {# g- k9 w- u, p- D! z) m$ z- q
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
5 y3 N/ K; f) |3 b) s# Q @Override4 V; h9 B4 l: d r) n7 O f
public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) { {' R+ v' `2 z6 `. q, z* e
power = newValue;
; u4 F) A; r% I% H6 Y' A }, ]% `4 B: J6 _, S' A
});
' Q, m6 p$ `! C! ]3 b5 t) ]: @ }3 J$ q$ j: E0 ~$ K' W) D6 B2 n
private void getTemperature() {- E2 ]7 ^) ]0 d+ z7 g4 W: o
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {
. i' W7 S2 z- e- ]" x0 i9 d @Override7 x) s( {6 _1 g
public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {) G. s2 I3 X: S% a0 S
temperature = newValue;7 i. ^/ n7 C ~2 ]; h! X2 P
}6 _! F. f$ [7 q* k( W6 B
});( D4 e: v" C9 V% m1 e
}" d2 W7 c. o7 E
get3DLocation()方法为获取飞机经纬度信息。getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。getIsFly()方法获取当前飞机的状态值(是否正在飞行)。getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。getPower()获取飞机的电池电量getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;
5 e6 q% b$ |! r5 C" j, d/ s/ N9 Q: C8 r. I9 J% H* q* @/ \
. ~2 D. C* ? l4 I H2 s! H
23 B4 ~3 _' C! J
多媒体使用4 } g( ]. {7 w2 R$ T0 _( s
1、Sample介绍
8 R. q/ e- ~5 ?# X! b6 V$ f" }; E1 y; P5 [1 d* _9 r6 I
拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
: O0 n, N1 e1 f A5 i" l' p$ k下图为完整的接口展示以及接口调用流程示例。
8 X6 Y" Y' N* {: i5 @多媒体文件管理调用流程" ~8 a. j- k3 T/ U+ h
ln5lcvw2imq64018791819.png
视频文件播放调用流程
- `' }% B' f3 K' e% ^ |
|