|
z2wzubp2str64015942729.gif
& I9 Q1 ~! p% \, }
点击上方蓝色字体,关注我们
% ?4 C1 |+ w+ {. O) c+ G
9 G3 }; o+ ?6 D. X' qv5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
& B1 f6 [ N2 l* T1
: k- J' \2 K3 m. i0 y获取姿态信息, u# B. F/ N: B
1、KeyManager调用
& m9 h2 G+ J* [) k* X/ p) x- D9 ~6 E2 f" _' r% b
KeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。
3 s8 }. i, O$ o" r8 o, o, v下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。
5 W2 N1 R6 X2 b9 n
vccaqthutua64015942829.png
$ V: v9 d' P' h, O* E
此处是示例的操作方式,后面有在项目中使用的过程。
. {, v8 |7 E4 A
: W# ]' j" q) _; R I/ g. o0 n$ u2、示例
$ n9 J- X {' G+ p: e
+ y4 q$ v1 x* P" ]9 A. f//获取飞机信息、云台信息0 V9 L0 M; G. B" ?' l' G+ }
private void get3DLocation() {. B5 Y9 |# U) W1 n
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {& _, b8 V( j" h9 d1 q- v
@Override( G- {# ~ `, q. F2 q4 a5 r
public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
C) T1 q+ j3 Y) x" Q if (newValue!=null){$ Y( j9 Q4 }* b7 v. ^, m: g6 F' ?
lat = newValue.latitude;
( V0 S3 t4 M6 o1 X7 a5 K8 j lon = newValue.longitude;5 q3 U+ D m0 B& g4 ~5 q3 i
high = newValue.altitude;
, c! F7 u; }$ k4 F) ?; X& i }
: p) e ^# C1 D" }0 M }
# O1 ]; h9 Q8 ]+ } });
2 q# k( L5 d: M }' c& ] Z) A4 a3 h* F T" h" T
private void getAttitude() {
8 a! e1 n" n( ^% E6 u KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {5 {: P, M$ q4 Q2 G
@Override1 R! d5 x4 V* J7 p/ D
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
7 J( Q' _* h K- z if (newValue!=null){
( e! G: a4 p3 l r4 }/ m' A pitch = newValue.pitch;
2 u( e* O3 t3 r5 q) I roll = newValue.roll; q( i: y2 }# }+ t
yaw = newValue.yaw;
: ^6 U4 c; h! N2 i% x7 V }# \/ m; Z% {: q
}& i5 `7 d' n" ?. I! J
});
& N' `) a) N4 w9 A% j/ y7 ? }1 N4 @) |, A) \" s: Y9 O: a. G
private void getVelocity() {
: {; @( t- n4 Q0 Y6 U. `4 V KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
' x" ?/ n& E8 X( A) ^ @Override: g# m9 r# e% u6 b3 [ p
public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
* u2 z! E" f7 S+ a: v% D. U8 {' V2 n if (newValue!=null){: P/ X5 ?% ~9 J: x& `
velocity_X = newValue.x;
3 l) b) J/ y2 o velocity_Y = newValue.y;
: ` K; W+ \/ k% t# s7 \, Q velocity_Z = newValue.z;+ Z0 f) G/ b& {9 x
}
# `1 O6 r. a* R8 J" V% n5 E }
$ T& }2 O( A7 l2 H5 h });
6 m: W5 f! ^* q0 E' Z# g" U, } }
; Y1 f# d# s4 i& C4 t8 j private void getIsFly(){+ H/ q- b( V2 U! |8 F2 H+ ?. |
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {! K E5 ~1 o/ a9 {( q3 R! U
@Override3 o1 P% N( x) y8 ^
public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
0 [/ N" g# @/ E1 z' Q% \; C, D5 C% B if (newValue!=null){+ L$ I# k: U, v- a6 \% t
isFlying = newValue;- A1 w5 V6 L( b1 ~( d" z
}3 ?& J0 P% M7 q: g, S7 q% p: \
}
# h; K, ~% L( {* P6 b });
9 D1 U+ I% ~" T" b; F' z }( Z7 o6 [8 x( |$ S) }
private void getGimbalAttitude() {& x0 L; ~% F/ h) _
KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {9 H8 }4 x e0 g
@Override2 T% R- s% H, r& ]( d- j
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {- C9 G+ F- \+ X' p% s
if (newValue!=null){
' v$ }: z9 u+ R" L g_pitch = newValue.pitch;
" A9 _/ s! \( O: x g_roll = newValue.roll;
' B7 x% i" s: f/ ^$ n g_yaw = newValue.yaw;$ x" I7 S0 G: T; V- t/ g
}8 @6 R$ V/ k- O* p
}
0 P* R- K# i' v# H });
% [) {& F% }" m5 X {% U }
* T5 r. T* W% w$ W( [ private void getPower() {
% }. ]2 Z. {8 a8 x$ E& Z KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() { Q. y, G. D' @" ?2 b+ {6 X5 U, s1 z2 @
@Override
0 W' m" e) o) ]% x public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
/ ^5 K) I+ C2 U7 r$ n; C, B: j9 } power = newValue;" P/ F4 E: ~) `# U( ]
}
3 C3 v o6 V' A5 X7 V5 a9 v. L });# c; E! o/ j' s% d
}. ~- Z+ @2 l3 B, B; D3 |- E
private void getTemperature() {7 C# } Z$ {9 l% I. F/ {0 a, d3 \3 H; \
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {! o; b5 v1 x" F8 o8 f7 q7 p
@Override \; |8 ?* V5 K
public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
9 W# z8 A5 T B8 A5 b3 e6 e temperature = newValue;
$ j7 w4 G! x! |. Z9 ]% ?" ~ }
3 x1 v7 {7 S0 z4 r2 | });
' M, Y) y& l- ^& t }
6 s7 U* _' n3 |+ {) Wget3DLocation()方法为获取飞机经纬度信息。getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。getIsFly()方法获取当前飞机的状态值(是否正在飞行)。getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。getPower()获取飞机的电池电量getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;
v! Z/ g* r" P* v6 _5 a% j7 Z+ o1 `1 ^. D: y
: x% G" V7 U; U" O" W
2( w( u: t* C( _& y- n1 o8 [$ j3 A
多媒体使用& s! O7 L/ ]+ U; N- T
1、Sample介绍
/ s Y, g- w, R7 |% s6 i' {! s) M4 _) N+ E
拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。! c# z4 U" l9 @: n d
下图为完整的接口展示以及接口调用流程示例。
+ G D9 _& r& X3 s* \* m多媒体文件管理调用流程& q9 H6 ]. w3 V& Y, h }1 c; d
qefw131ol4h64015942930.png
视频文件播放调用流程 |( U% @6 h- L/ T9 a3 u9 r
|
|