避障系统使用教程
1. 概述
避障系统,主要是检测飞机的飞行范围内是否有障碍物,发现障碍物后会启用刹停安全保护机制。当前避障系统支持6向全面避障,主要分为前向、后向、上向、下向、左向、右向等方向避障。
2. 避障接口设置获取
避障开关设置
避障开关:VisionKey.KeyObstacleAvoidActionSet
设置参数/获取返回参数:参考 ObstacleAvoidActionEnum
val key = KeyTools.createKey(VisionKey.KeyObstacleAvoidActionSet)
getKeyManager()?.setValue(key, ObstacleAvoidActionEnum, object : CommonCallbacks.CompletionCallback {
    override fun onSuccess() {
    }
    override fun onFailure(code: IAutelCode, msg: String?) {
    }
})
避障告警距离
主要分为水平避障告警距离、上方避障告警距离、下方避障告警距离等三组告警距离,支持设置和获取。
水平避障告警距离:VisionKey.KeyHorizontalWarningDistance
上方避障告警距离:VisionKey.KeyTopWarningDistance
下方避障告警距离:VisionKey.KeyBottomWarningDistance
以水平避障告警距离设置为例.
val key = KeyTools.createKey(VisionKey.KeyHorizontalWarningDistance)
getKeyManager()?.setValue(key, warningDistance, object : CommonCallbacks.CompletionCallback {
    override fun onSuccess() {
    }
    override fun onFailure(code: IAutelCode, msg: String?) {
    }
})
避障刹车距离
主要分为水平避障刹车距离、上方避障刹车距离、下方避障刹车距离等三组刹车距离,支持设置和获取。
水平避障刹车距离:VisionKey.KeyHorizontalBrakeDistance
上方避障刹车距离:VisionKey.KeyTopBrakeDistance
下方避障刹车距离:VisionKey.KeyBottomBrakeDistance
以水平避障刹车距离设置为例.
val key = KeyTools.createKey(VisionKey.KeyHorizontalBrakeDistance)
getKeyManager()?.setValue(key, brakeDistance, object : CommonCallbacks.CompletionCallback {
    override fun onSuccess() {
    }
    override fun onFailure(code: IAutelCode, msg: String?) {
    }
})
3. 视觉雷达图上报
飞机飞行过程中,会实时上报当前的避障距离信息列表。列表中包含了6向的避障距离信息。可以根据某方向的实时避障距离和避障告警距离、刹车距离来比较,然后实时提示用户当前的飞行安全状态。
val keyWarning = KeyTools.createKey(VisionKey.KeyReportEmergency)
getKeyManager()?.listen(keyWarning, object : CommonCallbacks.KeyListener<List<VisionRadarInfoBean>> {
    override fun onValueChange(oldValue: List<VisionRadarInfoBean>?,newValue: List<VisionRadarInfoBean>) {
    }
})
视觉雷达信息
data class VisionRadarInfoBean(
    var timeStamp: Long = 0,//时间戳
    var position: VisionSensorPositionEnum = VisionSensorPositionEnum.FRONT,//传感器位置
    var distances: List<Float>? = null//传感器与障碍物的多个距离
)
视觉传感器位置
enum class VisionSensorPositionEnum(var value: Int) {
    FRONT(0),          //前
    REAR(1),           //后
    BOTTOM(2),         //下
    RIGHT(3),          //右
    LEFT(4),           //左
    TOP(5)             //上
}
4. 接口调用顺序

5. 视觉雷达图上报示例
val keyWarning = KeyTools.createKey(VisionKey.KeyReportEmergency)
getKeyManager()?.listen(keyWarning, object : CommonCallbacks.KeyListener<List<VisionRadarInfoBean>> {
    override fun onValueChange(oldValue: List<VisionRadarInfoBean>?, newValue: List<VisionRadarInfoBean>) {
        for (value in newValue) {
            if (value.position == VisionSensorPositionEnum.TOP) {
                val distanceList = value.distances
                if (distanceList != null) {
                    if (distanceList.min() < getTopWarningDistance()) {
                        ToastUtils.showToast("上方存在障碍物,请谨慎飞行")
                    }
                }
            }
        }
    }
})
6.常量定义
6.1避障参数枚举
enum class ObstacleAvoidActionEnum(val value: Int) {
    CLOSE(0),//关闭
    STOP(1),//刹停
    BYPASS(2);//绕行
}