跳到内容 跳到主导航 跳到页脚

梯控系统

注意:

  • 梯控机器人地图定位成功
  • 梯控机器人必须建立巡线
  • 梯控机器人必须处于巡线的点位之上
  • 梯控机器人的地图不能使用复制的地图,会造成点位ID,楼层冲突,无法到达

导航乘梯

组件名称: NavigationElevatorComponent

组件描述: 导航乘梯组件,用于控制机器人前往指定位置点。

使用示例:

//DeliveryScreen类文件
import DeliveryElevatorViewModel from './DeliveryElevatorViewModel';
public constructor(props: BaseComponentProps) {
    super(props);
    let viewModel =  new DeliveryElevatorViewModel(props);
    this.setViewModel(viewModel);
    let voice = new DeliveryVoice(viewModel);
    this.setVoice(voice);
}
public render() {
    return (
        <>
            <NavigationElevatorComponent
                param={this.viewModel.getNavigationElevatorParams()}
                onStatusUpdate={this.viewModel.handleNaviStatus}
                onFinish={this.viewModel.handleNaviFinish}
            />
        </>
    );
}
//DeliveryElevatorViewModel文件
/**
*获取导航参数
*/
import { NavigationElevatorParam, } from 'orionos-eve-core';
public getNavigationElevatorParams(): NavigationElevatorParam {
    return new NavigationElevatorParam (
        floorIndex + '', //floorIndex 楼层序号,手动设置固定值
        poseName //poseName地点名称,手动设置固定值
    );
}
/**
*导航状态处理
*@param event
*/
public handleNaviStatus = (event?: ComponentEvent): boolean => {
    console.log(TAG, 'On navigation status update : ' + JSON.stringify(event));
    if (!(event && event.status)) {
        return false;
    }
    let subType = this.getEventSubType(event);
    switch (event.status) {
        case 32730022:
            this.reportInvalidEvent(DeliveryInvalidEvent.EVENT_TYPE_AVOID_START, subType);
            return true;
        case 32730001:
            // DanceOperation.playLightEffect(LIGHT_EFFECT_TYPE.LIGHT_EFFECT_NAVI_BREATH);
            this.state.setState(State.CRUISING);
            return true;
        case 32730002:
            if (settingStore.getIsOpenDemoSwitch) {
                return true;
            }
            //梯控导航,不处理传统的避障超时
            //this.handleAvoidingEvent(event, subType);
            return true;
        case 32730011:
            if (settingStore.getIsOpenDemoSwitch) {
                return true;
            }
            this.handleAvoidStartEvent();
            return true;
        case 32730003:
            if (settingStore.getIsOpenDemoSwitch) {
                return true;
            }
            this.handleAvoidEndEvent(event, subType);
            return true;
        case -32620015:
            this.waitInPlace();
            return true;
        case 32730004:
            this.handleObstaclesEvent(event, subType);
            return true;
        case 32750004:
            //进电梯,到达电梯门
            this.handleArriveElevatorDoor();
            return true;
        case 32750005:
            //进电梯,到达电梯中心,开始转向
            this.handleArriveElevatorCenterAndStartTurn();
            return  true;
        case 32750023:
            //进电梯,到达电梯中心,转向完成
            return true;
        case 32750009:
            //出电梯,离开电梯门
            this.handleExitElevatorDoor();
            return true;
        case 32750008:
            //出电梯,离开电梯中心
            this.handleLeaveElevatorCenter();
            return true;
        case 32750003:
            //进电梯,从电梯口去电梯中心
            this.handleEnterElevator();
            return true;
        default:
            return false;
} };
/**
*导航结束事件处理
*@param event
*/
public handleNaviFinish = (event?: ComponentEvent): boolean => {
    console.log(TAG, 'On navigation finish : ' + JSON.stringify(event));
    if (!(event && event.status)) {
        return false;
    }
    // DanceOperation.playLightEffect(LIGHT_EFFECT_TYPE.LIGHT_EFFECT_BLUE_LIGHT);
    let subType = this.getEventSubType(event);
    switch (event.status) {
        case 32610007:
            this.handleNaviArrivedEvent(event);
            return true;
        case -32620015:
            this.handleNaviArrivedEvent(event, false);
            return true;
        case -32610004:
        case -32620007:
        case -32620008: //navigation moving time out
        case 32610009:
        case -32620006:
        case -32660015: //enter elevator failed
            this.reportInvalidEvent(DeliveryInvalidEvent.EVENT_TYPE_DESTINATION_UNREACHABLE, subType);
            this.waitInPlace();
            return true;
        case -32620009:
            this.reportInvalidEvent(DeliveryInvalidEvent.EVENT_TYPE_DESTINATION_UNREACHABLE,
            subType, I18n.t('ttsNavigationGlobalPathFailedPleaseEditMap'));
            this.showNaviError(subType);
            return true;
        case -32620014:
        case -32600001:
        case -32600002:
            this.showNaviError(subType);
            return true;
        case -32620002:
            this.reportInvalidEvent(DeliveryInvalidEvent.EVENT_TYPE_OUT_MAP, subType, I18n.t('ttsNavigationOutMap'));
            this.showNaviError(subType, true);
            return true;
        case -32620001:
            this.handleNotEstimateEvent(subType);
            return true;
        case -32620029:
            this.reportInvalidEvent(DeliveryInvalidEvent.EVENT_TYPE_MULTI_ROBOT_WAIT_TIMEOUT, subType, I18n.t('nav_waitTimeout_tts'));
            this.showNaviError(subType, false, true);
            return true;
        case -32650006:
            this.reportInvalidEvent(DeliveryInvalidEvent.EVENT_TYPE_MULTI_ROBOT_ERROR, subType, I18n.t('nav_multiRobotError_tts'));
            this.showNaviError(subType, false, false, true);
            return true;
        case -32620030:
            this.handleRobotWheelError(subType);
            return true;
        case -32660021:
            //梯控多楼层导航,地图错误
            this.showNaviError(NavErrorConst.NAVI_ERROR_ELEVATOR_MAP_RONG);
            return true;
        default:
            this.showNaviError(subType);
            return false;
} };
private getEventSubType(event: ComponentEvent) {
    let eventSubType = 0;
    if (event.extraData) {
        let extraData = JSON.parse(event.extraData);
        let code = extraData.code;
        console.log(TAG, ' onStatusUpdate code: ' + code);
        if (code) {
            eventSubType = code;
        }
    }
    return eventSubType;
}

属性:

  • param:组件参数,类型为NavigationElevatorParam
  • onStatusUpdate:组件状态回调
  • onFinish:组件执行结束回调

参数说明:

  • floorIndex:楼层,必填项,不能为空,否则会抛出崩溃异常
  • poseName:地点名称

状态说明:

通过ComponentEvent.status获取到状态码:

  • 32730022:报告非法事件,常量定义ComponentStatusConst.STATUS_NAVIGATION_AVOID_IMMEDIATELY
  • 32730001:开始导航,常量定义ComponentStatusConst.STATUS_START_NAVIGATION
  • 32730002:梯控导航,不处理传统的避障超时,常量定义ComponentStatusConst.STATUS_NAVIGATION_AVOID
  • 32730011:处理避障开始事件,常量定义ComponentStatusConst.STATUS_NAVIGATION_AVOID_START
  • 32730003:处理避障结束事件,常量定义ComponentStatusConst.STATUS_NAVIGATION_AVOID_END
  • -32620015:原地停留,常量定义ComponentErrorConst.ERROR_NAVIGATION_ALREADY_IN_DESTINATION
  • 32730004:处理避停状态,常量定义ComponentStatusConst.STATUS_OBSTACLES_AVOID
  • 32750004:进电梯,到达电梯门
  • 32750005:进电梯,到达电梯中心,开始转向
  • 32750023:进电梯,到达电梯中心,转向完成
  • 32750009:出电梯,离开电梯门
  • 32750008:出电梯,离开电梯中心
  • 32750003:进电梯,从电梯口去电梯中心

结果说明

通过ComponentEvent.status获取到结果码:

  • 32610007:到达事件处理,常量定义 ComponentResultConst.RESULT_NAVIGATION_ARRIVED
  • -32620015:已在目标位置点,常量定义ComponentErrorConst.ERROR_NAVIGATION_ALREADY_IN_DESTINATION
  • -32610004:位置点名称无效,常量定义 ComponentErrorConst.ERROR_PARAMS_PLACE_NAME_INVALID
  • -32620007:目标点不存在,常量定义 ComponentErrorConst.ERROR_DESTINATION_NOT_EXIST
  • -32620008:目标点移动超时,常量定义 ComponentErrorConst.ERROR_DESTINATION_CAN_NOT_ARRIVE
  • 32610009:底盘启动导航任务失败,常量定义 ComponentResultConst.RESULT_NAVIGATION_FAILURE
  • -32620006:避让超时,常量定义 ComponentErrorConst.ERROR_REQUEST_RES_BUSYComponentErrorConst.ERROR_NAVIGATION_AVOID_TIMEOUT
  • -32660015:进入电梯失败
  • -32620009:全局路径规划失败,常量定义 ComponentErrorConst.ERROR_NAVIGATION_GLOBAL_PATH_FAILED
  • -32620014:尝试重定位失败,常量定义 ComponentErrorConst.ERROR_NAVIGATION_RESET_ESTIMATE_FAIL
  • -32600001:请求结果繁忙,常量定义 ComponentErrorConst.ERROR_REQUEST_RES_BUSY
  • -32600002:请求结果失败,常量定义 ComponentErrorConst.ERROR_REQUEST_RES_FAILED
  • -32620002:超出地图范围,常量定义 ComponentErrorConst.ERROR_NAVIGATION_OUT_MAP
  • -32620001:没有定位,常量定义 ComponentErrorConst.ERROR_NOT_ESTIMATE
  • -32620029: 多机器人等待超时,常量定义ComponentErrorConst.ERROR_MULTI_ROBOT_WAITING_TIMEOUT
  • -32650006:多模式错误,常量定义ComponentErrorConst.ERROR_MULTIPLE_MODE_ERROR
  • -32620030: 轮子过流,常量定义ComponentErrorConst.ERROR_WHEEL_OVER_CURRENT_RUN_OUT
  • -32660021:梯控多楼层导航,地图错误

注意:开发中请使用常量定义进行结果及状态判断,以上出现的返回码在后续版本中有可能会发生变更

最低版本: 2.33.0

适用平台:

豹小秘mini招财豹豹小递max豹小秘DP消杀豹

充电乘梯

组件名称: ChargeElevatorComponent

组件描述: 乘梯充电组件,用于控制机器人前往不同楼层充电。

使用示例:

//ChargeProvider类文件
import {ChargeStartComponent,ChargeElevatorComponent,ChargeElevatorParam} from 'orionos-eve-core';
@observer
export class ChargeProvider<Props extends BaseComponentProps> extends BaseComponent<BaseComponentProps, ChargeViewModel, ChargeVoice> {
        private chargeElevatorParam: ChargeElevatorParam;
        private chargeComponentRef: RefObject<
        ChargeStartComponent
    > = React.createRef();
        public constructor(props: any) {
                super(props, false);
                console.log(TAG, 'constructor prop is ' + JSON.stringify(props));
                this.viewModel = new ChargeViewModel(props);
                let voice = new ChargeVoice(this.viewModel);
                this.setViewModel(this.viewModel);
                this.setVoice(voice);
                this.chargeStartParam = new ChargeStartParam(
                        undefined,
                        undefined,
                        undefined
                );
                this.chargeElevatorParam = new ChargeElevatorParam(
                        undefined,
                        undefined,
                        undefined
                );
        }
        public render() {
                return (
                    <>
                            <ChargeElevatorComponent
                                    ref={this.chargeComponentRef}
                                    param={this.chargeElevatorParam}
                                    onStatusUpdate={
                                            this.viewModel && this.viewModel.onStatusUpdate
                                    }
                                    onFinish={
                                            this.viewModel && this.viewModel.onChargeFinish
                                    }
                            />
                    <>
                );
        }
}
//ChargeViewModel文件
public onStatusUpdate = (event?: ComponentEvent): boolean => {
        console.log(TAG, 'onStatusUpdate', event);
        if (event) {
                switch (event.status) {
                        case 32730001
                                DanceOperation.playLightEffect(
                                        LIGHT_EFFECT_TYPE.LIGHT_EFFECT_NAVI_BREATH
                                );
                                break;
                        default:
                                break;
                }
        }
        return false;
};
public onChargeFinish = (event?: ComponentEvent): boolean => {
        console.log(TAG, ' onChargeFinish', event);
        DanceOperation.playLightEffect(
            LIGHT_EFFECT_TYPE.LIGHT_EFFECT_BLUE_LIGHT
        );
        if (event && event.status) {
                switch (event.status) {
                        case 32610001:
                                console.log(TAG, 'Charge success');
                                chargeStore.setIsChargeEnable(false);
                                this.toMain();
                                break;
                        case -32620001:
                                console.log(TAG, 'charge ERROR_NOT_ESTIMATE');
                                Broadcast.sendBroadcast('action_reposition', {
                                        repositionVision: true
                                });
                                break;
                        case -32620023:
                        case -32600007:
                        case -32600008:
                        case -32600009:
                                console.log(TAG, 'Charge fail. retry Without Forward...');
                                chargeStore.setIsChargeEnable(false);
                                chargeStore.setIsChargeEnable(true);
                                break;
                        default:
                                console.log(TAG, 'Charge error', event.status);
                                chargeStore.setIsChargeEnable(false);
                                this.retryCharge();
                                break;
                }
        }
        return true;
    };

属性:

  • ref:  RefObject<ChargeStartComponent> = React.createRef();
  • param:组件参数,new ChargeElevatorParam(undefined, undefined, undefined);
  • onStatusUpdate:组件状态回调
  • onFinish:组件执行结束回调

状态说明:

通过ComponentEvent.status获取到状态码:

  • 32730001:开始导航,常量定义ComponentStatusConst.STATUS_START_NAVIGATION

结果说明

通过ComponentEvent.status获取到结果码:

  • 32610001:充电成功,常量定义 ComponentResultConst.RESULT_SUCCESS
  • -32620001:没有定位,常量定义ComponentErrorConst.ERROR_NOT_ESTIMATE
  • -32620023:充电位置不能到达,常量定义 ComponentErrorConst.ERROR_CHARGE_POINT_CAN_NOT_ARRIVE
  • -32600007:导航超时,常量定义 ComponentErrorConst.ERROR_CHARGE_START_NAVI_TIMEOUT
  • -32600008:充电开始解析错误,常量定义 ComponentErrorConst.ERROR_CHARGE_START_PARSE_IN_LOCATION
  • -32600009:尝试充电未移动,常量定义 ComponentErrorConst.ERROR_CHARGE_START_NOT_MOVE

注意:开发中请使用常量定义进行结果及状态判断,以上出现的返回码在后续版本中有可能会发生变更

最低版本: 2.33.0

适用平台:

豹小秘mini招财豹豹小递max豹小秘DP消杀豹

获取多楼层点位

组件名称: getMultiFloorConfigAndPose

组件描述: 获取多楼层点位列表。

使用示例:

console.log(TAG, 'getElevatorPlaceList()');
let action = new CommandListener();
action.addListener(CommandListener.EVENT_RESULT, (msg: any) => {
        console.log(TAG, 'getElevatorPlaceList data : ' + JSON.stringify(msg));
        if (msg && typeof msg !== 'undefined') {
                if (msg) {
                        let code = msg.result;
                        let placeList = msg.message;
                        if(code === 1 && placeList){
                                this.processElevatorFloorData(placeList);
                        }
                }
        } else {
                console.log(TAG, 'current ElevatorPlaceList is not exits');
        }
});
RobotApi.getMultiFloorConfigAndCommonPose(action.getId());
//数据结构示例:
[
    {
        "availableElevators": [ //该地图使用的电梯名称
            "1梯",
            "2梯"
        ],
        "floorId": 26, //数据主键ID,自增长
        "floorIndex": 1, //楼层id,lora发送给梯控时使用的楼层id
        "floorState": 1, //楼层类型,主楼层 默认的配送楼层,默认值0,主楼层1
        "floorAlias": "1层",  //楼层名称
        "mapId": "b6fc75006f443c61bc32cdffa66a395c", //地图ID
        "mapName": "地图名1", //地图名称
        "poseList": [//站点列表
            {
                "name": "接待点"
            },
            {
                "name": "会议室"
            },
            {
                "name": "办公室"
            }
        ]
    },
    {
        "availableElevators": [
            "1梯",
            "2梯"
        ],
        "floorId": 27,
        "floorIndex": 2,
        "floorState": 0,
        "floorAlias": "2层",
        "mapId": "b6fc75006f443c61bc32cdffa66a395d",
        "mapName": "地图名2",
        "poseList": [
            {
                "name": "接待点"
            },
            {
                "name": "会议室"
            },
            {
                "name": "办公室"
            }
        ]
    }
]

注意:开发中请使用常量定义进行结果及状态判断,以上出现的返回码在后续版本中有可能会发生变更

最低版本: 2.33.0

适用平台:

豹小秘mini招财豹豹小递max豹小秘DP消杀豹

梯控导航

这篇文章是否有帮助?

0