诊断服务
诊断服务提供调用诊断相关功能及监听各部件的故障信息。作为诊断服务代理的 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 |
提示地图过大,设置超时 |