dji-sdk / Mobile-SDK-Android-V5

MSDK V5 Sample
Other
247 stars 126 forks source link

M350 使用 resumeMission() 指定 BreakPointInfo 无法从指定的断点处恢复航线任务。 #348

Closed Merpyzf closed 3 weeks ago

Merpyzf commented 4 weeks ago

测试环境

无人机:M350 RTK MSDK:v5.9.0

问题描述

你好,我在调用 resumeMission 恢复航线任务时,指定 BreakPointInfo 不生效(代码如下)。恢复任务后,无人机仍然是按照暂停处的航点顺序执行,并没有直接飞到我所指定的位置(waypointId: 36)。

 waypointMissionManager.resumeMission(
                BreakPointInfo(0, 36, 0.0, null, RecoverActionType.GoBackToRecordPoint),
                object: CommonCallbacks.CompletionCallback{
                    override fun onSuccess() {
                    }

                    override fun onFailure(p0: IDJIError) {
                    }
                }
            )

在文档中有如下说明: WX20240530-173214@2x

关于 RecoverActionType 这个枚举,个人感觉与 BreakPointInfo 这个参数存在矛盾,既然我已经指定断点的Id(waypointId: 36,waypointId 是否就是 waypointIndex?),那么 RecoverActionType 的作用是让无人机飞向飞行器暂停时的断点或下一个断点或下下个断点。下面所说的暂停时的断点是指 BreakPointInfo 中指定的,还是无人机暂停时所在的航点?

  1. GoBackToRecordPoint: 当航线任务恢复后,飞行器飞向暂停时的断点
  2. GoBackToNextPoint: 当航线任务恢复后,飞机飞往暂停时断点的下一个航点。
  3. GoBackToNextPoint: 当航线任务恢复后,飞机飞往暂停时断点的下下个航点。

我不确定是否对此方法的理解存在歧义。我想要基于此来实现 M350 的断点续飞功能。当无人机落到地面后,航线任务会被中断。我需要在换电后,让无人机飞到上次暂停的位置继续执行,由于 M350 不支持 queryBreakPointInfoFromAircraft() 方法,因此我选择了手动去构造断点信息。在任务启动后,先去暂停任务(若不先暂停,resumeMission将无法成功调用),然后再调用 resumeMission() 通过传递 BreakPointInfo 来完成断点续飞。但我遇到了问题,BreakPointInfo 不生效。

DJI Pilot2 是可以做到断点续飞的,我现在想确认 M350 或 M300 是否可以通过 MSDK 实现航线任务断点续飞功能?

dji-dev commented 3 weeks ago

Agent comment from yating.liao in Zendesk ticket #108652:

resumeMission 的 breakPointInfo 是否就不支持 M350 或 M300 呢? -->resumeMission 的 breakPointInfo 支持M350和M300,只是queryBreakPointInfoFromAircraft不支持这两款机型。你可以自己构建breakPointInfo去使用resumeMission。示例代码中有给出构建参考:https://github.com/dji-sdk/Mobile-SDK-Android-V5/blob/dev-sdk-main/SampleCode-V5/android-sdk-v5-sample/src/main/java/dji/sampleV5/aircraft/pages/WayPointV3Fragment.kt#L365

恢复任务后,无人机仍然是按照暂停处的航点顺序执行,并没有直接飞到我所指定的位置(waypointId: 36)。 -->这是因为M300和M350仅支持RecoverActionType,其他属性在这两款机型上都是不生效的。同时RecoverActionType也仅在这两款机型上生效,因此您会觉得BreakPointInfo存在矛盾,但如果他们适配的机型是不同的,那么功能上就不会有冲突了。

°°°

Merpyzf commented 3 weeks ago

关于您上面的回复提到的:

  1. "resumeMission 的 breakPointInfo 支持M350和M300"
  2. "这是因为M300和M350仅支持RecoverActionType,其他属性在这两款机型上都是不生效的。"

您在 1 上说:resumeMission 的 breakPointInfo 支持M350和M300,而 2 又说:M300 和 M350 仅支持 RecoverActionType,这句话的意思是说,breakPointInfo 中传递的参数只有 RecoverActionType 能起作用?我在编写测试 Demo 时,有参考您上面提到的代码,而不管我给 breakPointInfo 指定的续飞航点是什么都不会生效。

Merpyzf commented 3 weeks ago

我想跟您确认下,在 M300 和 M350 上当使用 resumeMission 恢复时,能够起作用的只有 RecoverActionType 参数?如果我要实现换电后续飞的功能,对于 M300 和 M350 机型只能自己实现对吗?

dji-dev commented 3 weeks ago

Agent comment from yating.liao in Zendesk ticket #108652:

在 M300 和 M350 上当使用 resumeMission 恢复时,能够起作用的只有 RecoverActionType 参数? -->是的,只有RecoverActionType生效。

如果我要实现换电后续飞的功能,对于 M300 和 M350 机型只能自己实现对吗? -->是的。飞机降落的时候就会退出航点任务,因此这个时候无法使用resumeMission去恢复航点任务。您需要实现生成剩余航线任务的功能去实现续飞。

°°°

Merpyzf commented 3 weeks ago

感谢回复,希望优化一下文档,目前对 resumeMission 的描述有点模糊不清。

dji-dev commented 3 weeks ago

Agent comment from yating.liao in Zendesk ticket #108652:

我会将您对文档的建议给到文档工程师。

°°°