|
l1vvqf0vb4364018791618.gif
: |$ F9 f) ? x# ~4 `点击上方蓝色字体,关注我们
6 O/ q3 U; p2 k" ]' d; F+ o' P" U6 L
v5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。8 |' S/ o" h2 l% l! _
1
( }3 c% Z) f2 e% K' k2 \& e9 }获取姿态信息
& t, v# l- N2 F: m1 x2 O: L3 T9 E1、KeyManager调用
& {1 w9 p0 O0 [( f L1 \0 p' i/ g
KeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。
" J8 Z; t6 r! D下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。
; X: W2 ^# z" T+ M* u3 E+ u
pc3pusun01464018791719.png
% U. R1 ~* C. q! f. P0 P
此处是示例的操作方式,后面有在项目中使用的过程。
6 Y# I) W) l6 r( c: T: t' u- X* n# B; {6 }: G0 |; P& \
2、示例" T6 o9 K& u) g: b! X7 Y0 j. m& o
1 A2 y8 h3 F" H/ a//获取飞机信息、云台信息
& a1 \( ]( H \/ K- K private void get3DLocation() {! y. e0 J8 P& `# X9 `- j, Z
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
7 t8 T- @; F! A1 J" @4 y& r( e5 { @Override
9 F3 X5 x6 y; e$ S' d N2 S public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {6 ?: P# @" m1 ^- i# t
if (newValue!=null){4 t. J, A% l( _ g# l/ h0 a0 I" d
lat = newValue.latitude;1 ]2 a" Y g: z- J
lon = newValue.longitude;
2 z. r6 k7 i. m) Y% h% C( F- F high = newValue.altitude;
2 a+ s+ q4 Z4 h- A5 z1 L }) x; c& s7 Y/ K
}/ T J+ X' P9 I0 n8 T9 Z
});
/ `, @9 X8 J) Q9 K6 x; K1 c# {" m) V }1 M$ `8 n! B4 N F( m
private void getAttitude() {
- A; u# K% ]7 ?. a KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {2 R% E" N0 v! X3 B3 D
@Override U2 ?. I, y: \- y4 _
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {9 \" H' U$ b! F2 F1 o: W# |
if (newValue!=null){3 _: o7 ]0 `* B+ f' y0 n5 Q
pitch = newValue.pitch;! p2 I3 ?( Z4 K4 u& v, u) Q
roll = newValue.roll;/ y- G- u; @ H
yaw = newValue.yaw;
+ d6 q; i) w" `- c4 ]* I9 d, G }, n; l; ^- l& X1 ^+ Y1 u* {" I
}
6 Z5 J. { f- p8 {. B! h& ~* Z });
6 P' N) k) M/ Q: ] }
+ E; ]* d, g2 C% L# Z& [( Y! | private void getVelocity() {7 i6 k: B$ F' ` h2 M+ r2 T5 X
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
5 K; p& r+ [' B+ x1 ~ @Override. @0 s# V3 V2 m0 z3 X
public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {4 `3 o" q5 U5 N. f, m! @5 \$ H3 U# g
if (newValue!=null){
/ U" W* T! R! ^ velocity_X = newValue.x;0 p9 X w1 o+ G; o9 |
velocity_Y = newValue.y;
# `! K' y) \2 y6 h' x; \ velocity_Z = newValue.z;- C. X" h$ S0 G
}
8 F P; m' `; r1 | }
. X ]* Q) {1 W( _( b/ I+ t });
# k3 D0 F6 r% \8 G g }; h2 e8 C: }& M8 `" F {) ?
private void getIsFly(){8 D% l) D/ ?7 D/ j; m
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
: P* X' `# ~: M9 E. h* F @Override$ i! Q( m3 c, ]& g; F! B u
public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
; q9 C9 H5 }3 [; W if (newValue!=null){5 U* C- J8 k5 T8 V2 U# b6 V
isFlying = newValue;" A( f$ o$ [4 s, h! U
}, L1 L8 t- r" A3 D( c8 z3 I
}5 S8 x' T2 ~' W n' v
});
: S9 x% W# i* V3 q& ? }
. A+ A2 M* Y$ y2 I8 P9 v private void getGimbalAttitude() {2 U8 H X2 w1 g9 ] _
KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
+ G1 |& \* ~/ r: D" `/ V' k @Override3 v0 ^& |9 ?2 V% E/ n, z4 s
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
* Q4 S4 ~; E, c/ x; |1 j2 u if (newValue!=null){
: C6 Z7 y2 O V. h: O" t& u g_pitch = newValue.pitch;9 I- F$ j6 v$ i- e0 {
g_roll = newValue.roll;
( R0 a9 ?' y( [% y; b g_yaw = newValue.yaw;0 t, X0 i! q/ \: c ^
}1 D( \2 }) Z6 [
}: i% ?# L' P6 ]+ ? A0 ]
});2 u% t$ c( H1 v2 R2 s
}4 S( N- T6 w1 {
private void getPower() {
. J6 }7 g( x4 A+ T- Y KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
& e& [2 y7 z. E2 w' Y( W; \ @Override
: t5 S+ a: v1 A+ f% S Z% S1 p" S public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
4 g" G8 U. t, L( J% S& e power = newValue;
# E4 c4 B( [& X0 B1 l# A- r }4 o) ]. y0 c* Q8 {) @
});
# w) G$ T+ G% C8 e, e# o }
) V3 c& u2 Z" P* ~: G private void getTemperature() {
7 g6 \" \! F& o9 ]' W( E KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {( Z3 e+ o6 E+ g
@Override
/ e2 C* k9 S, i! S5 D) j- G public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {- ]3 M6 \: b) g4 T9 E [4 }
temperature = newValue;6 t1 u+ B. b- [- T" `+ z b* v
}
1 X( `- j6 G% d2 \ });
. T( l) w8 w1 b) R2 m* h1 h" y }
9 M4 W$ _# z- Nget3DLocation()方法为获取飞机经纬度信息。getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。getIsFly()方法获取当前飞机的状态值(是否正在飞行)。getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。getPower()获取飞机的电池电量getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;2 _6 ]) M% M) A& ?
! e2 b4 H N' F" j" R, W
x; l" C, L! c/ V _
2
$ i. r( n' Y2 _多媒体使用
8 q$ R- P9 S* O) _1、Sample介绍
* s. O; Y/ F/ V% C. e2 l) E" I8 Y( R
拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
7 W, h: v8 S. p2 U+ r" r5 {下图为完整的接口展示以及接口调用流程示例。) f E+ s+ O0 T! j4 B. n
多媒体文件管理调用流程
) Y* D4 A# ~5 d* x8 n
ln5lcvw2imq64018791819.png
视频文件播放调用流程
& O: u3 j( I5 }0 r1 C. z( D |
|