大疆避障传感器状态获取方式,本处记录主要获取方法,方便以后查阅。
//监听避障传感器的状态
mFlightController.getFlightAssistant().setObstacleAvoidanceSensorStateListener(new CommonCallbacks.CompletionCallbackWith<ObstacleAvoidanceSensorState>() {
@Override
public void onSuccess(ObstacleAvoidanceSensorState obstacleAvoidanceSensorState) {
// obstacleAvoidanceSensorStatus[0]
boolean downwardVisualObstacleAvoidanceSensorWorking = false;//下置避障是否在工作
boolean forwardVisualObstacleAvoidanceSensorWorking = false;//前置避障是否在工作
boolean rightSideVisualObstacleAvoidanceSensorWorking = false;//右置避障是否在工作
boolean backwardVisualObstacleAvoidanceSensorWorking = false;//后置避障是否在工作
boolean leftSideVisualObstacleAvoidanceSensorWorking = false;//左置避障是否在工作
boolean upwardVisualObstacleAvoidanceSensorWorking = false;//上置避障是否在工作
boolean downwardVisualObstacleAvoidanceSensorEnabled = obstacleAvoidanceSensorState.isDownwardVisualObstacleAvoidanceSensorEnabled();//下置避障是否启用
if (downwardVisualObstacleAvoidanceSensorEnabled) {
downwardVisualObstacleAvoidanceSensorWorking = obstacleAvoidanceSensorState.isDownwardVisualObstacleAvoidanceSensorWorking();
}
boolean forwardVisualObstacleAvoidanceSensorEnabled = obstacleAvoidanceSensorState.isForwardVisualObstacleAvoidanceSensorEnabled();
if (forwardVisualObstacleAvoidanceSensorEnabled) {
forwardVisualObstacleAvoidanceSensorWorking = obstacleAvoidanceSensorState.isForwardVisualObstacleAvoidanceSensorWorking();
}
boolean rightSideVisualObstacleAvoidanceSensorEnabled = obstacleAvoidanceSensorState.isRightSideVisualObstacleAvoidanceSensorEnabled();
if (rightSideVisualObstacleAvoidanceSensorEnabled) {
rightSideVisualObstacleAvoidanceSensorWorking = obstacleAvoidanceSensorState.isRightSideVisualObstacleAvoidanceSensorWorking();
}
boolean backwardVisualObstacleAvoidanceSensorEnabled = obstacleAvoidanceSensorState.isBackwardVisualObstacleAvoidanceSensorEnabled();
if (backwardVisualObstacleAvoidanceSensorEnabled) {
backwardVisualObstacleAvoidanceSensorWorking = obstacleAvoidanceSensorState.isBackwardVisualObstacleAvoidanceSensorWorking();
}
boolean leftSideVisualObstacleAvoidanceSensorEnabled = obstacleAvoidanceSensorState.isLeftSideVisualObstacleAvoidanceSensorEnabled();
if (leftSideVisualObstacleAvoidanceSensorEnabled) {
leftSideVisualObstacleAvoidanceSensorWorking = obstacleAvoidanceSensorState.isLeftSideVisualObstacleAvoidanceSensorWorking();
}
boolean upwardVisualObstacleAvoidanceSensorEnabled = obstacleAvoidanceSensorState.isUpwardVisualObstacleAvoidanceSensorEnabled();
if (upwardVisualObstacleAvoidanceSensorEnabled) {
upwardVisualObstacleAvoidanceSensorWorking = obstacleAvoidanceSensorState.isUpwardVisualObstacleAvoidanceSensorWorking();
}
boolean v = obstacleAvoidanceSensorState.areVisualObstacleAvoidanceSensorsInHorizontalDirectionEnabled();
if (v) {
distanceStr += "垂直" + obstacleAvoidanceSensorState.areVisualObstacleAvoidanceSensorsInVerticalDirectionWorking();
}
boolean h = obstacleAvoidanceSensorState.areVisualObstacleAvoidanceSensorsInHorizontalDirectionEnabled();
if (h) {
distanceStr += "水平" + obstacleAvoidanceSensorState.areVisualObstacleAvoidanceSensorsInHorizontalDirectionWorking();
}
//todo 正式环境测试成功了这里可以删除
distanceStr += "下" + downwardVisualObstacleAvoidanceSensorWorking;
distanceStr += "前" + forwardVisualObstacleAvoidanceSensorWorking;
distanceStr += "右" + rightSideVisualObstacleAvoidanceSensorWorking;
distanceStr += "后" + backwardVisualObstacleAvoidanceSensorWorking;
distanceStr += "左" + leftSideVisualObstacleAvoidanceSensorWorking;
distanceStr += "上" + upwardVisualObstacleAvoidanceSensorWorking;
runOnUiThread(() -> gcsTxt.setText(distanceStr));
distanceStr = "";
}
@Override
public void onFailure(DJIError djiError) {
}
});
注意:这些状态是工作状态,即使pilot软件里关闭掉避障功能,这些传感器还是运行的,只是关闭避障功能而已,传感器数据还是有的,测试方法,正常状态都位true,遮住传感器就会成false,我就因为关闭发现依旧位true,怀疑自己找错了方法,折腾了好久
功能虽然简单,但是茫茫api海洋,找到这个方法并且实现并不简单,所以如果帮助到你们,希望点个赞,转载留个链接,以后有机会出一套msdk开发教程,包含M300RTK