大疆社区

标题: MSDK:航点飞行 2.0 DJI WaypointV2 剖析 [打印本页]

作者: 手法正宗卓师傅    时间: 2020-6-1
标题: MSDK:航点飞行 2.0 DJI WaypointV2 剖析
本帖最后由 手法正宗卓师傅 于 2020-6-1 18:04 编辑

在 MSDK 4.12 版本中大疆终于推出了升级版的 waypoint mission。目前(2020.6)WaypointV2 只支持最近发布的 M300 机型(因此如果想用上 V2,你得先掏 5 万块钱买台飞机)。其他的机型还是继续使用原有的 waypoint mission,因此这次的升级并不意味着原来的 waypoint 被废弃,还将长期共存下去。目前的悬念是不清楚 WaypointV2 的定位是只在 M 系列上支持,还是未来会支持到万元级的机型(Mavic3?),又或者针对新的消费级无人机有缩水版的 waypointV2?否则对于开发者兼容是个很郁闷的问题,因为在软件界面上都是规划一次飞行任务,然而在实现的时候要针对不同的机型使用两组完全不相同的接口。

WaypointV2 升级亮点

任务航点数量提升至65535 个
这是最重要的提升。原来的 100 个航点对于各种类型的作业都产生了巨大的限制。100 个航点数量的设计充满了不合理,不合理的地方在于这个限制持续了好几年的时间。如果是最初版本的硬件和飞控限制在 100 个航点可以理解,但是在随后的几年里这个限制一直没有被解决就给人一种不思进取的感觉了。
100 个航点的限制一方面跟飞控的内存大小有关系,可能内存空间有限,留给航点的空间只够放 100 个航点。另外一方面早期的无人机续航水平比较低,可能产品觉得一块电池 100 个航点绝对够飞了。我想这也是为什么 V2 首先支持 M300 的原因:必须要有足够强的续航和高端的飞控才能体现 V2 的升级亮点。

航点的飞行路径更加灵活
原来的航点轨迹只有直线和曲线两个选项。如果是在航拍场景下只有两种还是不太够用。原来的曲线路径必须设置一个曲线弧度半径,因此如果选定了两个航点希望从 A 点出发弧线飞往 B 点,然后刚好停在 B 点,这在原来的接口里是做不到的。只能弧线绕过 B 点,不能准确的经过 B 点。

航点支持兴趣点设置
V1 中整个任务只能有一个兴趣点,现在每个航点可以设置自己的兴趣点。对于航拍类型的作业很友好,可能一条航线里有两个拍摄主体,原来只能分成两个任务执行,现在可以在一个任务里通过给航点设置兴趣点实现。

更丰富的航点动作
V2 的航点动作类型增加了一些,但是对相机的动作还是没有增加。核心的改进是动作的触发时机更加丰富了,航点动作可以互相关联,可以设置定时器。专门定义了一个类来指定动作的触发时机,有更高的自由度。

支持多云台同时动作
M 系列机型专用,没了解。

接口改动
WaypointV2 相当于是一个全新的任务类型,虽然也是 waypoint mission,但是提供的 API 还是发生了不小变化。这个部分来介绍一下 SDK 提供的接口。

基本使用
基本的使用方式和其他 mission 类似,只是名称都在原来的基础上加上了 V2:
let waypoint1 = DJIWaypointV2(coordinate: CLLocationCoordinate2D(latitude: 120, longitude: 20))
let waypoint2 = DJIWaypointV2(coordinate: CLLocationCoordinate2D(latitude: 120, longitude: 20))

let v2Mission = DJIMutableWaypointV2Mission()
v2Mission.addWaypoints([waypoint1, waypoint2])
     
DJISDKManager.missionControl()?.waypointV2MissionOperator().uploadMission(completion: { (error) in
            // 上传完成
        })
DJISDKManager.missionControl()?.waypointV2MissionOperator().startMission(completion: { (error) in
            //执行
        })

兴趣点
因为原来一个任务只有一个兴趣点,所以兴趣点的属性在 mission 上:

let v1Mission = DJIMutableWaypointMission()
v1Mission.pointOfInterest = CLLocationCoordinate2D(latitude: 120, longitude: 20)

在 V2 中属性移动到了 DJIWaypointV2 上:

let waypoint2 = DJIWaypointV2(coordinate: CLLocationCoordinate2D(latitude: 120, longitude: 20))
waypoint2.pointOfInterest = CLLocationCoordinate2D(latitude: 120, longitude: 20)

飞行路径
原来的飞行路径只有两种:默认的直线和曲线。
V2 的飞行路径枚举(DJIWaypointV2FlightPathMode)多了几种类型:


主要的区别是原来飞行路径是弧线时会绕过航点,就是 V2 中的 CoordinateTurn。但是有时只是希望两个航点间的路径是曲线,弧线的终点还是希望经过航点。这就是 V2 中的 GoToPointAlongACurve。
WaypointAction V1 的 action 在 DJI SDK waypoint mission 使用教程(上):属性详解 中我已经做过介绍,这里简单的复习一下:
V2 中的 action 种类并没有增加,主要加强的地方在于 action 的触发时机。原来的设计里 action 关联在 waypoint 上,waypoint 到达后按顺序触发这些动作。如果想在 action 之间做关联是做不到的。在 V2 中针对触发时机进行了完全的重新设计。

基本使用方式
在对象属性上,触发的时机单独抽象出成DJIWaypointV2Trigger,执行的动作也使用DJIWaypointV2Actuator声明。因为每个 action 自身定义了触发时机,也就不再需要与具体的航点关联,和 waypoint mission 关联就可以了。因此 action 最后是通过 operator 添加。

在 V1 中因为触发的时机只和航点有关,叫 WaypointAction 是很合理的。在 V2 中,action 的航点触发只是其中的一种方式,action 的范畴其实变得更大的了,准确的定义应该是 WaypointMissionAction 了。但是这里估计是为了让原有的开发者比较熟悉这个概念,所以还是沿用了原来的命名。
下面是一个基本的使用方式:

let trigger = DJIWaypointV2Trigger()
trigger.actionTriggerType = .reachPoint
let reachPointParam = DJIWaypointV2ReachPointTriggerParam()
reachPointParam.startIndex = 1
reachPointParam.waypointCountToTerminate = 2
trigger.reachPointTriggerParam = reachPointParam

let actuator = DJIWaypointV2Actuator()
actuator.type = .camera
let cameraActuatorParam = DJIWaypointV2CameraActuatorParam()
cameraActuatorParam.operationType = .takePhoto
actuator.cameraActuatorParam = cameraActuatorParam

let action = DJIWaypointV2Action()
action.trigger = trigger
action.actuator = actuator

DJISDKManager.missionControl()?.waypointV2MissionOperator().uploadWaypointActions([action], withCompletion: { (error) in
    // 上传完成
})

Trigger
Action 的触发类型有 4 中:


Actuator
动作的类型和原来几乎一致,只是重新进行了分类。原来云台旋转只能指定角度,马上执行。V2 中如果指定云台旋转类型为轨迹时,可以设置云台旋转的时间。

总结
非常开心祖传的 Waypoint Mission 终于得到了升级。半年前和 SDK 团队沟通的时候就对 100 个航点数的限制和残疾的 waypoint action 表达了不满,SDK 团队当时表示已经在做了。最后果然升级了,只是没想到需要加钱。
WaypointV2 我想最大的问题是只支持 5 万起步的 M300。行业应用里上来无人机就买顶配我想占比也不很多。如果 V2 的门槛是 M300,等于没有改变现状。所以希望 WaypointV2 能够尽快普及到主流无人机上。

Waypoint Action 的执行类型没有增加我也感觉非常遗憾。相机的操作是非常多的,然而目前只提供了三种非常简单的操作:拍单张照片,录制视频。拍照的模式也分为好几种,比如测绘中常用的间隔拍照无法触发。相机的参数设置也无法在 action 中实现,比如焦段、快门速度等。期待有生之年可以看到 WaypointV2 升级到 V3 吧。


作者: 想养一条边牧    时间: 2020-6-1

作者: Spacemarine    时间: 2020-6-2
本来还想写一篇航点任务V2.0的介绍的没想到被你抢先了,赞一个!写得很详细。
作者: albertng    时间: 2020-9-1
Spacemarine6-2 15:52
本来还想写一篇航点任务V2.0的介绍的没想到被你抢先了,赞一个!写得很详细。
求解模拟地图航点任务都成功,实地飞的时候,启动后,提示成功,可是仅仅1秒,就提示任务成功结束。无人机根本就没有飞起来,机翼上的马达都没有反应
作者: kv886    时间: 2020-9-3
albertng9-1 16:23
求解模拟地图航点任务都成功,实地飞的时候,启动后,提示成功,可是仅仅1秒,就提示任务成功结束。无人机根本就没有飞起来,机翼上的马达都没有反应
航点不执行没报错的吗
作者: albertng    时间: 2020-9-9
kv8869-3 08:44
航点不执行没报错的吗
没有
作者: kv886    时间: 2020-9-11
albertng9-9 09:18
没有
不知道什么问题,还有一个办法就是看飞行数据,需要联系官方。
作者: 薛定谔的飞行仔    时间: 2021-3-1
棒棒的哈哈哈哈哈
作者: KMH    时间: 2021-4-12
你好,我用的是M300+H20云台,实际开发时候发现云台的焦距设置和对焦中心设置这两个功能无法实现,比如我焦距设置成7,但是云台焦距却变为*2倍,对焦中心设置的话会报错,说我的动作不合法或者为空。




欢迎光临 大疆社区 (https://bbs.dji.com/) Powered by Discuz! X3.2