大疆无人机避障传感器状态获取和监听(M300RTK)

大疆避障传感器状态获取方式,本处记录主要获取方法,方便以后查阅。

//监听避障传感器的状态
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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值