カスタムフォローMe Mission Dji Android SDK -- android フィールド と dji-sdk フィールド 関連 問題

Custom Follow Me Mission DJI Android SDK












0
vote

問題

日本語

このPOSTと同様に、カスタム座標を提供することによってDji Phantom 4を使用してフォローミッションを作成しようとしています。 -mission-dji-mobile-sdk-for-Android「カスタム座標」フォローME MISSION DJI MOBILE SDK for Android

私の現在のコードは次のようになります:

<事前> <コード> private double lat = 48.5561726; private double lng = 12.1138481; private float initHeight = 10f; private LocationCoordinate2D location; if (getFollowMeMissionOperator().getCurrentState().toString().equals(FollowMeMissionState.READY_TO_EXECUTE.toString())){ getFollowMeMissionOperator().updateFollowingTarget(new LocationCoordinate2D(lat + 0.0001d, lng), new CommonCallbacks.CompletionCallback() { @Override public void onResult(DJIError djiError) { setResultToToast("Mission updateFollowingTarget: " + (djiError == null ? "Successfully" : djiError.getDescription())); } }); //Toast.makeText(getApplicationContext(), "updateFollowingTarget...", Toast.LENGTH_SHORT).show(); Log.println(Log.INFO,"FOLLOW", "Before"); try{ Thread.sleep(2500); }catch (InterruptedException e){ setResultToToast("InterruptedException!" + e.getMessage()); } getFollowMeMissionOperator().startMission(FollowMeMission.getInstance().initUserData(lat + 0.0001d , lng, initHeight), new CommonCallbacks.CompletionCallback() { @Override public void onResult(DJIError djiError) { setResultToToast("Mission Start: " + (djiError == null ? "Successfully" : djiError.getDescription())); }}); } else{ Toast.makeText(getApplicationContext(), getFollowMeMissionOperator().getCurrentState().toString(), Toast.LENGTH_SHORT).show(); }

私はこのトピック http://forum.dev.dji.com/thread-33716-1-1.html

何が起こるのか、私はfollowme()を呼び出し、2.5秒後にメッセージ "ミッションスタート:成功"を取得しますが、UpdateFollingTarget()からのコールバックがありません。それから何も起こらず、ドローンはそれがどこにあるところを維持します。

私は何をしていますか? UpdateFollingTarget()とStartmission()を正しく使用する方法はありますか?

英語

I am trying to create a FollowMeMission using the DJI Phantom 4 by providing custom coordinates, similar to this post Custom coordinates on Follow me Mission DJI Mobile SDK for android

My current code looks like this:

private double lat = 48.5561726; private double lng = 12.1138481; private float initHeight = 10f; private LocationCoordinate2D location;      if (getFollowMeMissionOperator().getCurrentState().toString().equals(FollowMeMissionState.READY_TO_EXECUTE.toString())){         getFollowMeMissionOperator().updateFollowingTarget(new LocationCoordinate2D(lat + 0.0001d, lng), new CommonCallbacks.CompletionCallback() {             @Override             public void onResult(DJIError djiError) {                 setResultToToast("Mission updateFollowingTarget: " + (djiError == null ? "Successfully" : djiError.getDescription()));             }         });         //Toast.makeText(getApplicationContext(), "updateFollowingTarget...", Toast.LENGTH_SHORT).show();         Log.println(Log.INFO,"FOLLOW", "Before");          try{             Thread.sleep(2500);         }catch (InterruptedException e){             setResultToToast("InterruptedException!" + e.getMessage());         }          getFollowMeMissionOperator().startMission(FollowMeMission.getInstance().initUserData(lat + 0.0001d , lng, initHeight), new CommonCallbacks.CompletionCallback() {             @Override             public void onResult(DJIError djiError) {                 setResultToToast("Mission Start: " + (djiError == null ? "Successfully" : djiError.getDescription()));             }});     }     else{         Toast.makeText(getApplicationContext(), getFollowMeMissionOperator().getCurrentState().toString(), Toast.LENGTH_SHORT).show();     } 

I even added a 2.5 sec sleep before calling startMission() as advised in this topic http://forum.dev.dji.com/thread-33716-1-1.html

What happens is, i invoke FollowMe() and after 2.5 sec i get the message "Mission Start: Successfull", but without any callback from updateFollowingTarget(). Then nothing happens, the drone stays where it is.

What am i doing wrong? Is the way i use updateFollowingTarget() and startMission() even right?

</div
     
   
   

回答リスト

0
 
vote
vote
ベストアンサー
 

この問題の原因は次のとおりです。 1.特定の頻度で使用するタイマーを更新する必要があります。 2.移動オブジェクト(次のターゲット)は、その動的な場所を提供する必要があります。
あなたの訴訟のためにそれを洗練するために以下のコードを参照してください:

<事前> <コード> private float initHeight = 10f; private LocationCoordinate2D movingObjectLocation; private AtomicBoolean isRunning = new AtomicBoolean(false); private Subscription timmerSubcription; private Observable<Long> timer =Observable.timer(100, TimeUnit.MILLISECONDS).observeOn(Schedulers.computation()).repeat(); private void followMeStart(){ if (getFollowMeMissionOperator().getCurrentState().toString().equals(FollowMeMissionState.READY_TO_EXECUTE.toString())){ //ToDo: You need init or get the location of your moving object which will be followed by the aircraft. getFollowMeMissionOperator().startMission(FollowMeMission.getInstance().initUserData(movingObjectLocation.getLatitude() , movingObjectLocation.getLongitude(), initHeight), new CommonCallbacks.CompletionCallback() { @Override public void onResult(DJIError djiError) { setResultToToast("Mission Start: " + (djiError == null ? "Successfully" : djiError.getDescription())); }}); if (!isRunning.get()) { isRunning.set(true); timmerSubcription = timer.subscribe(new Action1<Long>() { @Override public void call(Long aLong) { getFollowMeMissionOperator().updateFollowingTarget(new LocationCoordinate2D(movingObjectLocation.getLatitude(), movingObjectLocation.getLongitude()), new CommonCallbacks.CompletionCallback() { @Override public void onResult(DJIError error) { isRunning.set(false); } }); } }); } } else{ Toast.makeText(getApplicationContext(), getFollowMeMissionOperator().getCurrentState().toString(), Toast.LENGTH_SHORT).show(); } }
 

The causes on this issue are: 1. We need use timer to updateFollowingTarget in a given frequency. 2. The moving object (following target) need provide its dynamic location.
Please refer to below code to refine it for your case:

private float initHeight = 10f; private LocationCoordinate2D movingObjectLocation; private AtomicBoolean isRunning = new AtomicBoolean(false); private Subscription timmerSubcription; private Observable<Long> timer =Observable.timer(100, TimeUnit.MILLISECONDS).observeOn(Schedulers.computation()).repeat();  private void followMeStart(){     if (getFollowMeMissionOperator().getCurrentState().toString().equals(FollowMeMissionState.READY_TO_EXECUTE.toString())){         //ToDo: You need init or get the location of your moving object which will be followed by the aircraft.          getFollowMeMissionOperator().startMission(FollowMeMission.getInstance().initUserData(movingObjectLocation.getLatitude() , movingObjectLocation.getLongitude(), initHeight), new CommonCallbacks.CompletionCallback() {             @Override             public void onResult(DJIError djiError) {                 setResultToToast("Mission Start: " + (djiError == null ? "Successfully" : djiError.getDescription()));             }});          if (!isRunning.get()) {             isRunning.set(true);             timmerSubcription = timer.subscribe(new Action1<Long>() {                 @Override                 public void call(Long aLong) {                     getFollowMeMissionOperator().updateFollowingTarget(new LocationCoordinate2D(movingObjectLocation.getLatitude(),                                                                                                 movingObjectLocation.getLongitude()),                                                                        new CommonCallbacks.CompletionCallback() {                                                                             @Override                                                                            public void onResult(DJIError error) {                                                                                isRunning.set(false);                                                                            }                                                                        });                 }             });         }     } else{         Toast.makeText(getApplicationContext(), getFollowMeMissionOperator().getCurrentState().toString(), Toast.LENGTH_SHORT).show();     }  } 
</div
 
 

関連する質問

0  自動ミッション中に写真を撮るときにどのメソッドが呼び出されますか?  ( Which method is called when taking a picture during auto mission ) 
トリガーが自動ミッションで発生したときに知りたいのですが。次の方法では、内部ストレージを持つ製品が簡単です。次の方法は、すべての新しいピクチャのイメージカウントラベルを更新します。 <事前> <コード> func camera(_ camera: DJICam...

1  Android:RTMPを介してH264 RAWデータをライブストリームサーバーに公開する方法  ( Android how publish h264 raw data to live stream server via rtmp ) 
ドローンからWowza Streaming Engineサーバーへのライブストリームビデオを希望します。 H264 H264 rawデータを手に入れました。 HTML "REL =" NOFOLLOW NOREFERRER ">このコールバック、そして私...

1  ジンバル回転 -​​ 回転前に焼成された方法を搭載した  ( Gimbal rotation withcompletion method fired before rotation completes ) 
ジンバルを回転させた仮想スティックの任務で回転させると、ジンバルが所望の程度のピッチングが終了する前に完了関数が発射されているようです。これは予想されていますか? SDKドキュメントの仮想スティックの例を見て、スリープまたはNSTIMERがこれらのシナリオを軽...

2  Dji SDKの新しいDJikeyManager  ( New djikeymanager in dji sdk ) 
SDK 4.0では、DjikeyManagerが紹介されました。 関数です。 <事前> <コード> let batteryLevelKey = DJIBatteryKey(param: DJIBatteryParamChargeRemainingInPer...

1  ROSのOSDK:ウェイポイントで写真を撮る  ( Osdk with ros taking picture at waypoints ) 
私はDji行列100の任務を実装しています。私はミッションフレームワークを使い、各ミッションウェイポイントで自動的に写真を撮る必要があります。ウェイポイントのアクション変数をチェックしますが、ウェイポイントに達すると1つのピクチャが取られるようにアクションを定...

1  Windows用のDJI SDKを使用してMAVIC 2からGPSデータを取得する方法は?  ( How to get gps data from mavic 2 using dji sdk for windows ) 
Windows SDKを使用します。 メソッドを使用してGPSデータを取得しようとしています。 <事前> <コード> .exe2 <事前> <コード> .exe3 その結果、応答に理解可能な値を取得します。 <事前> <コード> .exe4 どういう...

0  DJI M210にどのシミュレーション環境を使用することができます  ( Which simulation environment can be used for dji m210 ) 
M210 V2に実装するためのアルゴリズムを設計するためのROS OSDKで作業していますが、実際のハードウェアに展開する前にこれらのアルゴリズムをシミュレーション環境で確認します。どのシミュレーション環境がDJI M210をサポートしていますか?だから私は...

0  DJI仮想スティック本体方向  ( Dji virtual stick body direction ) 
href="https://i.stack.imgur.com/yl7kt.jpg" REL="nofollowNoreferrer"> sketch_image スケッチの北東でのドローン(dji)見出し 私のドローンが速度と 座標システムでSendVi...

0  Djigo App Flightプランログファイルにアクセスする方法  ( How to access the djigo app flight plan log files ) 
HeguaryDrones App ( Webサイト)。このアプリは、それらのアプリのDJIログイン認証情報を検証しますが、DJI SDKのマニュアルでは、DJI-Loginとログファイルへのアクセスに関する情報がありません。 ...

1  Android - DJI UX SDKとESPRESSO - VerifyError  ( Android dji ux sdk and espresso verifyerror ) 
次のエラーを取り除くために、 build.gradle ファイルにはどのようなモジュールを除外する必要があります。 <事前> <コード> java.lang.VerifyError: Verifier rejected class dji.keysdk.Cam...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有