|

ur4rfcigipz64025005929.gif
: h" S8 Y1 d$ M& k1 s) ?/ }& s L
点击上方蓝色字体,关注我们
& s) U% Z( e% C& S3 i7 A2 S E) c' n; w/ F
v5.x版本的功能与v4.x基本相同,都是获取飞机的姿态信息、获取无人机多媒体文件、操作多媒体文件、航线规划等。不过在上一章节中也大致说了一些两个版本的中API的差别,下面是根据一些API使用所完成的一些功能,因为项目原因只能提供部分代码供参考,后续如果有这方面需求的小伙伴可以对其进行开发指导。
% _$ y _% \ [1 c5 }5 U2 E( c1
/ }2 j3 ?) A1 H$ B获取姿态信息
7 U# H3 \7 `# e$ o/ h$ W1、KeyManager调用% S& V9 }' L1 y; R! I7 O7 ^
3 ]# E! I' [# c; oKeyManager类提供了一组方法来访问硬件模块的参数和控制硬件模块的行为,包括DJIKey的Value设置,Value获取,Value监听和Action执行。通过KeyTools类提供的createKey方法可以更加方便的创建DJIKey实例。/ w5 h8 ^$ L9 }$ Q8 [7 _
下图展示了使用KeyManager的接口判断飞控正常连接并且GPS信号等级大于等于2级,然后给飞行器设置返航点,最后执行返航操作的调用流程。. H0 m" R- ~1 q! i! d
syxjjgb0l2064025006029.png
! v; \, t: v9 h& p* y) B0 g# E# f
此处是示例的操作方式,后面有在项目中使用的过程。
$ f& J* _ I( ] V3 Z# ~1 Q8 M% |8 j6 V5 T. B
2、示例$ ~& B0 l1 E% ]# J6 v3 B% O; J
1 N: Q9 |" N0 O' i//获取飞机信息、云台信息
& u. R* o$ L9 }5 G private void get3DLocation() {5 U6 f) {* l+ j2 m8 i4 S# |
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
, W6 ^) U3 d/ `0 \8 ~ @Override; t- v% n6 K- @1 o2 U& I) J& v" Q
public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {1 I* h/ A% I4 f+ p
if (newValue!=null){
6 P, w! k" d, J' r lat = newValue.latitude;, S* [0 a. M. W. ?" p5 u
lon = newValue.longitude;
0 L" ^3 P c1 O high = newValue.altitude;
$ }6 g; ]* T' G9 a: ~* C1 A- | }
- A* C! V' r# ]7 {; M }
" y; Z W5 O% k x, w });
- M% a9 q' X* E V6 h }
4 T4 H8 x! h. s6 Q private void getAttitude() {
8 s2 X% d6 }" t) s% J KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {) [5 r; T$ t1 y. Q
@Override
& | r& V+ b, j; M1 j; ? J public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {- Q* m6 u' H% c+ Q+ c5 d9 u2 n
if (newValue!=null){% {6 [6 e3 x5 @6 k
pitch = newValue.pitch;
5 X+ T- V. ^$ y' H2 ?9 X$ [ roll = newValue.roll;
; [4 Y1 F2 k7 ?8 {* Z# g2 x yaw = newValue.yaw;2 {* Y) s2 o/ Z( m
}
9 R2 K& m4 r' I$ i z2 B+ H" R! b }% [# e) {/ }9 X, m. K! {, E, t
});
+ O8 n% N; S' L- U }3 ^' Z& f; ~/ ` G& V
private void getVelocity() {
4 i% \& e3 @2 l3 ]/ y KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
7 z- ?% O6 X2 [. o @Override
9 E& C- c5 }- G+ u5 e5 u3 o public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
! y) d/ L* v* v& L/ V% W if (newValue!=null){$ z: a# G# q, @' K' k- @
velocity_X = newValue.x;
3 s5 z* L5 s! a velocity_Y = newValue.y;& E5 u$ b+ y" o- D, b, w
velocity_Z = newValue.z;
/ w' d. X6 j0 p5 I D& s& H }
/ v, N' D9 {( q0 ~# h1 I }7 z; M3 u$ F9 c+ z4 \" x( |
}); B7 M5 I& h* t# {' \4 R
}4 W2 d( b1 O" Q) s/ I4 p" t( V
private void getIsFly(){
& A# E2 M' Z% v$ W KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
' i) W, N. a5 A9 R; M* J K+ f @Override5 q) M9 N6 ]' M7 W7 m2 P8 g( t
public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
1 Z1 I2 O E- |$ T if (newValue!=null){3 V) r, l5 ]: p. m7 A
isFlying = newValue;
& R* M. t& T7 _. e; | }
7 z* L0 L! M0 F2 U4 X# s4 k }% d% ` ^3 L8 H; {" Y G# e; t
});
4 F+ A' D1 f8 J4 q }, C* _: n4 Q1 v6 a
private void getGimbalAttitude() {
- g6 L: z0 J* W1 K+ j3 u7 s7 X KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {
7 y! C8 j" E, g @Override
4 G9 A- y1 s; b3 ]* z public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
L+ ~/ ^6 Z$ Y; S if (newValue!=null){$ u1 m& c$ E1 }, u3 `1 F+ R A/ v7 m3 B
g_pitch = newValue.pitch;
3 {/ j D L8 A5 Z# i* X g_roll = newValue.roll;
7 A+ C! S3 l# T1 }- f% u g_yaw = newValue.yaw;/ n; ]% a$ W3 N' C
}3 a7 M* p6 N4 |5 Y- _3 H' M
}
- D# g% I& T- s# |9 W2 t });
1 W- P: I5 L+ f5 k! Y! `% u# u2 b }
2 M# M/ f: m: O# H private void getPower() {, |' s# L Z! w, m1 a9 F/ n! L" E
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {2 {# Z/ S; `4 M6 p. I9 {
@Override
. D5 |7 q+ p3 g& A a9 }# l% Y public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
4 s* f! s. X8 ~' c power = newValue;
) f$ F* u: ^- Z* ? }' b+ b) ^+ I5 ~& q" o( |& k
});
% n+ T W0 e" B D& Q# X }
+ a% l* {/ Z- e. F private void getTemperature() {
- p4 r8 H( {- S% I7 X1 ?. ] KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {
; }& F0 m( I7 k3 M4 B @Override
( h" \# y, f; N8 M1 D3 S3 L8 M public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {: V9 o8 |: P( o. P. ?: x! e
temperature = newValue;
. c% L, b$ x: i3 K }
5 A" U' X. U0 n& V/ z6 ~ });) @/ f( ^$ a0 T4 x3 _2 l
}( K7 T! A, w3 @% a/ L# r
get3DLocation()方法为获取飞机经纬度信息。getAttitude()方法获取飞机的姿态信息(分别是航偏角、旋转角、俯仰角)。getVelocity()方法获取飞机的飞行速度(分别是X、Y、Z三个方向的速度值)。getIsFly()方法获取当前飞机的状态值(是否正在飞行)。getGimbalAttitude()方法获取镜头的姿态信息(分别是航偏角、旋转角、俯仰角)。getPower()获取飞机的电池电量getTemperature()获取飞机的电池温度onValueChange()方法为1秒执行10次,这个可以根据后续要求进行获取;! h- }0 \1 r% A8 f/ I9 i
8 ~' N' N: b; J. R$ I& w( ]: ?
" N3 V1 R2 Y& U' D! N2$ ]6 w8 C" o$ `+ d7 s4 z2 P
多媒体使用
; c1 Q6 H9 G" Y1、Sample介绍1 M, M; x) W1 V/ N, \5 X
" z) ~- I3 L! b# Z$ ?5 `. E! E5 s
拍照、录像是无人机的重要功能,对拍摄的照片、视频等多媒体文件进行管理也就必不可少。多媒体文件的管理包括访问飞机存储空间内的多媒体文件资源、获取多媒体文件列表与列表状态、视频文件播放等。
) P" e/ o l! @! m' I下图为完整的接口展示以及接口调用流程示例。* `8 t+ Z2 }# C$ [! P: `
多媒体文件管理调用流程
6 t# N# S0 l& z, k3 E& b/ }
42d22urinq164025006129.png
视频文件播放调用流程4 N7 U1 F: e5 @/ i1 o
|
|