|
l1vvqf0vb4364018791618.gif (60.41 KB, 下載次數(shù): 0)
下載附件
保存到相冊
l1vvqf0vb4364018791618.gif
2024-9-11 09:52 上傳
& W: d, k# e( f A( y點擊上方藍色字體,關注我們
4 {4 T* w) f& F$ v" _& D
0 n ^* j3 ^* f. vv5.x版本的功能與v4.x基本相同,都是獲取飛機的姿態(tài)信息、獲取無人機多媒體文件、操作多媒體文件、航線規(guī)劃等。不過在上一章節(jié)中也大致說了一些兩個版本的中API的差別,下面是根據(jù)一些API使用所完成的一些功能,因為項目原因只能提供部分代碼供參考,后續(xù)如果有這方面需求的小伙伴可以對其進行開發(fā)指導。
! e( L& H2 y7 `; b$ K% O( F16 H5 i3 ^: ~' c% P/ J
獲取姿態(tài)信息" B& a2 T8 `' G6 h
1、KeyManager調(diào)用- @5 `9 B% z/ R/ q4 i' R
% ?0 G. W4 {+ [
KeyManager類提供了一組方法來訪問硬件模塊的參數(shù)和控制硬件模塊的行為,包括DJIKey的Value設置,Value獲取,Value監(jiān)聽和Action執(zhí)行。通過KeyTools類提供的createKey方法可以更加方便的創(chuàng)建DJIKey實例。3 k! y6 E- P3 u: y' R: s
下圖展示了使用KeyManager的接口判斷飛控正常連接并且GPS信號等級大于等于2級,然后給飛行器設置返航點,最后執(zhí)行返航操作的調(diào)用流程。
' Q, a9 c5 m; {" A
pc3pusun01464018791719.png (75.18 KB, 下載次數(shù): 0)
下載附件
保存到相冊
pc3pusun01464018791719.png
2024-9-11 09:52 上傳
n3 @, a5 j2 L. ~此處是示例的操作方式,后面有在項目中使用的過程。
" c3 O2 y! y1 p4 z' Q: F6 o. E; [$ k& D& W' {) @
2、示例
2 x5 w) ?6 |1 |4 g) s7 p( C
( S3 t$ z# ^. M# h! S# i//獲取飛機信息、云臺信息$ [6 n; `8 e% d/ X& R8 a( }6 l7 Y
private void get3DLocation() {2 T! @- E/ T( v9 q4 H7 u4 P1 v
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftLocation3D), this, new CommonCallbacks.KeyListener() {+ M7 t9 h( \9 Y0 w
@Override
* d! W. \9 b2 }( D, y public void onValueChange(@Nullable LocationCoordinate3D oldValue, @Nullable LocationCoordinate3D newValue) {
* J# f% V. v4 X5 x: g if (newValue!=null){
5 a, W7 M2 _) K" z8 h lat = newValue.latitude;
+ f% F- Y: H! j, p+ J: N. ] lon = newValue.longitude;
9 b \4 k: `0 m high = newValue.altitude;' P$ A( ^) i( K' ~ t
}
" _) a$ S( s: l8 T, W. O }1 o* W; J, ]. z+ _1 E
});
_" h( V2 l' o/ ~' h2 Y }
5 b% C: l5 ]! S, I0 |! V7 Y* ~0 u private void getAttitude() {
4 @" i* j: V' P% T- w5 U$ v( n KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftAttitude), this, new CommonCallbacks.KeyListener() {
5 x$ M1 y" k; d8 C @Override9 S4 J+ x5 T1 b Z6 K
public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {
! Q8 |0 r8 g: l if (newValue!=null){
. D# F& n% H( A9 H& G& C# [4 m pitch = newValue.pitch;/ `! Z4 K7 }) E/ V7 [/ H' q
roll = newValue.roll;
, Y) s! u G6 m3 Y# x$ o yaw = newValue.yaw;* K9 T9 ?# s4 i+ Y; D
}6 ~5 ^) @& [5 p9 x" P. y
}
. P: ?! j( W9 J- I- t6 \2 a$ H });
- S/ h G! a8 z6 C/ X4 \9 v u# Y7 D }
" O- b6 `9 K+ n% r0 t' v0 g4 w private void getVelocity() {
( D- N9 f; y4 p: G5 o% { KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyAircraftVelocity), this, new CommonCallbacks.KeyListener() {
, x7 Z& i1 z1 w4 `. @ @Override
' @# V% W! m7 {6 f/ D) A public void onValueChange(@Nullable Velocity3D oldValue, @Nullable Velocity3D newValue) {
7 r+ U/ k0 \% C f if (newValue!=null){
4 r: c5 x& ]7 @! o0 v: q; i; f velocity_X = newValue.x;
1 p: ] ~# d9 K velocity_Y = newValue.y;
! Y; @1 r/ n8 g8 G$ ] o3 W! \ velocity_Z = newValue.z;( h6 V. d# }% f# Z
}
5 _; e* ^1 B" b$ u% _' E! L% O }
; l, I& U5 K4 w) A) S });
4 s/ s N$ v( z" q: H9 o0 C+ u }4 E, R F% F6 K- p4 Z1 [& N
private void getIsFly(){/ t( O* N$ O3 {' Q0 [
KeyManager.getInstance().listen(KeyTools.createKey(FlightControllerKey.KeyIsFlying), this, new CommonCallbacks.KeyListener[B]() {
6 l$ ~2 z+ M( A. ] @Override
/ i) e8 j- H" ]/ S3 {: j public void onValueChange(@Nullable Boolean oldValue, @Nullable Boolean newValue) {
6 j: l; T* t4 [0 r if (newValue!=null){
. N" p- u9 X4 H/ J isFlying = newValue;
9 u3 L- m% {6 N* c3 D- ^: v } [9 x. }4 [( d$ L3 I6 o
}* v9 [5 X$ b4 ^: C: S
});7 N- ^- i+ q& J9 ~5 E
}% I# R2 p. t Q
private void getGimbalAttitude() {
3 Y3 s- N8 Q% o. {% z KeyManager.getInstance().listen(KeyTools.createKey(GimbalKey.KeyGimbalAttitude), this, new CommonCallbacks.KeyListener() {, _; B6 u# ^9 m
@Override
0 A* E/ }5 }+ W9 P public void onValueChange(@Nullable Attitude oldValue, @Nullable Attitude newValue) {/ l4 O6 ]5 _/ K7 I' T
if (newValue!=null){. p1 t# c( ` u% p, P8 j. M% N
g_pitch = newValue.pitch;
4 S8 |' v `% V# L, f& m$ M/ _3 O g_roll = newValue.roll;
. \+ g$ E* }+ p g_yaw = newValue.yaw;
- g `# @! C! y2 L; ?( Z7 i }& }9 {2 D. _. K6 d# M; c
}4 E. }. h- F h, k" i% w# [
});
( ^# I5 t' e# J( I( t }/ N' j% Q/ K. L( l. b+ r
private void getPower() {
2 V6 _8 N" I' k' U* W6 Q KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyChargeRemainingInPercent), this, new CommonCallbacks.KeyListener[I]() {
8 W$ O5 ?6 _+ c. S @Override! O, \" l# C6 c1 U2 C6 H8 x
public void onValueChange(@Nullable Integer oldValue, @Nullable Integer newValue) {
0 U3 L9 v/ k4 S7 Z power = newValue;
/ K) S0 ^8 B' r }
0 a; H8 Y* v) e7 m4 G$ S( t: H });7 A6 I+ t/ I& D5 ]3 i: [
}3 v6 e9 p. G+ G; e- P: }, d) o
private void getTemperature() {
2 n7 w9 R2 }% _" R KeyManager.getInstance().listen(KeyTools.createKey(BatteryKey.KeyBatteryTemperature), this, new CommonCallbacks.KeyListener() {4 V; d) \" w- [' o2 k
@Override
1 y3 K; B0 ^2 M public void onValueChange(@Nullable Double oldValue, @Nullable Double newValue) {
7 R) q, z B* m3 Z7 y temperature = newValue;/ u8 W ?' z1 m: h7 ~4 T
}
/ M1 r9 V/ u1 u: H+ f L });5 I7 t+ _3 \0 q& p8 q0 e) X2 W. |
}5 h* h5 n/ w! E) m a% i' U& U
get3DLocation()方法為獲取飛機經(jīng)緯度信息。getAttitude()方法獲取飛機的姿態(tài)信息(分別是航偏角、旋轉角、俯仰角)。getVelocity()方法獲取飛機的飛行速度(分別是X、Y、Z三個方向的速度值)。getIsFly()方法獲取當前飛機的狀態(tài)值(是否正在飛行)。getGimbalAttitude()方法獲取鏡頭的姿態(tài)信息(分別是航偏角、旋轉角、俯仰角)。getPower()獲取飛機的電池電量getTemperature()獲取飛機的電池溫度onValueChange()方法為1秒執(zhí)行10次,這個可以根據(jù)后續(xù)要求進行獲取;, Z( l m) N1 _1 i: h7 U
; c4 M0 i' p8 ?2 ^
& p" `- `6 |& l9 o, \6 z2
2 F& H$ l2 ^+ o) \5 L* I多媒體使用" V) p9 R6 |" h' M1 O0 h
1、Sample介紹
/ ]' X C( j( H1 g, N: }1 M! F# Z4 U
拍照、錄像是無人機的重要功能,對拍攝的照片、視頻等多媒體文件進行管理也就必不可少。多媒體文件的管理包括訪問飛機存儲空間內(nèi)的多媒體文件資源、獲取多媒體文件列表與列表狀態(tài)、視頻文件播放等。
5 p$ g* A4 w; H2 i2 l) n3 u下圖為完整的接口展示以及接口調(diào)用流程示例。
8 F8 d) q1 A. ?( m多媒體文件管理調(diào)用流程+ n+ i2 {( i$ t$ J9 `
ln5lcvw2imq64018791819.png (110.77 KB, 下載次數(shù): 0)
下載附件
保存到相冊
ln5lcvw2imq64018791819.png
2024-9-11 09:52 上傳
視頻文件播放調(diào)用流程2 g- @. c% B. X8 O
|
|