|
ur4rfcigipz64025005929.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ur4rfcigipz64025005929.gif
2024-9-12 09:50 上傳
& I% {0 ^& q' m
點擊上方藍色字體,關(guān)注我們
4 i. ~5 m6 Y9 |% O2 L
+ `7 t( |0 j0 [! M( o( L0 p, t7 Ev5.x版本的功能與v4.x基本相同,都是獲取飛機的姿態(tài)信息、獲取無人機多媒體文件、操作多媒體文件、航線規(guī)劃等。不過在上一章節(jié)中也大致說了一些兩個版本的中API的差別,下面是根據(jù)一些API使用所完成的一些功能,因為項目原因只能提供部分代碼供參考,后續(xù)如果有這方面需求的小伙伴可以對其進行開發(fā)指導(dǎo)。8 F! G1 G1 T Q/ S: o) X5 q
1
" j2 m- R, v+ D b" a& ~2 I獲取姿態(tài)信息# Q3 g1 a+ o6 C Y& l4 B# y( I" K
1、KeyManager調(diào)用
4 }. v+ V; H( G7 R6 V1 ]8 D
! [% t! ]# P- r5 y+ Q& X' ~7 uKeyManager類提供了一組方法來訪問硬件模塊的參數(shù)和控制硬件模塊的行為,包括DJIKey的Value設(shè)置,Value獲取,Value監(jiān)聽和Action執(zhí)行。通過KeyTools類提供的createKey方法可以更加方便的創(chuàng)建DJIKey實例。 S4 @4 m* l I P: d
下圖展示了使用KeyManager的接口判斷飛控正常連接并且GPS信號等級大于等于2級,然后給飛行器設(shè)置返航點,最后執(zhí)行返航操作的調(diào)用流程。$ _" g H3 q$ S4 G: y& g. ^! X6 h* G4 Q2 f$ q
syxjjgb0l2064025006029.png (75.18 KB, 下載次數(shù): 1)
下載附件
保存到相冊
syxjjgb0l2064025006029.png
2024-9-12 09:50 上傳
1 j& u! H5 ^" ^/ y5 o- p此處是示例的操作方式,后面有在項目中使用的過程。
' I" b$ J4 O, U0 R3 O7 k( `1 [
2、示例
% Y. q, D# v) {% h! ?
! j$ C+ E: x% T: r: Z% m9 X//獲取飛機信息、云臺信息) X# G& K8 c1 G+ v. {. J
private void get3DLocation() {
" m) b3 q0 X1 C7 V' P3 ^( E KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {
" D5 G: t5 s* c5 y @Override
. B& q+ W! j, p+ _$ ^- v/ W public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {+ r, K1 G! r( L& a( U5 Y4 V
if (newValue!=null){. h1 w O6 b) o. J6 f5 Q( S; [
lat = newValue.latitude;* X# \6 |+ {& }7 y, q! W
lon = newValue.longitude;
( D2 S' ?1 b# g: f high = newValue.altitude;( N; |0 ~. F j$ j& L$ J
}' v$ w7 z3 S- U9 N$ G' F3 p
}4 V( t, N- D2 E# \, S. x- f1 s
});
( I+ ]! p5 m" z. v( w }
0 i* ]# j( [1 E2 A private void getAttitude() {$ o. Z! ~: [8 w6 j4 x! e1 A
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() { E) N' c4 M2 n' c. n5 e) |
@Override3 I) \! i% ], g% _5 K
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {& m z- T4 c) R5 H# V+ E; D
if (newValue!=null){+ x+ r) R c/ K) N3 O7 W6 {) {# X
pitch = newValue.pitch;) K# P) N& b; H5 P1 N
roll = newValue.roll;9 g$ s: o' C5 I# h0 M
yaw = newValue.yaw;+ t7 n& ^! F6 ~( Y
}
|! A! Y; r* K, s* q$ d }8 ^" O# q4 H0 t1 J: N) q1 p
});
& @# N/ ~5 R; T) a: t* R5 [ }2 b1 X, Z, e- k/ c7 L5 G* ~9 N
private void getVelocity() {
$ H1 r; F1 x. a% u! }8 G! S KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
& Z7 ]% p3 Y. N' E5 o, r$ | @Override2 c2 l9 }2 E! S" W+ L
public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {4 q! N! n2 ?2 o
if (newValue!=null){
4 s) _ p# j; |0 Z/ x( P velocity_X = newValue.x;
0 D( q6 V, r' }' O- p' z velocity_Y = newValue.y;
5 f) `0 k! o' y/ }+ O4 `/ u! I velocity_Z = newValue.z;, _$ s5 p8 d8 b2 m
}$ U2 p8 Z- D1 q% ]; s
} Y% |$ P4 j# S& |6 s3 |$ v
});
1 k4 W# E2 r& |( c. J7 Z8 I V/ ^ }
! Y' a+ e8 y- Y' N private void getIsFly(){( G- [ Q T8 G/ b
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
]' C1 {& x+ B @Override" |$ M. Q; l$ g" I$ \
public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {1 B$ W U W: ?! y8 l$ ^4 W( d8 u' T
if (newValue!=null){8 p: d( J' W8 |& ?6 q
isFlying = newValue;" D+ n! X4 Z8 s; O* b3 ?- ]8 E
}
! h3 Z$ }9 e; H, M }
1 Q" B8 L7 V) s! N, p });, [! y7 c, m X& Y
}
0 l: {; k- ~5 k1 \+ I; J private void getGimbalAttitude() {
$ f5 ~# l1 s* Y6 r KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {6 [( @# f1 W* X% T) b1 [8 k6 s- _
@Override
& b' Z% d5 ` H+ h- V public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {5 l. o, m9 q4 _
if (newValue!=null){
7 w) X; X$ d& c5 \ g_pitch = newValue.pitch;
* w3 z# P% g$ y9 N5 J8 _9 } g_roll = newValue.roll;
1 z1 M: y9 W- }$ c g_yaw = newValue.yaw;
1 R7 Q$ F6 _; i; A( W- ? }; f9 j$ Y& T# ~/ ?: F9 X
} }8 ?" X `5 K- p% K" c+ u
});2 w# _6 ^% N k; E
}
`- q+ u+ N9 G9 a& D u private void getPower() {
8 a3 i" a. Q" S6 J( V KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
! }: [% c; {2 p- }6 u @Override! u" Y6 n _ `* U
public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {) z" c+ K" }; G( t
power = newValue;6 w& o( P9 V% c( V6 L
}
! E9 t+ A. ~) E });
; P8 k; @0 a/ @# P2 D1 R0 I6 r }
7 ?9 O0 ?2 j4 N7 \ private void getTemperature() {3 z# A( {4 ]: h0 C) S V7 w
KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {
- N! O( W4 L) w7 j) B+ E @Override
' _0 g, G' O y/ H& |* Y9 }, N* v2 y. m public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
: y2 R D: l- [( Z9 m& U9 J temperature = newValue;7 x8 {4 N! A% W: d
}
# e$ C$ O1 x$ R* y });/ O* l9 {1 }, ~8 u! G( H. W
}2 }$ o' o' U0 }8 R# f0 G
get3DLocation()方法為獲取飛機經(jīng)緯度信息。getAttitude()方法獲取飛機的姿態(tài)信息(分別是航偏角、旋轉(zhuǎn)角、俯仰角)。getVelocity()方法獲取飛機的飛行速度(分別是X、Y、Z三個方向的速度值)。getIsFly()方法獲取當前飛機的狀態(tài)值(是否正在飛行)。getGimbalAttitude()方法獲取鏡頭的姿態(tài)信息(分別是航偏角、旋轉(zhuǎn)角、俯仰角)。getPower()獲取飛機的電池電量getTemperature()獲取飛機的電池溫度onValueChange()方法為1秒執(zhí)行10次,這個可以根據(jù)后續(xù)要求進行獲;# H0 d7 Y8 e, i3 K% ]* n. T
. q- F( f9 P; S* U$ S
' ` M: _. m- |: `$ |$ z
2* \; h2 K5 y1 z) V
多媒體使用
" g! m1 h/ _! O- P( z1、Sample介紹
1 e9 _1 U$ p2 R$ L- W: b0 |4 K& O; d3 p* A
拍照、錄像是無人機的重要功能,對拍攝的照片、視頻等多媒體文件進行管理也就必不可少。多媒體文件的管理包括訪問飛機存儲空間內(nèi)的多媒體文件資源、獲取多媒體文件列表與列表狀態(tài)、視頻文件播放等。- \ P6 y. M) \
下圖為完整的接口展示以及接口調(diào)用流程示例。
/ R4 Z5 m6 |' h7 l多媒體文件管理調(diào)用流程& z- e, M& y5 G7 v: _1 z
42d22urinq164025006129.png (110.77 KB, 下載次數(shù): 0)
下載附件
保存到相冊
42d22urinq164025006129.png
2024-9-12 09:50 上傳
視頻文件播放調(diào)用流程
# ^. d! u$ M4 U! {: z5 w |
|