|
dwrd0tpgczs64011345511.gif
4 k0 T& v9 @4 S7 i- w
点击上方蓝色字体,关注我们9 W& T( }: G4 N, T$ d o& p
3 Y! @7 @* X/ {- E( U$ y# Lv5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
+ ~, y( g8 R0 i( t3 L2 [4 S1
2 |$ f! d4 I% U' `1 L6 L获取姿态信息- v' q! f8 l8 x6 N( n# F1 h! b
1、KeyManager调用. c$ I V" q |9 ~. A" A
1 h6 d# y( q) j* T. r/ K* P% i% q8 sKeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。
0 y; I! h' m8 Z1 E h; A8 @& W% a下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。
5 j" V3 D$ E; v) }6 \) T$ ?
2w12odnv0sh64011345611.png
2 R. s9 n4 m; X( V此处是示例的操作方式,后面有在项目中使用的过程。/ M/ A; B1 g% u1 K3 H
/ R6 A% ` ^. @- I- N Y2、示例% _+ @# D2 t; y6 {) b1 \
' @; u0 F. r$ k; D4 M: y- H% q
//获取飞机信息、云台信息: t8 J3 ~0 P5 @% ]- U" H' s. h
private void get3DLocation() {& M9 i* k9 i5 w/ i! s
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {/ t! d, m& b2 q+ h# r, e$ H
@Override
: ^8 N) c: k: K% H9 K public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
* {0 j" ]. S, A" H) K if (newValue!=null){4 O2 S1 n9 [8 F; c% N3 Z' C! K/ Y* q
lat = newValue.latitude;" C. B' h0 @7 x D
lon = newValue.longitude;5 m" E) C( N9 e5 X1 q
high = newValue.altitude;: u9 e$ A$ k) a1 H) m* Y1 @& b
}
: V9 z+ G6 |% b& | }- F2 A4 } _. Y$ T+ ]
});
. B g- ]+ H5 @& Q/ E. b }3 B- S( w" j! n" I
private void getAttitude() {
* Q I: d+ N( r) c4 ^% u- p KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {
0 H( X% t. ~7 n @Override
; l* n" M# g! V; l3 E0 u public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
1 l# O6 c: t; O4 I if (newValue!=null){
$ U& [! t D( w1 A) L3 G. U5 h pitch = newValue.pitch;7 h0 Q- g* \2 ?5 L
roll = newValue.roll;, K' k7 E9 r# t1 Z, y/ P# @# [
yaw = newValue.yaw;
) \/ j; q! d+ v; @ }
- p* Z. ]7 X$ I. n; z }1 Y2 e1 @5 ^8 _ S: p, Q
});
7 h }. J! k% j- d- w }/ h6 z( ]: d; c8 `% y
private void getVelocity() {
- ?+ \+ q9 y$ E- q KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
% Z. l! B6 {! @% f0 ^( R) S @Override
2 E1 e1 V) `9 O+ P8 B' w3 F public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {' |" v1 n2 {1 O/ k* j q
if (newValue!=null){' s% c3 \8 E: \) \: A4 [7 f
velocity_X = newValue.x;
. h$ Q: g) w/ q; U velocity_Y = newValue.y;* }: h# q1 y4 _: ~5 f" ?
velocity_Z = newValue.z; i2 ^+ W l9 R- P& E1 R
}8 d& w% {9 d1 x7 D4 {
}6 y4 `7 i; c: Y6 Z6 n
});
8 ]% A3 X, O( T. t }3 _, E. H) e5 S$ ^: D' w
private void getIsFly(){
/ L1 I7 [( k0 h6 W/ X KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {+ h1 ~& |8 I$ k, c
@Override
. j0 T' T4 g1 |( U1 b# V! T- C. g public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {( k9 P i% w( y1 X; }* y8 v/ O- z
if (newValue!=null){
; Q# Z" s! L( O3 n6 I isFlying = newValue;$ Q% C7 F+ b: D! C7 f# q
}
1 H- E: J$ \6 ~' `1 d2 d }
: `& z( Y1 [# G$ A! c h });/ A/ H2 R# s5 i$ _( h E
}
% ` [8 c' {: | private void getGimbalAttitude() {* `3 ~; |+ o1 v( g
KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
7 P5 F' K# U- S0 S: t @Override) B; z( r4 @$ g9 F" U
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {, J/ x2 o! t. l$ X% T
if (newValue!=null){
% R, y8 S, g. }7 V g_pitch = newValue.pitch;
+ a8 V5 |1 S# p0 y/ Q g_roll = newValue.roll;9 ]1 Z$ l# \& b
g_yaw = newValue.yaw;% V. O" m3 D6 C% G/ U+ X! W2 f& H
}
5 b/ K. A3 X' N% r" ^% Z }; g: |& ?7 ]2 G; r+ F+ K: h, H
});
" L; i2 S9 }' x+ g/ c. ^' N }5 h* G6 T& X2 J6 I. Z& M
private void getPower() {1 L8 [/ v' b' w: ^4 B0 N
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
& `6 E) J) z/ t @Override& b' ^ G7 z: Z1 L6 y
public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {* F# Y- C+ u: O& q* E+ F
power = newValue;5 N0 I" N+ k. [* b b
}/ K8 T4 z" ]% P9 B
});5 t0 }& ~! V* K( f. ?+ f; X
}
. \7 b4 p' P3 w, X private void getTemperature() {2 H, U1 D- {1 W1 |$ i H
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {( D0 b+ j/ e. I1 s9 j9 ?% U3 {2 ^
@Override; n* p g6 u. p$ d
public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {% o6 S; N1 u' W
temperature = newValue;; `5 j, w0 J* u+ |6 O' m) q3 Y
}
0 Z' m, u/ y- U( w! v: B1 Y! m }); ~" P8 `. S& G7 P& B, [
}) G( n$ Q% p* I: S) c5 \ C- K
get3DLocation()方法为获取飞机经纬度信息。getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。getIsFly()方法获取当前飞机的状态值(是否正在飞行)。getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。getPower()获取飞机的电池电量getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;
' l* w- T$ `5 d0 Q* N2 b: C6 u# P S+ p" i; L
* I$ }& i+ Q; W% H2 ]8 p: D: F
2& y8 r k9 A3 _/ s
多媒体使用9 |1 [+ o O/ m. R2 S O, O
1、Sample介绍
: z+ R) ?3 w8 ^
. i4 k+ l6 O- M5 N# F9 V( p v% x拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。2 A* z( i, Z% \ q- M8 U
下图为完整的接口展示以及接口调用流程示例。. K( f2 r% u5 ~/ @# X) v
多媒体文件管理调用流程
- t: k9 h( U9 m; m6 {0 A
twj0cie00ta64011345711.png
视频文件播放调用流程7 g- L" \, U% e3 q
|
|