|

d5kqz13hmwm64023070118.gif
0 R! s! s* f; z* h
点击上方蓝色字体,关注我们8 V ~) o; J' x6 ^, f! ?
; A# L8 D5 b7 @ tv5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。8 Z8 u F0 ~' n0 ~$ q6 w" P8 {, t
1/ q( y1 O& u) ~9 ]
获取姿态信息
' j! P1 g1 I, f/ o% y1、KeyManager调用! \- N: B4 w7 I
, X0 q' J$ p* qKeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。' }7 s w: O* ]0 W* @
下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。
& k4 G: s) f4 q; p/ s0 ?" D% U
1hygojudocf64023070218.png
) {5 }8 L8 c/ {: Z- F9 C& H此处是示例的操作方式,后面有在项目中使用的过程。. g6 s0 C* k: X& W
; t4 a* Q9 e! ~' e+ t2、示例
8 o2 `- l& H: ~- l' B+ h% g6 ?; _; I9 b2 V
//获取飞机信息、云台信息
" Y( N! w/ e$ S( F private void get3DLocation() {
. ?+ v# @) h0 e* U, m KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {, \2 U8 K* X' U% _; z, u2 N
@Override
) n0 h% H, ^1 y2 X" Z: I: ]5 K public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {( o/ o, u, S2 S' [8 M
if (newValue!=null){4 D! F$ _& ]4 ~' V! s0 `) d
lat = newValue.latitude;$ z- ]; W. |' ]0 a' y
lon = newValue.longitude;( h- Z+ x' h5 \8 P) [) }; B
high = newValue.altitude;" F! i2 g( ]4 b% H6 V8 h
}
1 }- U+ D! T' b( N8 x) c/ U }, h2 m9 i0 v; K
});
! `0 @1 q4 e6 ^: i( U) H5 E } {9 [' i$ V4 x7 O. S2 G6 k, \. N
private void getAttitude() {) O# w2 T# A( |# x4 b
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {1 {* `+ ]& q; m: [
@Override
# T& c z" U/ K, V3 ~& Y6 i public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
, |7 h% P7 R6 H6 a if (newValue!=null){9 |0 W: i- S3 A, ^
pitch = newValue.pitch;
2 h* I6 W9 ?/ N4 }, I% ` roll = newValue.roll;% {* O3 X, w) y
yaw = newValue.yaw;, z! V7 V" w2 {: Z- Q
}
4 ^8 F3 N( ~5 w6 E1 q, G6 H }* N J: ^+ n8 y2 c, ?
});5 b8 d1 |3 ~, \" s* d" ?! `
}5 b$ a* \3 I) h0 T
private void getVelocity() {
" X# @# K; S B* ^; k; h KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
) o3 _+ Q6 t8 V8 h5 h! d9 W9 }0 f @Override# D1 G8 k+ ~, `9 N+ ^# J1 S
public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
9 f; ]5 y9 |) b4 ~" N' ?9 f# P if (newValue!=null){8 }1 F/ U# A3 V
velocity_X = newValue.x;
5 X; c8 ~3 U8 h$ |: } velocity_Y = newValue.y;' n$ Z8 r- x( a! I' I
velocity_Z = newValue.z;% L! C/ ?/ \" }& n- T
}
4 M3 T* h( q$ Z: G }
- _ H+ G, U$ T( w* @2 |% e });
' P; x6 b# K/ w$ l+ n$ b( X }
" {& v8 b" ^7 M" I2 l7 ?+ l4 [6 I private void getIsFly(){- N4 c/ p# Y0 ]% Y7 |
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
9 ?1 k% q( p4 L' ~ @Override
) Q0 t3 `- w* ] z3 B7 W9 { public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {6 H' F/ u4 @& b6 I
if (newValue!=null){
; {# G: V: x, `, L3 G7 G+ Y; S isFlying = newValue;, z, d, ^$ g3 ]) f. `; l1 S2 y
}) \# Z8 g: Q7 d, P% S% p
}/ F& o t% x- Q# V/ ?& k( j. L' I
});8 E3 v5 d# y3 a4 A1 s6 ]
}
4 L4 d7 x- s& C! A& m$ _6 r; z1 j private void getGimbalAttitude() {
5 _( l" R0 e, g8 t9 D/ [+ w9 u KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {! Z- g" O. y* ^. l! ^& D
@Override8 `7 _4 {( q9 H* l% d* A+ n+ Z/ W0 u5 q
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
3 f l( y* X9 G if (newValue!=null){$ u/ I/ ^1 G& L' _- {% Y
g_pitch = newValue.pitch;
/ x- y$ t8 v& X- Y1 q" g8 N1 t! _ g_roll = newValue.roll;! y2 B& Y; |: v6 Q& L& a; D
g_yaw = newValue.yaw;) v( }" X2 E0 E/ e- L- @, L
}
3 Z+ W, a' R& h2 G' R7 S. l' t. G }7 |9 |! d* Q0 ]7 e8 @2 d; W9 ]9 o
});1 c1 b' V6 \) F2 W& f( ?% s
}" x2 G4 [8 \% l: U8 ^9 }
private void getPower() {
8 R/ z9 g. ^( b/ _4 K: T. {2 J KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
' d! D4 m P$ T# i% e$ }; w6 n @Override8 {4 L1 g# e7 C a
public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {% _4 O' r8 |4 E
power = newValue;
9 l1 {9 o4 C5 [ }
) O T- f1 W! u& | });4 W8 Z; B7 `0 b: y" I
}, s$ W- R* x) p/ H/ Y6 l$ n8 `
private void getTemperature() {
$ E! v* l5 j: g% `$ o/ E KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {
* W7 O+ y( h: {) m @Override$ @4 ^! J& o9 \ u5 Z3 |, L
public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
# y- J |1 G7 M. F2 @ temperature = newValue;/ ~$ v; R" Q( j3 F- _0 C
}
+ D% k- {) B6 y' z6 l. X });0 c* E% u- `! _2 a l
}
3 ^+ g- C- e* n- t6 v' sget3DLocation()方法为获取飞机经纬度信息。getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。getIsFly()方法获取当前飞机的状态值(是否正在飞行)。getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。getPower()获取飞机的电池电量getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;) c, s, N- X% ], U; u# P$ i# B
! l( n/ U3 i* s/ G c
0 d. ~3 |1 P; r E' Q2! w0 Z- k* \/ t; X U* G
多媒体使用
6 o3 ?9 f: Y* h1 a* P' y- T1、Sample介绍- L8 V5 x! }5 r: ]# p6 k3 P4 a- [
% O. S b8 x% D0 r
拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。 B& L9 t! U2 P4 p4 t
下图为完整的接口展示以及接口调用流程示例。3 b L) L8 [! k+ c6 s$ [ R# X. \
多媒体文件管理调用流程
8 _9 z5 D5 o+ x
nx0bv4uu1dw64023070319.png
视频文件播放调用流程
; R/ ], y$ h5 D0 z7 E |
|