前言
突然发现DJI官网上并没有关于无人机本身云台(万向节)的相关教程。搜索一波有人说大疆的Sample Code的demo里有。于是乎走一波。(找几个合适有用的函数)。
开始
大疆的Sample Code是可以运行的,在官网注册好相应的app Key。运行起来,找到相应的Gimbal界面,由于我用的无人机是 Mavic Air型号(有些功能不支持)。
与Gimbal相关的有三个界面
我们看到只有几个按钮能按,但是没关系,对我来说就够了。Down,Stop,Up,Reset(第三张图没截出来),接下来就是找打相应的源码了。
打开 Sample Code
找到源码
三个类,对应三个界面
主要是打开MoveGimbalWithSpeedView这个,主要的函数都在这个里面。在这个类里面,声明一个时间任务GimbalRotateTimerTask(实现TimerTask),以后的按钮都是声明一个定时器用这个类去控制摄像头的俯仰。在这个类中调用Gimbal类中的roate函数,在roate函数中运用Build()重构万向节(云台)对象,达到控制摄像头的目的。
上升的函数
下降的函数
停止的函数
但是,这里面有一个问题在上升或者下降的时候是不能直接相互切换的。意思是说在上升的时候点击下降是没有用的。问题在于在实现两个函数中只有
if (timer == null) {
timer = new Timer();
gimbalRotationTimerTask = new GimbalRotateTimerTask(-10);
timer.schedule(gimbalRotationTimerTask, 0, 100);
}
在云台移动时,timer不为null,所以不能直接相互切换,必须先点stop才能切换。
另外ModuleVerificationUtil和DJISampleApplication.getProductInstance()找不到需要重新建立,或者跟进函数,把相应的函数实现可以了。
Reset函数在GimbalCapabilityView类中
case R.id.btn_reset: {
Gimbal gimbal = getGimbalInstance();
if (gimbal != null) {
gimbal.reset(null);
} else {
ToastUtils.setResultToToast("The gimbal is disconnected.");
}
break;
相应缺失的函数跟进就好了。