大疆无人机开发:手写全景(思路 + 大疆的坑)

大疆手写全景的三个思路:

1.采用missionTimeLine的方式实现。

2.采用航点的方式WayPoint实现。

3.采用虚拟摇杆的方式VirtualStick实现。

第一种方案:

其中最符合软件开发思路的还是第一种方案,写好算法,将所有的action提交给timeLine就可以了。对于开发者来说无需关心内部是如何执行的,只需关注业务及算法就可以。简易Demo代码:

for (int j = 0; j < 9; j++) {
    if (j != 0) { // 首次不转机身
        AircraftYawAction yawAction = new AircraftYawAction(45, 20);
        elements.add(yawAction);
    }
    for (int i = 0; i < 5; i++) {
        double pitch = 0;
        Attitude attitude;
        // 以下计算为简易方式
        pitch = 30 - 30 * i;
        attitude = new Attitude((float) pitch, Rotation.NO_ROTATION, Rotation.NO_ROTATION);
        // 设置云台转动element
        GimbalAttitudeAction gimbalAction = new GimbalAttitudeAction(attitude);
        gimbalAction.setCompletionTime(3); // 完成时间,默认1秒,太短容易报动作超时
        gimbalAction.setGimbalMode(GimbalMode.FPV);
        elements.add(gimbalAction);
        // 拍照
        ShootPhotoAction photoAction = newShootSinglePhotoAction();
        elements.add(photoAction);
    }
}

但是,你不关注大疆内部如何写的代码还不行,因为你这么设置了之后,无人机不是按照官方文档以及你认为的那样进行的,也叫作不适配,或者直接就是bug。

给大疆发邮件,首先肯定了大疆的态度是好的,人工回复并且很效率,只是我没有时间陪着他们一点点改这个bug。义工也得保证吃饭的,所以。。。对于那种很空的回复,这种方案就PASS掉了。

这种方案一个是不适配御相关机型(官方文档跟实际效果不是一回事);另一个是不可控,TimeLine偶尔报TimeOut等,不是很靠谱。精灵挺好,但是偶尔会多拍照片。

作为开发者表示理解,毕竟无人机这种难度比较高的硬件会有很多困难,期待大疆不断完善bug,走得更远!

第二种方案:

这种方案其实是不可行的,想到这个是因为大疆提供航点的WayPoint可以带waypointActions的,这个Action可以是云台、拍照、转向。不可行是因为大疆官方文档写了:(搜WayPoint)

虽然大疆提供了removeAction,但是航点任务是一下子写入无人机的,感兴趣的同学可以再尝试尝试。

第三种方案:

这种方案排在最后是因为比较笨重,程序员都不希望发生的,就是将1 * 100 写成 1 + 1 + 1 + 1 ... 的方式,将无人机设置成VirtualStick的方式,监听回调,像鞭炮一样一个一个的向无人机发送指令。因为大疆封装的SDK都是回调方式,也就是说... 你得想办法去解决这一百多个回调形成的回调地狱。要不然功能实现了这代码也很烂。。。

实现思路是响应式编程,具体实现用的队列(用栈也可以),观察者模式。

写一个Observer实现具体云台、拍照、无人机yaw轴移动,Observeable作为算法具体实现的控制类。实现中途取消,完成回调即可。

这种方案的好处是可控,每一个action你都自己写了,可以非常高效完成全景任务,媲美大疆自己软件的全景。

代码不贴了,大疆都提供了API,我自己封装的也比较水。。。

写在最后:

可以参考大疆官网给提供的思路,代码是OC的:https://developer.dji.com/cn/document/ef495549-6501-4504-bbc1-3e1f39d4985c

这篇文章用了三周的时间去调研、测试、完善,踩坑埋坑。

搬砖不易,我也深知完不成功能的无助。欢迎转载,请注明出处。

猜你喜欢

转载自blog.csdn.net/qq_24712507/article/details/108006654