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

本文介绍了一种获取大疆无人机避障传感器状态的方法,通过监听传感器状态并判断其工作情况,包括前置、后置等六个方向的视觉避障传感器是否启用及工作状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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

### 无人机避障传感器的技术原理 #### 红外线传感器 红外线传感器利用发射红外光并接收反射回来的信号来测量距离。当障碍物接近时,传感器接收到更强的反射信号,从而判断前方存在物体。然而,由于其工作范围有限且容易受到外界光线干扰,在复杂环境中表现不佳[^1]。 #### 超声波传感器 超声波传感器通过发出高频声音脉冲,并计算回声返回所需时间来确定目标的距离。该方法适用于短程检测,具有成本低廉、易于实现的特点;但在多路径效应影响下精度会有所下降[^2]。 #### 激光传感器 激光传感器采用单束或多束激光扫描环境中的物体表面特征点云数据,能够提供高分辨率的地图构建能力以及精确的位置感知功能。尽管性能优越,但由于设备体积较大且价格昂贵,在小型化产品上应用受限。 #### 双目视觉传感器 双目视觉模仿人类双眼视差原理,由两个摄像头同步拍摄同一场景的不同视角图像,经过算法处理得到三维空间坐标系下的深度图信息。相比其他类型的传感装置而言,它不仅具备良好的抗干扰性适应性强的优点,而且可以识别更多种类的目标对象,因此成为许多高端机型首选方案之一[^3]。 ### 应用领域 上述提到的各种类型避障传感器广泛应用于不同场合: - **农业植保**:用于监测作物生长状况的同时避开田间设施; - **物流配送**:确保飞行过程中不会碰撞建筑物或其他空中障碍物; - **影视航拍**:保障相机稳定运行期间的安全性; - **电力巡检**:帮助操作员发现线路缺陷而不必担心意外接触电线等问题发生。 ```python # 示例代码展示如何读取来自Arduino连接的一个简单IR避障传感器的数据 import serial def read_ir_sensor(port='/dev/ttyUSB0', baudrate=9600): ser = serial.Serial(port, baudrate) while True: line = ser.readline().decode('utf-8').strip() try: distance = float(line) print(f"Detected obstacle at {distance} cm away.") except ValueError: pass if __name__ == "__main__": read_ir_sensor() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值