诊断服务

诊断服务提供调用诊断相关功能及监听各部件的故障信息。作为诊断服务代理的 DiagnosisManager 对象,提供了诊断服务的主要 API,可以通过 RobotContext 对象获取到。

DiagnosisManager diagnosisManager = aRobotContext.getSystemService(DiagnosisManager.SERVICE);

诊断部件

类似人的手脚一样,设备通常也是由多个部件组成,当我们想要知道某个部件是否正常时,就可以通过诊断服务对其进行诊断,诊断服务可以同时对一个或者多个部件进行诊断。下面将逐项介绍。

诊断单个部件。以下代码实现:诊断头部部件

promise /* [1] */ = diagnosisManager.diagnose("HeadPitch")
    .progress(new ProgressCallback<DiagnosisProgress>() {
        @Override
        public void onProgress(DiagnosisProgress/* [2] */ diagnosisProgress) {
            // 诊断过程的回调
        }
    })
    .done(new DoneCallback<Diagnosis>() {
        @Override
        public void onDone(Diagnosis/* [3] */ diagnosis) {
            // 诊断执行完成的回调
        }
    })
    .fail(new FailCallback<DiagnosisException>() {
        @Override
        public void onFail(DiagnosisException e) {
            // 诊断执行失败的回调
        }
    });

[1] 返回执行诊断操作的异步对象,通过该对象获取结果以及取消处理过程。具体用法参考 Promise

[2] 异步回调的 DiagnosisProgress 对象描述了诊断的进度信息,具体包括:

常量 说明
DiagnosisProgress.PROGRESS_BEGAN 诊断开始
DiagnosisProgress.PROGRESS_ENDED 诊断结束

[3] 异步回调的 Diagnosis 对象描述了诊断的结果信息,具体包括:

属性 getter 说明
Diagnosis.partId 部件 ID
Diagnosis.faulty 是否有缺损
Diagnosis.info 诊断信息
Diagnosis.fault 故障信息
Diagnosis.cause 故障原因

诊断多个部件

ArrayList partIds = new ArrayList<String>();
partIds.add("LShoulderYaw");
partIds.add("RShoulderYaw");
promise = diagnosisManager.diagnose(partIds);

监听部件故障信息

注册监听

DiagnosisListener diagnosisListener = new DiagnosisListener() {
    @Override

    public void onDiagnosed(Diagnosis/* [1] */ diagnosis) {
        // 诊断信息变化的回调
    }
};
diagnosisManager.registerListener(diagnosisListener);/* [2] */
diagnosisManager.registerListener(diagnosisListener, partId);/* [3] */
diagnosisManager.registerListener(diagnosisListener, partIds);/* [4] */

[1] 异步回调的 Diagnosis 对象描述了诊断的结果信息,请参考 Diagnosis

[2] 注册监听器,监听所有部件诊断信息

[3] 注册监听器,监听指定部件诊断信息

[4] 注册监听器,监听多个部件诊断信息

取消监听

diagnosisManager.unregisterListener(diagnosisListener);

修复部件

当某个部件出现异常后,如果设备拥有自修复能力,可以通过诊断服务调用其自修复功能。以下代码实现:调用头部关节的自修复功能

promise /* [1] */ = diagnosisManager.repair("HeadPitch")
    .progress(new ProgressCallback<RepairProgress>() {
        @Override
        public void onProgress(RepairProgress/* [2] */ repairProgress) {
            // 修复过程的回调
        }
    })
    .done(new DoneCallback<Void>() {
        @Override
        public void onDone(Void aVoid) {
            // 修复执行完成的回调
        }
    })
    .fail(new FailCallback<RepairException>() {
        @Override
        public void onFail(RepairException e) {
            // 修复执行失败的回调
        }
    });

[1] 返回执行修复操作的异步对象,通过该对象获取结果以及取消处理过程。具体用法参考 Promise

[2] 异步回调的 RepairProgress 对象描述了诊断的进度信息,具体包括:

常量 说明
RepairProgress.PROGRESS_BEGAN 修复开始
RepairProgress.PROGRESS_ENDED 修复结束

诊断信息码

系统诊断信息

诊断项

诊断项 诊断码 描述
DIAG_SYS_COMM 10000 系统通信

识别码

信息码 诊断信息 描述 识别码 (诊断码+信息码) 建议处理措施
0 system_comm_ok 系统通信正常 10000
1 system_comm_anormaly 系统通信异常 10001 插拔网线、硬重启机器

底盘电机诊断信息

诊断项

诊断项 诊断码 描述
DIAG_MOTOR1 20100 1号电机
DIAG_MOTOR2 20200 2号电机
DIAG_MOTOR3 20300 3号电机(1代特有)

识别码

信息码 诊断信息 描述 识别码 (诊断码+信息码) 建议处理措施
0 motor_ok 电机工作正常 20100 重启机器人或转移到安全区域等待
1 motor_overcurrent 电机过流 20101 重启或者联系售后
2 motor_can_error 电机CAN异常 20102 重启或者联系售后
3 motor_overtension 电机电压过高 20103 重启或者联系售后
4 motor_uvp 电机电压过低 20104 重启或者联系售后
5 motor_overtemperature 电机温度过高 20105 重启或者联系售后
6 motor_vel_anormaly 电机速度异常 20106 重启或者联系售后
7 motor_anormaly 传感器异常和电流异常 20107 重启或者联系售后

舵机诊断信息

诊断项

诊断项 诊断码 描述
DIAG_SERVO1 30100 "LShoulderPitch"
DIAG_SERVO2 30200 "LShoulderRoll"
DIAG_SERVO3 30300 "LShoulderYaw"
DIAG_SERVO4 30400 "LElbowRoll"
DIAG_SERVO5 30500 "LElbowYaw"
DIAG_SERVO7 30700 "RShoulderPitch"
DIAG_SERVO8 30800 "RShoulderRoll"
DIAG_SERVO9 30900 "RShoulderYaw"
DIAG_SERVO10 31000 "RElbowRoll"
DIAG_SERVO11 31100 "RElbowYaw"
DIAG_SERVO13 31300 "HeadYaw"(1代特有)
DIAG_SERVO14 31400 "HeadPitch"
DIAG_SERVO15 31500 "LHand"
DIAG_SERVO16 31600 "RHand"

识别码

信息码 诊断信息 描述 识别码 (诊断码+信息 码) 建议处理措施
0 servo_ok 舵机工作正常 30100
1 servo_fail 舵机未响应函数操作或响应超时 30101 重启或者联系售后
2 servo_paramerr 舵机响应数据出错 30102 重启或者联系售后
3 servo_libiniterr 舵机组群结构体读写函数未初始化或失败 30103 重启或者联系售后
4 servo_tempraturelowerr 舵机温度低保护 30104 重启或者联系售后
5 servo_tempraturelowwarn 舵机温度低告警 30105 重启或者联系售后
6 servo_tempraturehigherr 舵机过温保护 30106 重启或者联系售后
7 servo_tempraturehighwarn 舵机过温告警 30107 重启或者联系售后
8 servo_voltagelowerr 舵机低压保护 30108 重启或者联系售后
9 servo_voltagelowwarn 舵机低压告警 30109 重启或者联系售后
10 servo_voltagehigherr 舵机过压保护 30110 重启或者联系售后
11 servo_voltagehighwarn 舵机过压告警 30111 重启或者联系售后
12 servo_currentovererr 舵机过流保护 30112 重启或者联系售后
13 servo_currentoverwarn 舵机过流告警 30113 重启或者联系售后
14 servo_torqueovererr 舵机力矩保护 30114 重启或者联系售后
15 servo_torqueoverwarn 舵机力矩告警 30115 重启或者联系售后
16 servo_fuseerr 舵机熔丝位错保护 30116 重启或者联系售后
17 servo_fusewarn 舵机熔丝位错告警 30117 重启或者联系售后
18 servo_pwmerr 舵机堵转保护 30118 重启或者联系售后
19 servo_pwmwarn 舵机堵转告警 30119 重启或者联系售后
20 servo_speederr 舵机速度偏差故障 30120 重启或者联系售后
21 servo_speedwarn 舵机速度偏差告警 30121 重启或者联系售后
22 servo_commuerr 舵机通讯断线保护 30122 重启或者联系售后
23 servo_commuwarn 舵机通讯断线告警 30123 重启或者联系售后
24 servo_brokenerr 舵机损坏故障 30124 重启或者联系售后
25 servo_brokenwarn 舵机损坏告警 30125 重启或者联系售后
26 servo_ambtempratureerr 舵机环境温度故障 30126 重启或者联系售后
27 servo_ambtempraturewarn 舵机环境温度告警 30127 重启或者联系售后
28 servo_poslimupwarn 舵机位置超上限告警 30128 重启或者联系售后
29 servo_poslimdownwarn 舵机位置超下限告警 30129 重启或者联系售后
30 servo_spdlimwarn 舵机速度超限告警 30130 重启或者联系售后
31 servo_torqlimwarn 舵机电流超限告警 30131 重启机器人

传感器诊断信息

雷达诊断项

诊断项 诊断码 描述
DIAG_SENSOR_LIDAR 40100
40200(1S特有)
40300(1S特有)
40400(1S特有)
激光雷达

雷达识别码

信息码 诊断信息 描述 识别码 (诊断码+信息 码) 建议处理措施
0 lidar_ok 激光雷达工作正常 40100
1 lidar_no_device 未检测到激光雷达 40101 1、重启设备查看(断电后关闭底部电源后再重开)
2、重启后异常检查雷达连接
2 lidar_fq_error 激光雷达数据频率异常 40102 1、重启设备
2、异常存在更换雷达
3 lidar_initial_error 雷达节点启动失败 40103 重启后异常依然存在,检查硬件连接与雷达
4 lidar_multi_device 多个雷达设备 40104 重启后异常依然存在,是否同时存在雷达与转接板连接到X86上
5 lidar_no_data 雷达Topic无数据 40105 重启雷达
6 lidar_zero_data 雷达数据为0 40106

超声诊断项

诊断项 诊断码 描述
DIAG_SENSOR_ULTRASONIC1 41100 底部1号超声波
DIAG_SENSOR_ULTRASONIC2 41200 底部2号超声波
DIAG_SENSOR_ULTRASONIC3 41300 底部3号超声波
DIAG_SENSOR_ULTRASONIC4 41400 底部4号超声波
DIAG_SENSOR_ULTRASONIC5 41500 底部5号超声波
DIAG_SENSOR_ULTRASONIC6 41600 中间1号超声波
DIAG_SENSOR_ULTRASONIC7 41700 中间2号超声波
DIAG_SENSOR_ULTRASONIC8 41800 中间3号超声波

超声识别码

信息码 诊断信息 描述 识别码 (诊断码+信息 码) 建议处理措施
0 sensor_ultrasonic_ok 超声波正常 41100
1 sensor_ultrasonic_no_data 超声波无数据 41101 建议联系售后

红外诊断项

诊断项 诊断码 描述
DIAG_SENSOR_PSD_IR1 43100 红外1
DIAG_SENSOR_PSD_IR2 43200 红外2
DIAG_SENSOR_PSD_IR3 43300 红外3
DIAG_SENSOR_PSD_IR4 43400 红外4
DIAG_SENSOR_PSD_IR5 43500 红外5

红外识别码

信息码 诊断信息 描述 识别码 (诊断码+信息 码) 建议处理措施
0 sensor_psd_ir_ok 红外正常 43100
1 sensor_psd_ir_no_data 红外无数据 43101 建议联系售后

深度摄像头诊断项

诊断项 诊断码 描述
DIAG_SENSOR_RGBD 44000 深度摄像头

深度摄像头识别码

信息码 诊断信息 描述 识别码 (诊断码+信息 码) 建议处理措施
0 sensor_rgbd_ok rgbd工作正常 44000
1 sensor_rgbd_no_depthdata rgbd没有深度数据 44001 建议联系售后
2 sensor_rgbd_no_rgbdata rgbd没有彩色数据 44002 建议联系售后
3 sensor_rgbd_no_data rgbd没有数据 44003 建议联系售后

TOF红外诊断项

诊断项 诊断码 描述
DIAG_SENSOR_TOF 45000 TOF红外

TOF红外识别码

信息码 诊断信息 描述 识别码 (诊断码+信息 码) 建议处理措施
0 sensor_tof_ok TOF工作正常 45000
1 sensor_tof_no_data TOF无数据 45001 建议联系售后
2 sensor_tof_zero_data TOF数据为0 45002 建议联系售后
3 sensor_tof_triggerred TOF触发 45003

地磁诊断项

诊断项 诊断码 描述
DIAG_SENSOR_GEOMAGNETIC 46000 地磁

地磁识别码

信息码 诊断信息 描述 识别码 (诊断码+信息 码) 建议处理措施
0 sensor_geomagnetic_ok 地磁正常 46000
1 sensor_geomagnetic_no_data 地磁无数据 46001 建议联系售后

导航诊断信息

导航系统诊断项

诊断项 诊断码 描述
DIAG_NAV_SYS_STATUS 60000 导航系统

导航系统识别码

信息码 诊断信息 描述 识别码 (诊断码+信息 码) 建议处理措施
0 nav_system_ok 导航系统正常(已连接) 60000
1 nav_system_error 导航系统异常(未连接) 60001 重启机器

导航定位诊断项

诊断项 诊断码 描述
DIAG_NAV_SYS_LOCALIZATION 60100 导航定位

导航定位识别码

信息码 诊断信息 描述 识别码 (诊断码+信息 码) 建议处理措施
0 nav_localization_ok 重定位正常 60100
1 nav_localization_failed 重定位失败 60101 重新定位
2 nav_localization_timeout 重定位超时 60102 重新定位

导航行为诊断项

诊断项 诊断码 描述
DIAG_NAV_SYS_NAVIGATION 60200 导航行为

导航行为识别码

信息码 诊断信息 描述 识别码 (诊断码+信息 码) 建议处理措施
0 nav_navigation_sucess 导航到目标点成功 60200
1 nav_navigation_unreachable 目标点不可达 60201 检查目标点位置
2 nav_navigation_path_error 路径不可达 60202 检查路径上是否有障碍物
3 nav_navigation_open_area 场景空旷,导致定位丢失 60203 移动机器人到环境特征明显的区域,重新定位
4 nav_navigation_crowed_passengers 多人围堵,导致定位丢失 60204 重新定位
5 nav_navigation_environment_changed 环境变化,导致定位丢失 60205 重新定位,如异常依然存在,建议更新地图
6 nav_navigation_lidardata_empty 无雷达数据,导致定位丢失 60206 查看激光雷达诊断解决办法
7 nav_navigation_tof_triggerred TOF触发 60207 检查是否TOF误报或者有悬崖
8 nav_navigation_geomagnetic_triggerred 地磁触发 60208 将机器人移到无地磁区域开机运行
98 nav_navigation_localization_lost 定位丢失,导致原因未知 60298 重新定位
99 nav_navigation_failed_unknown 未知失败原因 60299 建议联系售后

导航地图诊断项

诊断项 诊断码 描述
DIAG_NAV_SYS_LOAD_MAP 60300 导航地图

导航地图识别码

信息码 诊断信息 描述 识别码 (诊断码+信息 码) 建议处理措施
0 nav_load_map_sucess 载入地图成功 60300
1 nav_load_map_failed 载入地图失败 60301 1、检查地图是否为对应导航方案
2、检查地图文件是否有效
3、重新导出地图
2 nav_load_map_timeout 大地图超时 60302 提示地图过大,设置超时