|
u0dbekljdzp640339230.gif
1 f) g: K' w' M* x. n- J点击上方蓝色字体,关注我们
! x5 }& m3 A+ `8 ?
% B- o/ j# y2 A0 f5 Y: xv5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
9 e. ^ p0 t# @. |1
b; i9 K) m4 o" }获取姿态信息4 j' c: i5 g2 m3 I% b0 g' \4 Z" x
1、KeyManager调用1 `: U, P: u; w* b
% |8 M0 [; {$ m. a( iKeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。9 ]* \" W. f: ^3 m9 [
下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。1 x. S* b4 N q+ p2 w
5iqpab3kvyg640339330.png
6 [# j9 a& Y, t
此处是示例的操作方式,后面有在项目中使用的过程。9 e6 _: F/ Z9 |
; T( Q v& F" S% z2、示例* f; j. q8 g8 w7 m; o7 `
' P. s/ }* O `( o6 \% Q- |//获取飞机信息、云台信息" X, Q( ?8 a$ C3 }. t
private void get3DLocation() {
# d) ]+ @! _! {5 ?2 V8 \0 d KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {7 n6 C( f8 u, Q, d5 R
@Override
# E& ?. u0 D/ h8 l$ x6 P+ { public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {9 R, l) ?% E' m: ]$ P- F
if (newValue!=null){
2 E4 o3 g5 [4 k lat = newValue.latitude;! f, D/ p' F( s0 H
lon = newValue.longitude;
6 k) W$ B8 u6 z high = newValue.altitude;# T/ M1 s- |) X# i/ g( V
}0 B# `6 |& E* i. Q% g M$ ?
}
4 b8 V" ?3 t0 q+ W4 ^ });
0 Q: ~+ Z9 q$ Z7 q; R }5 p0 y3 b3 J: D, X; ^) ?
private void getAttitude() {5 k# v9 A# R9 w; Y# I% g
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {
- ~! _8 w- N: z# w2 M0 K9 }0 o @Override
F8 l. c& C1 \3 V, f& X public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
0 @# q5 b! h3 h6 @ if (newValue!=null){
* S/ o) a: U* s, Z8 ~ pitch = newValue.pitch;
y" j ]4 B* d. \% b) g) m roll = newValue.roll;* l" X( C( E0 z8 S
yaw = newValue.yaw;* }+ r5 A0 x- i7 R" Z0 Z; g
}- y8 T2 A# C7 L4 l& P" i" ^) h
}
! n* M, k# X( Y/ m) ? });
- y+ _* i' f- f5 |% C( @ }7 s9 A& x: h- ]; _: `: K
private void getVelocity() {
! A# @0 ?+ R6 @ KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
. ]" D# E& \4 V @Override
+ D# j* j+ j: @; L# T public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {- s) e8 k/ E& r( H* @* h
if (newValue!=null){
9 e7 }3 D+ g) E' b velocity_X = newValue.x;
1 m% p# Q5 e* T5 Y velocity_Y = newValue.y;
+ d' v/ G$ F1 |, a6 l6 e velocity_Z = newValue.z;; |8 n: J1 W) x0 ^: ?
}2 m' Q" ~3 D$ O4 o
}
( e# E3 e* o# \- j2 T# j });
3 y; q/ w/ u1 y6 w4 G }
7 H2 }. u& C. F) R# P private void getIsFly(){
3 s; z, h7 J8 V% B. G4 v, B KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
- N- i6 P& J# N3 z7 ?5 W& T" N @Override9 ^" e; N( T, f/ t5 M
public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {6 J. F* M6 E0 x; I( X
if (newValue!=null){
& W; s# j) _5 _* q1 g# A3 `0 P$ h isFlying = newValue;
0 I1 R$ A }8 m' J0 Q4 V. Y% k }( I4 V% M. a* P- M& h
}" y e; W: n- @( }4 m
});5 P' c/ Z8 K5 Q+ n1 u
}% z% \' q& W) i+ a+ e$ ]3 F8 U
private void getGimbalAttitude() {. D+ L, c" f2 B+ V( S
KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
9 D4 A2 o% u% O' l$ S) T! m @Override7 B, B8 @- F6 s; W- `$ K! T/ J
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
7 v6 ]/ i Q% X: ] if (newValue!=null){
8 g' u& U' I$ O- C- k4 ]: X0 u3 h' N1 R g_pitch = newValue.pitch;
8 x# a& z) B* N4 }4 I g_roll = newValue.roll;
9 a( b% ]. f& ]$ f o9 k+ C# \ g_yaw = newValue.yaw;2 b4 |. p) C8 ~; _
}
+ l* Q6 ^% l- a8 d }& z2 @" ]$ i. T" o
});
6 R( r5 g9 G) a1 Y; N2 i }
$ k, `$ X% S) F% A5 H private void getPower() {0 d( p% Q7 m4 b# _
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
7 H' _- V% K# B# O4 S @Override: h- D& R& {$ j% X
public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {: V. w, P; [. i9 {9 Z# r$ H
power = newValue;
; k) y. y7 G6 D* G/ F! ? }
( ?8 ] b0 t: a Q" N });
Z) @3 R+ o7 _3 b }
T @+ }& G2 z$ p o private void getTemperature() {1 W' Y9 W! d+ X
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {
3 E5 J: c* I9 Z, O @Override2 A: ~7 f* M' i' ?8 ~
public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
2 l% p+ o V3 T/ N6 a& Q1 Q temperature = newValue;
7 b3 S! c8 H j! T: C }* o2 o" I, Y* W
});4 a3 ?( F2 Q% D P0 y; @7 w: F
}
; x/ ^, N# O( S8 Nget3DLocation()方法为获取飞机经纬度信息。getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。getIsFly()方法获取当前飞机的状态值(是否正在飞行)。getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。getPower()获取飞机的电池电量getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;
5 P- W( \; m2 n6 S6 D- ]+ i \- Q
" L7 u. L9 w6 a8 E/ B" C
+ R& _3 O$ M/ M% b- o: L( l2
1 G8 A' e |; m1 q" x多媒体使用/ f2 A8 ]. V3 Y7 H2 q
1、Sample介绍
5 C( ]; {7 Y; W- M, R, |$ {# N& J8 v) ~: [
拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
% w* ?' J. S! [& C8 D$ Y下图为完整的接口展示以及接口调用流程示例。7 R* K( E6 N1 T4 e3 }5 H5 t, N
多媒体文件管理调用流程
9 W: }# o0 i; P) \
fyfccoh3yao640339431.png
视频文件播放调用流程: l4 H3 t. ?# d; ]! V- s" j: |* l N
|
|