|
ur4rfcigipz64025005929.gif
# J! [/ |: {$ h- j# s8 p
点击上方蓝色字体,关注我们- E( j: ^( a0 f
" u {9 J9 ^& i* o- j9 Jv5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
- R" X' |# F# |% K5 `1# B s7 b- X2 ]9 u6 a% O% \
获取姿态信息0 p* w9 L1 z9 h5 v. n5 q6 o3 K6 O% J
1、KeyManager调用
5 r% ?( r( y7 \4 W/ _" ^; [* X$ M- H) N3 k7 w5 p
KeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。3 c* I b, y4 z; G
下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。. }% M* ]: N8 @6 c
syxjjgb0l2064025006029.png
1 t* b1 k8 ` z/ E# K
此处是示例的操作方式,后面有在项目中使用的过程。. {: z- e1 V/ J T! B) i- F
7 u: J" g7 Q) Q. o! z( g- k2、示例: g7 j/ L' t5 h1 t' y) Q, X
; i$ ~6 r9 z M. M0 `, p; L
//获取飞机信息、云台信息, J I& g. U' I7 V2 O/ z
private void get3DLocation() {. f2 Q* i- D0 [4 R- ]* J
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
2 w! O; a& `% [' z7 N; F$ I n @Override& m6 A- i& Y6 h; E3 p1 w0 y
public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
" L h* Z* M0 c. q5 x if (newValue!=null){# o( U3 H4 T/ F* v# d
lat = newValue.latitude;+ z9 a5 {7 x/ y& G7 C4 U7 ]
lon = newValue.longitude;
: _% n+ C/ n( U% q+ V% m1 b N" s high = newValue.altitude;# ~9 U# w8 r& L6 w J% I4 J
}/ D/ l9 y! V2 @! E6 l
}( r; Z& ]! N3 T+ j7 \/ i
});9 y+ K; ?5 ~8 u5 t7 e
}. [/ E) o0 X" }" N* G
private void getAttitude() {+ i Q g# e7 B: \5 ~
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {' J8 g1 i0 B/ I
@Override' H4 d6 M4 h5 q) @6 m1 n* X
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
& ]8 M# T9 Z4 B9 t if (newValue!=null){
& k8 x) Y7 d; @ ]: C3 |: j pitch = newValue.pitch;; h, n2 d( F* Z
roll = newValue.roll;
7 m) @0 D% G8 ~: k yaw = newValue.yaw;
' y7 z( I$ k* y; @* n! ] }: y/ h3 N/ N& Z6 L
}) d2 Y/ `- E" ~% W
});- z }9 j( Z/ L' {3 h& m4 d* ~
}. _$ g! t1 N( i! v1 X8 j6 G
private void getVelocity() {; O7 ~9 a0 C2 Z
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {6 `* Q$ V, v) s. M- f# c a4 K
@Override
2 c" P/ i$ z/ x* j) D; ? public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {8 L5 N/ z5 M7 q8 }
if (newValue!=null){
" R3 L) N* t6 b+ `3 P! T2 g" P6 I velocity_X = newValue.x;" {# h$ E# u& a" |4 }2 [9 c! g: N
velocity_Y = newValue.y;" u& K7 g5 o* x! m
velocity_Z = newValue.z;
( X; B5 Z: Z2 g1 { }
( @1 Z6 y; v7 E" z( P }* {0 ?8 I) t5 t N8 k D/ ~. {
});
5 \ Y5 V8 g$ ~) Z* Z c }
; w- O+ `2 S5 V+ ] private void getIsFly(){: n6 H2 }: ~3 m* `9 _& N- Y5 ]
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
8 L# a. W* g" E# v. ?% y2 Z2 c @Override
* W1 H8 z' G6 {; t) d* L6 } public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
3 q2 Q( `* U& k Z m1 V m if (newValue!=null){5 q& @6 u7 l( u+ o' D) I
isFlying = newValue;
/ D9 b# I7 m% t8 G" ~" r }
" W+ Y! l1 w) i, x% b, r }* T1 N+ N l/ Q9 _" U/ V' {
});$ _; r6 Z; a* x2 H0 _
}
2 c& |9 J7 W4 y" m private void getGimbalAttitude() {
J% y2 p/ p) S KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {0 M7 ]- n7 y& M+ _0 o$ J; t
@Override7 B- U- T% ?) e9 M- ?' R, d; J
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {' G6 T7 H% v6 s' y, _" t0 K1 }9 q* y! @
if (newValue!=null){" m/ h! u- A" i+ w: H* Y* z
g_pitch = newValue.pitch;9 m* v7 ?, o2 [8 m8 P! W
g_roll = newValue.roll;, Y. T2 s. g# F
g_yaw = newValue.yaw;
& n# B0 Z# c0 a4 y6 B0 n }
# i* ] J& x; a; R! Y0 w0 y' ] }
+ P3 }- r. d: V });
& w9 {& e8 T& n9 [2 @$ U1 b }
3 [* p$ e7 M w private void getPower() {
1 ]9 s% P) G5 J4 g KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
& z9 G/ v( O7 h* D! H) B @Override
" @( ?- d% } f6 K public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {# M! W: ?& k2 b6 |2 d. W' N
power = newValue;- p ^) q* h) O+ E% k
}
; `9 O0 k N. @6 p; Y/ c });# J" R5 U4 |2 L
}
" w! H i- x6 H! {$ b9 p- R private void getTemperature() {
( {5 z/ `4 R. d9 F( F. T KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {0 [& o# s+ Y* Q! x6 ]
@Override
: H+ n5 Q" j" P4 D/ e' ^, }9 v' x, R public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
6 X J% ^& b, C( c2 g, O temperature = newValue;
) D9 P% S9 P, E; F1 p: Z: V# s }' y. }: S! g. b+ x
});6 }$ f! g$ R" I0 u( `9 O# p
}' Q" l1 w/ y3 [1 s9 f
get3DLocation()方法为获取飞机经纬度信息。getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。getIsFly()方法获取当前飞机的状态值(是否正在飞行)。getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。getPower()获取飞机的电池电量getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;
& H6 H. C9 Y) x* x$ p2 I! d8 o9 @& i
9 {% U- V9 \: `, ^ w: }0 |2+ k: u' u" H- a, h$ r; |
多媒体使用
0 m: h9 M; r0 N& l6 e1、Sample介绍
( r) w9 N1 r5 q7 E! f, p0 @- d, M: L3 G- o5 m0 k* s/ J
拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
! }) o9 [3 U" L6 ], a. p$ t下图为完整的接口展示以及接口调用流程示例。
) _$ ^) N9 C6 j: Q: P! R v多媒体文件管理调用流程
. V/ J; }, m" `5 z! |/ Z
42d22urinq164025006129.png
视频文件播放调用流程
2 u- f3 K8 X; h% q9 E; ] |
|