|
z2wzubp2str64015942729.gif
! p" @7 @ j7 ^+ G0 l2 y: J点击上方蓝色字体,关注我们
; J. o) d% O5 x/ n1 j
R Z( Y! ~ G6 K; ?4 g( ]v5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
6 m$ J8 t" q, t8 n15 K$ M6 Q5 @% X& E, U
获取姿态信息
+ R, p6 k2 }& i1、KeyManager调用
; @& L5 ~) V: j# N3 z( s% N
5 L6 ]7 e3 S# @1 a9 U' u" yKeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。
; l+ ]8 G% R% p下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。1 z& w, T0 z u4 s6 R2 z) W2 G, ]
vccaqthutua64015942829.png
) Y0 z- J! a/ m& j$ f
此处是示例的操作方式,后面有在项目中使用的过程。
; a, J) L$ T6 t' N1 I6 g# A& L
+ ~, \1 K; l/ U; s2 V2、示例/ o! ?6 e3 X Z$ X( }( T! j
^% \. w8 B" f- |% N7 i0 G//获取飞机信息、云台信息8 t7 T4 ?' J. s
private void get3DLocation() {
2 I( F, ?3 T: i4 W6 P1 z KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {/ i: @- q' a$ ?
@Override
5 q7 E) E5 x6 P4 `6 b2 A; q; S2 u public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {) E7 J; t: O7 z1 n/ m
if (newValue!=null){' i7 l% ?5 z6 f/ ?
lat = newValue.latitude;1 G- x2 N4 e9 ^* ?% z6 ^
lon = newValue.longitude;! E9 @) n g; g0 `9 {6 {7 O! W
high = newValue.altitude;
: U6 C, y, n+ k6 n$ Y% q( N }9 v& S/ }; v: R! P
}
9 F1 n- J/ A$ i' ^ });, C/ | L3 V5 L. a, i% e p
}! V3 }2 d4 d/ w( k
private void getAttitude() {7 j1 @1 z9 p+ j& z$ N! }$ Q6 C9 ^( Q* F
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {
2 b. w+ [& v. Q; Q @Override
# O/ P3 x0 O. }' ?* ? public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {( _3 [: i6 y0 @
if (newValue!=null){
/ _" ~+ c9 x, D# e0 t/ ~ pitch = newValue.pitch;, X+ ]/ N0 W! Y
roll = newValue.roll;
+ I3 W$ [% t8 Z6 L+ V yaw = newValue.yaw; |7 \8 r1 K* ^
} I: G$ w, n. U1 i
}
* j2 [$ O9 A/ m! g });$ h2 z5 x+ {* V; E5 K+ D A
}9 O0 T& P, u1 S! r( N7 v# d7 e4 b: L+ ~1 v
private void getVelocity() {
- {, {7 L4 l8 X( [- C& Q KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {9 |8 u$ e3 h1 G4 M7 r% [7 ?( P
@Override# |8 w/ R. ]1 A. _1 m, e7 B/ Q
public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {! E8 ^: F9 h- P! X- |: _/ Z: ^2 q% |
if (newValue!=null){! C Y4 t9 u* K I. a$ i) b
velocity_X = newValue.x;- Y6 J. p; {. i) b6 @
velocity_Y = newValue.y;# t9 x o) o+ z, m! S3 ?
velocity_Z = newValue.z;
* u4 R9 n2 z, } |" D8 T5 M: ^; v/ D }
8 G' }( S: D+ p @! J' O/ S: |: a: @( ~ }
' K) X2 D2 i( j/ e/ ^ });
- e3 ^8 g- H: t% @% {5 \* q7 |1 ? }: W4 h* `0 u" \1 [! W
private void getIsFly(){
8 R0 s+ S5 C3 v2 o: O0 `2 d. l KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
+ b; ?, h% S& q, ^ @Override4 W! r% Q3 r' s2 Y! d ^
public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
8 `7 z. a" I- S0 E9 k( L4 v8 Z if (newValue!=null){
( G% r8 l' h4 N- F8 z isFlying = newValue;! [8 |0 L0 I( z! C" [& O9 ]
}9 h/ A h4 o$ s! x
}% \ e" o! p4 c m
});
! e l: ]6 X7 d1 R. e, d% D }
! d! ^& D8 B5 p private void getGimbalAttitude() {3 c# ?1 [) a$ N. A( w
KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
! c' T! k- o; n2 G @Override
( ?5 h0 m* E& E3 H public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {$ e3 y; C0 Q" ?
if (newValue!=null){
3 E* A2 H. e5 M& I4 U3 ] g_pitch = newValue.pitch;0 R2 ~7 H% \- y
g_roll = newValue.roll;; Q7 i5 {1 x9 Y* R Y
g_yaw = newValue.yaw;# g2 W- L: w8 |
}
* d+ y! L9 g/ g0 n }# ^( v$ k" i3 t* n
});; Y+ ^- p8 e# h5 K# q
}
/ q$ N7 ~& E: `1 c' Z private void getPower() {
) g( C1 Z- I$ w1 h KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
, K2 D+ H* w2 Z/ E7 p5 ` @Override
! J3 j. y" P/ `0 Z public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
. e3 L4 t3 h+ D: V! O8 C# P power = newValue;
+ [4 c# M7 b2 \* L }
M4 {( e6 f/ g3 ~2 A });( h- K! R: L& J, e* \% M) z5 I
}: R+ g* b+ d2 [4 x8 c
private void getTemperature() {6 s D# C- n3 S( \5 y# |: z
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {
# N) d$ j' ~: d+ o @Override. W" w) E8 i/ ]
public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
/ ~: M( q9 F9 t temperature = newValue;
& ^/ I$ B4 b: {) c9 _$ A5 y, Y }
$ F C1 V* j% \! f& A });
9 O5 w; }- b3 N2 `6 |( D& a }
6 p5 i7 o0 ^( i' I3 V. gget3DLocation()方法为获取飞机经纬度信息。getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。getIsFly()方法获取当前飞机的状态值(是否正在飞行)。getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。getPower()获取飞机的电池电量getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;5 g( L+ w+ x) e" l& T V- b
4 z% x$ X3 B- Z. i
, o, Q; u8 R0 ]( W+ o. G
2
. f9 F) D0 g8 X1 x' a多媒体使用
, i8 a7 U i( \" |1、Sample介绍
5 K" q, x# L; k
; F6 O* l! S6 J0 c& C( r拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
4 K; O. f9 D$ W8 F7 K+ m下图为完整的接口展示以及接口调用流程示例。
/ n0 l; e [# p% V多媒体文件管理调用流程
) l. g' ?9 N( o: i
qefw131ol4h64015942930.png
视频文件播放调用流程 [" l. o9 _! w' @5 _. F% a
|
|