NPE 在 WaypointMissionOperator.checkParameters 与 DJI Matrice 100 或 600
NPE in WaypointMissionOperator.checkParameters with DJI Matrice 100 or 600
更新
尝试加载 Android SDK sample 更新到版本 4.11 的航点任务会导致内部空指针异常
先决条件:
- 一个 android phone 安装了更新到 4.11 的示例 SDK
- Matrice 100 / 600连接DJI小助手2
重现步骤:
- 打开示例 SDK
- 无人机连接后点击"Open"
- 点击"New Waypoint Mission Operator"
- 点击"Load"
- 应用因以下堆栈而崩溃
com.dji.sdk.sample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.dji.sdk.sample, PID: 14107
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference
at dji.common.mission.waypoint.Waypoint.checkParameters(Unknown Source:15)
at dji.common.mission.MissionUtils.checkEachWaypointValid(Unknown Source:18)
at dji.common.mission.MissionUtils.checkWaypointMissionParameters(Unknown Source:44)
at dji.common.mission.waypoint.WaypointMission$Builder.checkParameters(Unknown Source:10)
at dji.internal.mission.abstraction.waypoint.WaypointMissionAbstraction.a(Unknown Source:0)
at dji.sdk.mission.waypoint.WaypointMissionOperator.loadMission(Unknown Source:32)
at com.dji.sdk.sample.demo.missionoperator.WaypointMissionOperatorView.onClick(:107)
at android.view.View.performClick(View.java:6310)
at android.view.View$PerformClick.run(View.java:24970)
at android.os.Handler.handleCallback(Handler.java:794)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:6662)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
原问题
相同的代码在 P4A 上运行完美,但在 Matrice 100 / 600 上运行失败。
以下是我在 Kotlin 中编写的代码的相关部分。
- 创建 waypoints 的列表。
val waypointList: List<Waypoint> = data.points.map {
val waypoint = Waypoint(it.latitude, it.longitude, it.altitude)
waypoint.speed = 3
waypoint.heading = 0
waypoint.gimbalPitch = 0
waypoint.turnMode = WaypointTurnMode.CLOCKWISE
waypoint.actionRepeatTimes = 1
waypoint.actionTimeoutInSeconds = 3
waypoint.cornerRadiusInMeters = 1
waypoint
}
- 创建一个 WaypointMission.Builder 对象
val mission = WaypointMission.Builder()
.waypointList(waypointList)
.waypointCount(waypointList.size)
.autoFlightSpeed(10)
.repeatTimes(1)
.setGimbalPitchRotationEnabled(false)
.setExitMissionOnRCSignalLostEnabled(false)
.finishedAction(WaypointMissionFinishedAction.NO_ACTION)
.maxFlightSpeed(13)
.flightPathMode(WaypointMissionFlightPathMode.CURVED)
.headingMode(WaypointMissionHeadingMode.AUTO)
.gotoFirstWaypointMode(WaypointMissionGotoWaypointMode.POINT_TO_POINT)
- 任务。checkParameters()
- WaypointOperator.loadMission(mission.build())
- WaypointOperator.uploadMission()
使用 P4A:代码继续无误,然后转到航路点任务。
对于 Matrice 100,第 3 步中的 checkParameters
函数 returns 没有结果,代码只是停在这里, WaypointOperator.currentState
停留在 READY_TO_UPLOAD
我在过去 2 天里尝试了所有方法,我唯一能猜到的是我缺少 Matrice 100 需要的一些参数,但我不知道那可能是什么,也找不到文档中关于它的任何内容。
这是大疆的一个bug,但是在下个版本发布之前,他们给了我一个临时的解决方案。
After confirming, this problem only occurs when your aircraft is not mounting the camera.
So, for the temporary workaround, you can mount a camera on your drone when you using v4.11.
Also, this issue will be fixed in the coming v4.11.1 official release.
更新
尝试加载 Android SDK sample 更新到版本 4.11 的航点任务会导致内部空指针异常
先决条件:
- 一个 android phone 安装了更新到 4.11 的示例 SDK
- Matrice 100 / 600连接DJI小助手2
重现步骤:
- 打开示例 SDK
- 无人机连接后点击"Open"
- 点击"New Waypoint Mission Operator"
- 点击"Load"
- 应用因以下堆栈而崩溃
com.dji.sdk.sample E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.dji.sdk.sample, PID: 14107
java.lang.NullPointerException: Attempt to invoke interface method 'java.lang.Object java.util.Map.get(java.lang.Object)' on a null object reference
at dji.common.mission.waypoint.Waypoint.checkParameters(Unknown Source:15)
at dji.common.mission.MissionUtils.checkEachWaypointValid(Unknown Source:18)
at dji.common.mission.MissionUtils.checkWaypointMissionParameters(Unknown Source:44)
at dji.common.mission.waypoint.WaypointMission$Builder.checkParameters(Unknown Source:10)
at dji.internal.mission.abstraction.waypoint.WaypointMissionAbstraction.a(Unknown Source:0)
at dji.sdk.mission.waypoint.WaypointMissionOperator.loadMission(Unknown Source:32)
at com.dji.sdk.sample.demo.missionoperator.WaypointMissionOperatorView.onClick(:107)
at android.view.View.performClick(View.java:6310)
at android.view.View$PerformClick.run(View.java:24970)
at android.os.Handler.handleCallback(Handler.java:794)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:176)
at android.app.ActivityThread.main(ActivityThread.java:6662)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:547)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:873)
原问题
相同的代码在 P4A 上运行完美,但在 Matrice 100 / 600 上运行失败。
以下是我在 Kotlin 中编写的代码的相关部分。
- 创建 waypoints 的列表。
val waypointList: List<Waypoint> = data.points.map {
val waypoint = Waypoint(it.latitude, it.longitude, it.altitude)
waypoint.speed = 3
waypoint.heading = 0
waypoint.gimbalPitch = 0
waypoint.turnMode = WaypointTurnMode.CLOCKWISE
waypoint.actionRepeatTimes = 1
waypoint.actionTimeoutInSeconds = 3
waypoint.cornerRadiusInMeters = 1
waypoint
}
- 创建一个 WaypointMission.Builder 对象
val mission = WaypointMission.Builder()
.waypointList(waypointList)
.waypointCount(waypointList.size)
.autoFlightSpeed(10)
.repeatTimes(1)
.setGimbalPitchRotationEnabled(false)
.setExitMissionOnRCSignalLostEnabled(false)
.finishedAction(WaypointMissionFinishedAction.NO_ACTION)
.maxFlightSpeed(13)
.flightPathMode(WaypointMissionFlightPathMode.CURVED)
.headingMode(WaypointMissionHeadingMode.AUTO)
.gotoFirstWaypointMode(WaypointMissionGotoWaypointMode.POINT_TO_POINT)
- 任务。checkParameters()
- WaypointOperator.loadMission(mission.build())
- WaypointOperator.uploadMission()
使用 P4A:代码继续无误,然后转到航路点任务。
对于 Matrice 100,第 3 步中的 checkParameters
函数 returns 没有结果,代码只是停在这里, WaypointOperator.currentState
停留在 READY_TO_UPLOAD
我在过去 2 天里尝试了所有方法,我唯一能猜到的是我缺少 Matrice 100 需要的一些参数,但我不知道那可能是什么,也找不到文档中关于它的任何内容。
这是大疆的一个bug,但是在下个版本发布之前,他们给了我一个临时的解决方案。
After confirming, this problem only occurs when your aircraft is not mounting the camera.
So, for the temporary workaround, you can mount a camera on your drone when you using v4.11.
Also, this issue will be fixed in the coming v4.11.1 official release.