dji-sdk / Mobile-SDK-Android

DJI Mobile SDK for Android: http://developer.dji.com/mobile-sdk/
Other
972 stars 579 forks source link

Inconsistent waypoint mission progress #1015

Open fernando-s97 opened 2 years ago

fernando-s97 commented 2 years ago

Hi!

Problem

At the exact moment the mission starts, my WaypointMissionProgress notifies the target waypoint as being 0 and that it has already arrived at it, even if the drone hasn't even taken off. This makes my app behave in unexpected ways. The last waypoint gets notified three times also.

Is this an expected or known behavior? How could I fix it?

Environment

Android 11 SDK 4.15 Phantom 4 Pro V2 with latest firmware and flysafe database (DJI Go 4 didn't warn about any available updates)

Mission

{
   "autoFlightSpeed":12.5,
   "finishedAction":"GO_HOME",
   "flightPathMode":"CURVED",
   "gotoFirstWaypointMode":"SAFELY",
   "headingMode":"AUTO",
   "maxFlightSpeed":15.0,
   "missionID":3,
   "pointOfInterest":null,
   "repeatTimes":1,
   "waypointCount":10,
   "waypointList":[
      {
         "actionRepeatTimes":1,
         "actionTimeoutInSeconds":999,
         "altitude":30.0,
         "coordinate":{
            "latitude":-23.160064680262902,
            "longitude":-45.793138167755586,
            "valid":true
         },
         "cornerRadiusInMeters":0.2,
         "gimbalPitch":0.0,
         "heading":148,
         "isUseCustomDirection":false,
         "shootPhotoDistanceInterval":0.0,
         "shootPhotoTimeInterval":0.0,
         "speed":12.5,
         "turnMode":"COUNTER_CLOCKWISE",
         "waypointActions":[

         ],
         "headingInner":148
      },
      {
         "actionRepeatTimes":1,
         "actionTimeoutInSeconds":999,
         "altitude":30.63971,
         "coordinate":{
            "latitude":-23.16035352517325,
            "longitude":-45.79294537267839,
            "valid":true
         },
         "cornerRadiusInMeters":0.2,
         "gimbalPitch":0.0,
         "heading":59,
         "isUseCustomDirection":false,
         "shootPhotoDistanceInterval":0.0,
         "shootPhotoTimeInterval":0.0,
         "speed":12.5,
         "turnMode":"COUNTER_CLOCKWISE",
         "waypointActions":[

         ],
         "headingInner":59
      },
      {
         "actionRepeatTimes":1,
         "actionTimeoutInSeconds":999,
         "altitude":30.344177,
         "coordinate":{
            "latitude":-23.16028490142418,
            "longitude":-45.79281902897924,
            "valid":true
         },
         "cornerRadiusInMeters":0.2,
         "gimbalPitch":0.0,
         "heading":-31,
         "isUseCustomDirection":false,
         "shootPhotoDistanceInterval":0.0,
         "shootPhotoTimeInterval":0.0,
         "speed":12.5,
         "turnMode":"CLOCKWISE",
         "waypointActions":[

         ],
         "headingInner":329
      },
      {
         "actionRepeatTimes":1,
         "actionTimeoutInSeconds":999,
         "altitude":29.966614,
         "coordinate":{
            "latitude":-23.15991783895118,
            "longitude":-45.793064031946955,
            "valid":true
         },
         "cornerRadiusInMeters":0.2,
         "gimbalPitch":0.0,
         "heading":24,
         "isUseCustomDirection":false,
         "shootPhotoDistanceInterval":0.0,
         "shootPhotoTimeInterval":0.0,
         "speed":12.5,
         "turnMode":"CLOCKWISE",
         "waypointActions":[

         ],
         "headingInner":24
      },
      {
         "actionRepeatTimes":1,
         "actionTimeoutInSeconds":999,
         "altitude":29.104614,
         "coordinate":{
            "latitude":-23.159770997639463,
            "longitude":-45.79298989630087,
            "valid":true
         },
         "cornerRadiusInMeters":0.2,
         "gimbalPitch":0.0,
         "heading":148,
         "isUseCustomDirection":false,
         "shootPhotoDistanceInterval":0.0,
         "shootPhotoTimeInterval":0.0,
         "speed":12.5,
         "turnMode":"COUNTER_CLOCKWISE",
         "waypointActions":[

         ],
         "headingInner":148
      },
      {
         "actionRepeatTimes":1,
         "actionTimeoutInSeconds":999,
         "altitude":29.96222,
         "coordinate":{
            "latitude":-23.16021627767511,
            "longitude":-45.79269268540955,
            "valid":true
         },
         "cornerRadiusInMeters":0.2,
         "gimbalPitch":0.0,
         "heading":59,
         "isUseCustomDirection":false,
         "shootPhotoDistanceInterval":0.0,
         "shootPhotoTimeInterval":0.0,
         "speed":12.5,
         "turnMode":"COUNTER_CLOCKWISE",
         "waypointActions":[

         ],
         "headingInner":59
      },
      {
         "actionRepeatTimes":1,
         "actionTimeoutInSeconds":999,
         "altitude":29.96521,
         "coordinate":{
            "latitude":-23.160147653926042,
            "longitude":-45.79256634196932,
            "valid":true
         },
         "cornerRadiusInMeters":0.2,
         "gimbalPitch":0.0,
         "heading":-31,
         "isUseCustomDirection":false,
         "shootPhotoDistanceInterval":0.0,
         "shootPhotoTimeInterval":0.0,
         "speed":12.5,
         "turnMode":"CLOCKWISE",
         "waypointActions":[

         ],
         "headingInner":329
      },
      {
         "actionRepeatTimes":1,
         "actionTimeoutInSeconds":999,
         "altitude":28.554016,
         "coordinate":{
            "latitude":-23.15962415632774,
            "longitude":-45.79291576081732,
            "valid":true
         },
         "cornerRadiusInMeters":0.2,
         "gimbalPitch":0.0,
         "heading":24,
         "isUseCustomDirection":false,
         "shootPhotoDistanceInterval":0.0,
         "shootPhotoTimeInterval":0.0,
         "speed":12.5,
         "turnMode":"CLOCKWISE",
         "waypointActions":[

         ],
         "headingInner":24
      },
      {
         "actionRepeatTimes":1,
         "actionTimeoutInSeconds":999,
         "altitude":28.408203,
         "coordinate":{
            "latitude":-23.159477315016023,
            "longitude":-45.79284162549635,
            "valid":true
         },
         "cornerRadiusInMeters":0.2,
         "gimbalPitch":0.0,
         "heading":148,
         "isUseCustomDirection":false,
         "shootPhotoDistanceInterval":0.0,
         "shootPhotoTimeInterval":0.0,
         "speed":12.5,
         "turnMode":"COUNTER_CLOCKWISE",
         "waypointActions":[

         ],
         "headingInner":148
      },
      {
         "actionRepeatTimes":1,
         "actionTimeoutInSeconds":999,
         "altitude":29.958801,
         "coordinate":{
            "latitude":-23.160079030176973,
            "longitude":-45.79243999865855,
            "valid":true
         },
         "cornerRadiusInMeters":0.2,
         "gimbalPitch":0.0,
         "heading":17,
         "isUseCustomDirection":false,
         "shootPhotoDistanceInterval":0.0,
         "shootPhotoTimeInterval":0.0,
         "speed":12.5,
         "turnMode":"CLOCKWISE",
         "waypointActions":[

         ],
         "headingInner":17
      }
   ],
   "exitMissionOnRCSignalLostEnabled":false,
   "gimbalElevationOptimizeEnabled":false,
   "gimbalPitchRotationEnabled":false
}

Code

DJISDKManager.getInstance().getMissionControl().getWaypointMissionOperator()
    .addListener(new WaypointMissionOperatorListener() {
        @Override
        public void onDownloadUpdate(@NonNull final WaypointMissionDownloadEvent __) {
        }

        @Override
        public void onUploadUpdate(@NonNull final WaypointMissionUploadEvent __) {
        }

        @Override
        public void onExecutionUpdate(@NonNull final WaypointMissionExecutionEvent event) {
            final NcbWaypointExecutionProgress ncbProgress = NcbWaypointExecutionProgress
                .fromDji(event.getProgress());
            Logger.d(ncbProgress == null ? null : ncbProgress.toString());
        }

        @Override
        public void onExecutionStart() {
        }

        @Override
        public void onExecutionFinish(@Nullable final DJIError djiError) {
        }
    });

Log of some executions

2021-08-25 15:53:28.316 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=0, isWaypointReached=true) 2021-08-25 15:53:59.517 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=0, isWaypointReached=true) 2021-08-25 15:53:59.709 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=1, isWaypointReached=false) 2021-08-25 15:54:06.725 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=1, isWaypointReached=true) 2021-08-25 15:54:07.115 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=2, isWaypointReached=false) 2021-08-25 15:54:11.124 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=2, isWaypointReached=true) 2021-08-25 15:54:11.615 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=3, isWaypointReached=false) 2021-08-25 15:54:19.205 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=3, isWaypointReached=true) 2021-08-25 15:54:19.506 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=4, isWaypointReached=false) 2021-08-25 15:54:24.007 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=4, isWaypointReached=true) 2021-08-25 15:54:24.516 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=5, isWaypointReached=false) 2021-08-25 15:54:33.027 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=5, isWaypointReached=true) 2021-08-25 15:54:33.414 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=6, isWaypointReached=false) 2021-08-25 15:54:37.414 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=6, isWaypointReached=true) 2021-08-25 15:54:37.925 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=7, isWaypointReached=false) 2021-08-25 15:54:47.216 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=7, isWaypointReached=true) 2021-08-25 15:54:47.627 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=8, isWaypointReached=false) 2021-08-25 15:54:52.127 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=8, isWaypointReached=true) 2021-08-25 15:54:52.525 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=9, isWaypointReached=false) 2021-08-25 15:55:02.801 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=9, isWaypointReached=true) 2021-08-25 15:55:02.914 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=9, isWaypointReached=false)

2021-08-25 15:56:14.626 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=0, isWaypointReached=true) 2021-08-25 15:56:45.843 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=0, isWaypointReached=true) 2021-08-25 15:56:46.024 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=1, isWaypointReached=false) 2021-08-25 15:56:52.924 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=1, isWaypointReached=true) 2021-08-25 15:56:53.425 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=2, isWaypointReached=false) 2021-08-25 15:56:57.429 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=2, isWaypointReached=true) 2021-08-25 15:56:57.826 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=3, isWaypointReached=false) 2021-08-25 15:57:05.428 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=3, isWaypointReached=true) 2021-08-25 15:57:05.813 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=4, isWaypointReached=false) 2021-08-25 15:57:10.314 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=4, isWaypointReached=true) 2021-08-25 15:57:10.817 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=5, isWaypointReached=false) 2021-08-25 15:57:19.313 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=5, isWaypointReached=true) 2021-08-25 15:57:19.725 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=6, isWaypointReached=false) 2021-08-25 15:57:23.751 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=6, isWaypointReached=true) 2021-08-25 15:57:24.116 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=7, isWaypointReached=false) 2021-08-25 15:57:33.516 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=7, isWaypointReached=true) 2021-08-25 15:57:33.826 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=8, isWaypointReached=false) 2021-08-25 15:57:38.216 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=8, isWaypointReached=true) 2021-08-25 15:57:38.715 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=9, isWaypointReached=false) 2021-08-25 15:57:48.955 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=9, isWaypointReached=true) 2021-08-25 15:57:49.114 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=9, isWaypointReached=false)

2021-08-25 15:59:45.922 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=0, isWaypointReached=true) 2021-08-25 16:00:18.953 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=0, isWaypointReached=true) 2021-08-25 16:00:19.125 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=1, isWaypointReached=false) 2021-08-25 16:00:26.114 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=1, isWaypointReached=true) 2021-08-25 16:00:26.514 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=2, isWaypointReached=false) 2021-08-25 16:00:30.517 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=2, isWaypointReached=true) 2021-08-25 16:00:30.924 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=3, isWaypointReached=false) 2021-08-25 16:00:38.517 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=3, isWaypointReached=true) 2021-08-25 16:00:38.923 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=4, isWaypointReached=false) 2021-08-25 16:00:43.313 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=4, isWaypointReached=true) 2021-08-25 16:00:43.823 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=5, isWaypointReached=false) 2021-08-25 16:00:52.313 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=5, isWaypointReached=true) 2021-08-25 16:00:52.826 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=6, isWaypointReached=false) 2021-08-25 16:00:56.816 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=6, isWaypointReached=true) 2021-08-25 16:00:57.217 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=7, isWaypointReached=false) 2021-08-25 16:01:06.526 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=7, isWaypointReached=true) 2021-08-25 16:01:06.815 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=8, isWaypointReached=false) 2021-08-25 16:01:11.314 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=8, isWaypointReached=true) 2021-08-25 16:01:11.806 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=9, isWaypointReached=false) 2021-08-25 16:01:22.001 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=9, isWaypointReached=true) 2021-08-25 16:01:22.124 D: │ NcbWaypointExecutionProgress(targetWaypointIndex=9, isWaypointReached=false)

dji-dev commented 2 years ago

Agent comment from DJI SDK in Zendesk ticket #52312:

尊敬的开发者,感谢您联系DJI 大疆创新 由于github不是我们主要的咨询渠道,您的问题可能跟进不及时。我们建议您通过填写表单( https://djisdksupport.zendesk.com/hc/zh-cn/requests/new )向我们反馈问题。或者您也可以在论坛发帖,与其它开发者交流。论坛链接:https://djisdksupport.zendesk.com/hc/zh-cn/community/topics

Dear developer, thank you for contacting DJI. Since github is not our main consultation channel, your questions may not be followed up in time. We recommend that you fill in the form (https://djisdksupport.zendesk.com/hc/en-us/requests/new) to report problems to us. Or you can post in the forum to communicate with other developers. Forum link: https://djisdksupport.zendesk.com/hc/zh-cn/community/topics

°°°

dji-dev commented 2 years ago

Agent comment from sean.zhou in Zendesk ticket #52312:

Dear Client, Thank you for contacting DJI.

Can you provide the information returned by event.getProgress()? When aircraft does not arrived at point, the targetWaypointIndex should be 0 and isWaypointReached should be false and executeState is INITIALIZING. When aircraft arrived at point, the targetWaypointIndex should be 0 and isWaypointReached should be true and executeState is BEGIN_ACTION. You can determine the state of the aircraft based on these three attributes.

Hopefully our solution can help you.

Kindly Regards, DJI Developer Support

°°°

VineetTambe commented 2 years ago

Hey, I am facing the exact same issue.

Is there any fix to this?? Sometimes when I start a mission the I directly get "execution finish" I am using the waypoint V2 Listener -> I directly get a callback to: onExecutionFinish with getting any response from onExecutionStart

fernando-s97 commented 2 years ago

@VineetTambe the solved some issues in the latest SDK (4.15.1 if I'm not wrong), but I'm using the waypoint mission v1, so I'm not sure if this will help you