多机协作与调度
多机协作
多机协作包含多机调度和多机避让功能,涉及到机器人多机协作的基础能力,此处主要涉及到的通信模块也属于机器人的多机协作基础能力部分,所属系统功能。
机器人多机协作,不需要我们人为做任何操作,所有行为均是机器人系统调度。但前提是必须保证机器人在同一地图下工作,多个机器人在碰面之后,会调用我们的机器人通信,会给他们此时的工作优先级进行排序,从而来确定是避让还是继续工作,从而避免多个机器人在工作时相遇在同一地点,呆滞不动的情况。因此,只需保证机器人性能与硬件一切正常,多机协作能力即可正常工作。
多机协作信息
在安装了ESP32多机通讯模块的机器人上,可使用以下方法获取多机信息,可用于制作多机调度系统。目前招财豹一定有ESP32多机通讯模块,其它机器人默认不包含这个模块。
RobotApi.getInstance().registerStatusListener(Definition.STATUS_MULTIPLE_ROBOT_WORKING, mStatusListener);
private StatusListener mStatusListener = new StatusListener() {
@Override
public void onStatusUpdate(String type, String data) {
try {
Type dataType = new TypeToken<List<MultiRobotStatus>>(){}.getType();
List<MultiRobotStatus> curRobotStatus = mGson.fromJson(data, dataType);
}catch(Exception ex){
}
}
}
RobotApi.getInstance().registerStatusListener(Definition.STATUS_MULTIPLE_ROBOT_WORKING, mStatusListener);
private StatusListener mStatusListener = new StatusListener() {
@Override
public void onStatusUpdate(String type, String data) {
try {
Type dataType = new TypeToken<List<MultiRobotStatus>>(){}.getType();
List<MultiRobotStatus> curRobotStatus = mGson.fromJson(data, dataType);
}catch(Exception ex){
}
}
}
RobotApi.getInstance().registerStatusListener(Definition.STATUS_MULTIPLE_ROBOT_WORKING, mStatusListener); private StatusListener mStatusListener = new StatusListener() { @Override public void onStatusUpdate(String type, String data) { try { Type dataType = new TypeToken<List<MultiRobotStatus>>(){}.getType(); List<MultiRobotStatus> curRobotStatus = mGson.fromJson(data, dataType); }catch(Exception ex){ } } }
其中MultiRobotStatus定义如下:
public class MultiRobotStatus {
private BasePoseBean pose;
private BasePoseBean goal;
private int id;
private int priority;
private boolean mapMatch;
private long time;
private int status;
private boolean curRobot = false;
private int errorStatus = 0;
}
public class MultiRobotStatus {
private BasePoseBean pose;
private BasePoseBean goal;
private int id;
private int priority;
private boolean mapMatch;
private long time;
private int status;
private boolean curRobot = false;
private int errorStatus = 0;
}
public class MultiRobotStatus { private BasePoseBean pose; private BasePoseBean goal; private int id; private int priority; private boolean mapMatch; private long time; private int status; private boolean curRobot = false; private int errorStatus = 0; }