按照官方demo拿到的虚拟摇杆控制方法,比如想要实现3m/s的速度往上飞,发送指令如下
FlightControlData(roll左右,pitch前后,yaw旋转,throw升降)大疆这么说明的
mFlightController.sendVirtualStickFlightControlData(
new FlightControlData(
0, 0, 0, 3
), djiError -> {
if (djiError != null) {
LogUtils.d(TAG, "控制失败");
} else {
LogUtils.d(TAG, "控制成功");
}
}
);
发现这样处理,并没有按照预设的飞行速度往上飞,甚至无人机在大于3m的时候还要往下降。
后来通过各种测试和设置发现,需要配置一些MODE,除非默认的状态是对的,这里根据文档和API介绍,和大疆自己描述的接口设置简单模式如下,自己读注释能看明白
//这个是升降控制,position模式是指定高度,velocity模式是增量模式最大是4m/s,最小是-4m/s mFlightController.setVerticalControlMode(VerticalControlMode.VELOCITY); //控制旋转 ANGLE 偏航值设置为相对于北向的角度,最大偏航角定义为 180 度。最小偏航角定义为-180度,控制旋转 ANGULAR_VELOCITY 正角速度和负角速度分别代表飞行器顺时针和逆时针旋转 最大偏航角速度定义为 100 度/秒 mFlightController.setYawControlMode(YawControlMode.ANGULAR_VELOCITY); //控制 ANGLE VELOCITY这个是飞机的倾斜角度,比较危险不这么玩 VELOCITY将横滚和俯仰值设置为速度 mFlightController.setRollPitchControlMode(RollPitchControlMode.VELOCITY); //设置机身坐标系 mFlightController.setRollPitchCoordinateSystem(FlightCoordinateSystem.BODY); //FlightControlData(roll左右,pitch前后,yaw旋转,throw升降) 按照上面的设置,再发送对应的控制指令,就都是按照输入的速度和角速度来执行动作了,合并如下
private void setViticalMode() {
mFlightController.setVerticalControlMode(VerticalControlMode.VELOCITY);//升降模式,速度模式
mFlightController.setRollPitchControlMode(RollPitchControlMode.VELOCITY);//前后左右,速度模式
mFlightController.setYawControlMode(YawControlMode.ANGULAR_VELOCITY);//旋转,角速度模式
mFlightController.setRollPitchCoordinateSystem(FlightCoordinateSystem.BODY);//机身坐标系
}
再首次发送指令之前调用setViticalMode()方法就好。自己做记录,希望也能帮助到你。 给个大疆参考链接:虚拟摇杆的推荐设置是什么? https://sdk-forum.dji.net/hc/zh-cn/articles/6332932395161-%E8%99%9A%E6%8B%9F%E6%91%87%E6%9D%86%E7%9A%84%E6%8E%A8%E8%8D%90%E8%AE%BE%E7%BD%AE%E6%98%AF%E4%BB%80%E4%B9%88- 这里主要做参考,自己可以根据MODE查看大疆API