Skip to content
Snippets Groups Projects
Commit 283bc524 authored by Sebastian Ebert's avatar Sebastian Ebert
Browse files

fixed bugs related to placing

parent 2ff702de
No related branches found
No related tags found
No related merge requests found
Showing with 137 additions and 62 deletions
...@@ -15,15 +15,7 @@ public class ControlEndHandler extends TransitionHandler { ...@@ -15,15 +15,7 @@ public class ControlEndHandler extends TransitionHandler {
final static Function<List<Map<String, Object>>, List<Map<String, Object>>> END_HANDLING_FUNCTION = maps -> { final static Function<List<Map<String, Object>>, List<Map<String, Object>>> END_HANDLING_FUNCTION = maps -> {
System.out.println("[RESULT_HANDLING_FUNCTION] Executing."); System.out.println("[RESULT_HANDLING_FUNCTION] Executing.");
RobotConnector rc = RobotConnector.getInstance();
RobotConnector robotConnector = RobotConnector.getInstance();
try {
robotConnector.setup(Configurations.MQTT_BROKER_ADDRESS);
robotConnector.listenToScenes();
} catch (MqttException e) {
e.printStackTrace();
}
String arm = null; String arm = null;
for (Map.Entry<String, Object> entry : maps.get(0).entrySet()) { for (Map.Entry<String, Object> entry : maps.get(0).entrySet()) {
...@@ -31,30 +23,28 @@ public class ControlEndHandler extends TransitionHandler { ...@@ -31,30 +23,28 @@ public class ControlEndHandler extends TransitionHandler {
maps.get(0).replace(TokenConstants.LOCKED,"true"); maps.get(0).replace(TokenConstants.LOCKED,"true");
} }
if (entry.getKey().equals(TokenConstants.COLOR)) { if (entry.getKey().equals(TokenConstants.COLOR)) {
if(robotConnector.leftRobotObjectTypes.contains(entry.getValue())){ if(rc.leftRobotObjectTypes.contains(entry.getValue())){
arm = robotConnector.ROBOT_LEFT; arm = rc.ROBOT_LEFT;
} else { } else {
arm = robotConnector.ROBOT_RIGHT; arm = rc.ROBOT_RIGHT;
} }
} }
} }
if(arm != null){ if(arm != null){
try { try {
robotConnector.isEvacuating = true; rc.isEvacuating = true;
robotConnector.currentRobot = arm;
while(!robotConnector.leftRobotState.equals(de.tudresden.inf.st.ceti.Object.State.STATE_IDLE) while(!rc.leftRobotState.equals(de.tudresden.inf.st.ceti.Object.State.STATE_IDLE)
&& !robotConnector.rightRobotState.equals(de.tudresden.inf.st.ceti.Object.State.STATE_IDLE)) {} && !rc.rightRobotState.equals(de.tudresden.inf.st.ceti.Object.State.STATE_IDLE)) {}
robotConnector.sendEvacuate(arm, true); rc.sendEvacuate(arm, true);
System.out.println("[RESULT_HANDLING_FUNCTION] Waiting after evacuate command."); System.out.println("[RESULT_HANDLING_FUNCTION] Waiting after evacuate command.");
while (robotConnector.isEvacuating) { while (rc.isEvacuating) {
Thread.onSpinWait(); Thread.onSpinWait();
} }
robotConnector.currentRobot = null;
} catch (MqttException e) { } catch (MqttException e) {
e.printStackTrace(); e.printStackTrace();
} }
......
...@@ -5,6 +5,7 @@ import de.tudresden.inf.st.ceti.Pick; ...@@ -5,6 +5,7 @@ import de.tudresden.inf.st.ceti.Pick;
import de.tudresden.inf.st.ceti.PickOrBuilder; import de.tudresden.inf.st.ceti.PickOrBuilder;
import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler; import de.tudresden.inf.st.pnml.engine.execution.TransitionHandler;
import de.tudresden.inf.st.sorting.constants.TokenConstants; import de.tudresden.inf.st.sorting.constants.TokenConstants;
import de.tudresden.inf.st.sorting.mqtt.Configurations;
import de.tudresden.inf.st.sorting.mqtt.MqttUtils; import de.tudresden.inf.st.sorting.mqtt.MqttUtils;
import de.tudresden.inf.st.sorting.mqtt.RobotConnector; import de.tudresden.inf.st.sorting.mqtt.RobotConnector;
import org.eclipse.paho.client.mqttv3.MqttMessage; import org.eclipse.paho.client.mqttv3.MqttMessage;
...@@ -21,12 +22,13 @@ public class PickHandler extends TransitionHandler { ...@@ -21,12 +22,13 @@ public class PickHandler extends TransitionHandler {
System.out.println("[PICK_HANDLING_FUNCTION] Executing."); System.out.println("[PICK_HANDLING_FUNCTION] Executing.");
List<Map<String, Object>> res = new ArrayList<>(); List<Map<String, Object>> res = new ArrayList<>();
RobotConnector rc = RobotConnector.getInstance(); RobotConnector rc = RobotConnector.getInstance();
rc.setup(Configurations.MQTT_BROKER_ADDRESS);
for(Map<String, Object> m : maps){ for(Map<String, Object> m : maps){
// never went through that transition // never went through that transition
if(!m.get(TokenConstants.TRACE).toString().contains("pickToSafety") && if(!m.get(TokenConstants.TRACE).toString().contains("pickToSafety") &&
m.get(TokenConstants.TRACE).toString().contains("safety")){ !m.get(TokenConstants.TRACE).toString().contains("safety")){
System.out.println("[PICK_HANDLING_FUNCTION] Picking."); System.out.println("[PICK_HANDLING_FUNCTION] Picking.");
String arm; String arm;
...@@ -36,6 +38,9 @@ public class PickHandler extends TransitionHandler { ...@@ -36,6 +38,9 @@ public class PickHandler extends TransitionHandler {
arm = rc.ROBOT_RIGHT; arm = rc.ROBOT_RIGHT;
} }
System.out.println("[PICK_HANDLING_FUNCTION] Sending pick command: " +
arm + " / " + m.get(TokenConstants.NAME).toString());
rc.sendPick(arm, m.get(TokenConstants.NAME).toString()); rc.sendPick(arm, m.get(TokenConstants.NAME).toString());
} }
......
...@@ -17,9 +17,13 @@ public class PlaceHandler extends TransitionHandler { ...@@ -17,9 +17,13 @@ public class PlaceHandler extends TransitionHandler {
List<Map<String, Object>> res = new ArrayList<>(); List<Map<String, Object>> res = new ArrayList<>();
RobotConnector rc = RobotConnector.getInstance(); RobotConnector rc = RobotConnector.getInstance();
rc.setup(Configurations.MQTT_BROKER_ADDRESS);
for (Map<String, Object> m : maps) { for (Map<String, Object> m : maps) {
System.out.println("Token: \n");
printToken(m);
// never went through that transition // never went through that transition
if (m.get(TokenConstants.PICK_SUCCESS).toString().equals("success") && if (m.get(TokenConstants.PICK_SUCCESS).toString().equals("success") &&
!m.get(TokenConstants.TRACE).toString().contains("placeToSafety")) { !m.get(TokenConstants.TRACE).toString().contains("placeToSafety")) {
...@@ -29,21 +33,37 @@ public class PlaceHandler extends TransitionHandler { ...@@ -29,21 +33,37 @@ public class PlaceHandler extends TransitionHandler {
String arm; String arm;
if (rc.leftRobotObjectTypes.contains(m.get(TokenConstants.COLOR))) { if (rc.leftRobotObjectTypes.contains(m.get(TokenConstants.COLOR))) {
arm = rc.ROBOT_LEFT; arm = rc.ROBOT_LEFT;
System.out.println("[PLACE_HANDLING_FUNCTION] 1.");
} else { } else {
arm = rc.ROBOT_RIGHT; arm = rc.ROBOT_RIGHT;
System.out.println("[PLACE_HANDLING_FUNCTION] 2.");
} }
System.out.println("[PLACE_HANDLING_FUNCTION] 3. ");
String bin; String bin;
if(m.get(TokenConstants.COLOR).toString().equals(Configurations.SFX_BLUE)){ if(m.get(TokenConstants.COLOR).toString().equals(Configurations.SFX_BLUE)){
bin = Configurations.BIN_BLUE; bin = Configurations.BIN_BLUE;
System.out.println("[PLACE_HANDLING_FUNCTION] 4.");
} else if(m.get(TokenConstants.COLOR).toString().equals(Configurations.SFX_GREEN)){ } else if(m.get(TokenConstants.COLOR).toString().equals(Configurations.SFX_GREEN)){
bin = Configurations.BIN_GREEN; bin = Configurations.BIN_GREEN;
System.out.println("[PLACE_HANDLING_FUNCTION] 5.");
} else { } else {
bin = Configurations.BIN_RED; bin = Configurations.BIN_RED;
System.out.println("[PLACE_HANDLING_FUNCTION] 6.");
} }
System.out.println("[PLACE_HANDLING_FUNCTION] 7.");
System.out.println("B: left: " + rc.leftRobotState);
System.out.println("B: right: " + rc.leftRobotState);
while(!rc.leftRobotState.equals(de.tudresden.inf.st.ceti.Object.State.STATE_IDLE) while(!rc.leftRobotState.equals(de.tudresden.inf.st.ceti.Object.State.STATE_IDLE)
&& !rc.rightRobotState.equals(de.tudresden.inf.st.ceti.Object.State.STATE_IDLE)) {} && !rc.rightRobotState.equals(de.tudresden.inf.st.ceti.Object.State.STATE_IDLE)) {
System.out.println("left: " + rc.leftRobotState);
System.out.println("right: " + rc.leftRobotState);
}
System.out.println("[PLACE_HANDLING_FUNCTION] Sending place command: " + arm + " / " + bin);
rc.sendPlace(arm, bin); rc.sendPlace(arm, bin);
} }
...@@ -62,6 +82,12 @@ public class PlaceHandler extends TransitionHandler { ...@@ -62,6 +82,12 @@ public class PlaceHandler extends TransitionHandler {
return res; return res;
}; };
private static void printToken(Map<String, Object> t){
for (Map.Entry<String, Object> entry : t.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
public PlaceHandler(int priority) { public PlaceHandler(int priority) {
super(priority, PLACE_HANDLING_FUNCTION); super(priority, PLACE_HANDLING_FUNCTION);
} }
......
...@@ -8,6 +8,9 @@ public interface Configurations { ...@@ -8,6 +8,9 @@ public interface Configurations {
String LEFT_SCENE_UPDATE_TOPIC = "/ceti_cell_1/scene/delta-update"; String LEFT_SCENE_UPDATE_TOPIC = "/ceti_cell_1/scene/delta-update";
String RIGHT_SCENE_UPDATE_TOPIC = "/ceti_cell_2/scene/delta-update"; String RIGHT_SCENE_UPDATE_TOPIC = "/ceti_cell_2/scene/delta-update";
String LEFT_SCENE_TOPIC = "/ceti_cell_1/scene/update";
String RIGHT_SCENE_TOPIC = "/ceti_cell_2/scene/update";
String WEB_SELECTION_TOPIC = "selection"; String WEB_SELECTION_TOPIC = "selection";
String MQTT_BROKER_ADDRESS = "tcp://localhost:1883"; String MQTT_BROKER_ADDRESS = "tcp://localhost:1883";
...@@ -16,7 +19,7 @@ public interface Configurations { ...@@ -16,7 +19,7 @@ public interface Configurations {
String BIN_RED = "binRed"; String BIN_RED = "binRed";
String BIN_GREEN = "binGreen"; String BIN_GREEN = "binGreen";
String SFX_BLUE = "Blue"; String SFX_BLUE = "blue";
String SFX_RED = "Red"; String SFX_RED = "red";
String SFX_GREEN = "Green"; String SFX_GREEN = "green";
} }
...@@ -20,19 +20,29 @@ public class RobotConnector extends Connector { ...@@ -20,19 +20,29 @@ public class RobotConnector extends Connector {
private final String clientId = UUID.randomUUID().toString(); private final String clientId = UUID.randomUUID().toString();
public static IMqttClient client = null; public static IMqttClient client = null;
public volatile boolean isEvacuating = false; public volatile boolean isEvacuating = false;
public String currentRobot = null;
private boolean isListening = false; private boolean isListening = false;
public Object.State leftRobotState = null; public Object.State leftRobotState = null;
public Object.State leftPredRobotState = null;
public Object.State rightRobotState = null; public Object.State rightRobotState = null;
public Object.State rightPredRobotState = null;
private boolean setup = false;
public void setup(String mqttHost) throws MqttException { public void setup(String mqttHost) {
try {
if(!setup) {
setup = true;
client = new MqttClient(mqttHost, clientId, new MemoryPersistence()); client = new MqttClient(mqttHost, clientId, new MemoryPersistence());
MqttUtils.setupMqttOptions(client); MqttUtils.setupMqttOptions(client);
} }
} catch (MqttException e) {
e.printStackTrace();
}
}
public Object.State getRobotState(String arm, Scene scene){ public Object.State getRobotState(String arm, Scene scene){
for(Object o : scene.getObjectsList()){ for(Object o : scene.getObjectsList()){
if(o.getId().equals(arm)){ if(o.getId().equals(arm)){
System.out.println("Robot State: " + o.getState());
return o.getState(); return o.getState();
} }
} }
...@@ -51,15 +61,44 @@ public class RobotConnector extends Connector { ...@@ -51,15 +61,44 @@ public class RobotConnector extends Connector {
@Override @Override
public void messageArrived(String topic, MqttMessage message) throws Exception { public void messageArrived(String topic, MqttMessage message) throws Exception {
if (topic.equals(Configurations.LEFT_SCENE_UPDATE_TOPIC)){
System.out.println("[MQTT] Received message on topic: " + topic);
if (topic.equals(Configurations.LEFT_SCENE_UPDATE_TOPIC) ||
topic.equals(Configurations.LEFT_SCENE_TOPIC)){
Scene s = Scene.parseFrom(message.getPayload()); Scene s = Scene.parseFrom(message.getPayload());
checkIfEvacuated(s); System.out.println("[MQTT] Updating left robot state.");
leftRobotState = getRobotState(ROBOT_LEFT, s); leftRobotState = getRobotState(ROBOT_LEFT, s);
} }
if (topic.equals(Configurations.RIGHT_SCENE_UPDATE_TOPIC)) { if (topic.equals(Configurations.RIGHT_SCENE_UPDATE_TOPIC) ||
topic.equals(Configurations.RIGHT_SCENE_TOPIC)) {
Scene s = Scene.parseFrom(message.getPayload()); Scene s = Scene.parseFrom(message.getPayload());
checkIfEvacuated(s); System.out.println("[MQTT] Updating right robot state.");
leftRobotState = getRobotState(ROBOT_RIGHT, s); /* Object.State newState = getRobotState(ROBOT_RIGHT, s);
if(leftRobotState == null){
leftRobotState = newState;
}
if(!newState.toString().equals(leftRobotState.toString())){
leftPredRobotState = leftRobotState;
leftRobotState = newState;
System.out.println("[MQTT] Detected robot state change: "
+ leftPredRobotState + " >> " + leftRobotState);
}
if(leftRobotState.toString().equals("STATE_IDLE") &&
leftPredRobotState.toString().equals("STATE_PICKING")){
System.out.println("[MQTT] Submitting pick success signal.");
client.publish("PickSuccess", MqttUtils.buildMsg("true".getBytes()));
}*/
for(Object o : s.getObjectsList()){
if(o.getId().equals("smallGreen")){
System.out.println("State: " + o.getState());
}
}
} }
} }
...@@ -69,21 +108,9 @@ public class RobotConnector extends Connector { ...@@ -69,21 +108,9 @@ public class RobotConnector extends Connector {
}); });
client.subscribe(Configurations.LEFT_SCENE_UPDATE_TOPIC, 0); client.subscribe(Configurations.LEFT_SCENE_UPDATE_TOPIC, 0);
client.subscribe(Configurations.LEFT_SCENE_TOPIC, 0);
client.subscribe(Configurations.RIGHT_SCENE_UPDATE_TOPIC, 0); client.subscribe(Configurations.RIGHT_SCENE_UPDATE_TOPIC, 0);
} client.subscribe(Configurations.RIGHT_SCENE_TOPIC, 0);
}
private void checkIfEvacuated(Scene scene) {
for (Object o : scene.getObjectsList()) {
System.out.println(o.getType() + " -- " + o.getId() + " -- " + currentRobot);
if (o.getType().equals(Object.Type.ARM) && o.getId().equals(currentRobot)) {
System.out.println("[RobotConnector] Arm State: " + o.getState().name());
if (o.getState().equals(Object.State.STATE_IDLE)) {
isEvacuating = false;
return;
}
}
} }
} }
...@@ -95,11 +122,13 @@ public class RobotConnector extends Connector { ...@@ -95,11 +122,13 @@ public class RobotConnector extends Connector {
.build(); .build();
Command com = Command.newBuilder().setPick(p).build(); Command com = Command.newBuilder().setPick(p).build();
System.out.println("com: " + com);
MqttMessage comMsg = MqttUtils.buildMsg(com.toByteArray()); MqttMessage comMsg = MqttUtils.buildMsg(com.toByteArray());
System.out.println("comMsg: " + comMsg);
System.out.println("[RobotConnector] Constructed pick command: " + object + " via robot: " + currentRobot); System.out.println("[RobotConnector] Constructed pick command: " + object + " via robot: " + arm);
if (currentRobot.equals(ROBOT_LEFT)) { if (arm.equals(ROBOT_LEFT)) {
System.out.println("[RobotConnector] Sending pick command to left robot."); System.out.println("[RobotConnector] Sending pick command to left robot.");
try { try {
client.publish(Configurations.LEFT_COMMAND_TOPIC, comMsg); client.publish(Configurations.LEFT_COMMAND_TOPIC, comMsg);
...@@ -108,7 +137,7 @@ public class RobotConnector extends Connector { ...@@ -108,7 +137,7 @@ public class RobotConnector extends Connector {
} }
} }
if (currentRobot.equals(ROBOT_RIGHT)) { if (arm.equals(ROBOT_RIGHT)) {
System.out.println("[RobotConnector] Sending pick command to right robot."); System.out.println("[RobotConnector] Sending pick command to right robot.");
try { try {
client.publish(Configurations.RIGHT_COMMAND_TOPIC, comMsg); client.publish(Configurations.RIGHT_COMMAND_TOPIC, comMsg);
...@@ -120,18 +149,18 @@ public class RobotConnector extends Connector { ...@@ -120,18 +149,18 @@ public class RobotConnector extends Connector {
public void sendPlace(String arm, String object) { public void sendPlace(String arm, String object) {
Place p = Place.newBuilder() Drop d = Drop.newBuilder()
.setIdPlace(object) .setIdBin(object)
.setIdRobot(arm) .setIdRobot(arm)
.build(); .build();
Command com = Command.newBuilder().setPlace(p).build(); Command com = Command.newBuilder().setDrop(d).build();
MqttMessage comMsg = MqttUtils.buildMsg(com.toByteArray()); MqttMessage comMsg = MqttUtils.buildMsg(com.toByteArray());
System.out.println("[RobotConnector] Constructed place command: " + object + " via robot: " + currentRobot); System.out.println("[RobotConnector] Constructed drop command: " + object + " via robot: " + arm);
if (currentRobot.equals(ROBOT_LEFT)) { if (arm.equals(ROBOT_LEFT)) {
System.out.println("[RobotConnector] Sending place command to left robot."); System.out.println("[RobotConnector] Sending drop command to left robot.");
try { try {
client.publish(Configurations.LEFT_COMMAND_TOPIC, comMsg); client.publish(Configurations.LEFT_COMMAND_TOPIC, comMsg);
} catch (MqttException e) { } catch (MqttException e) {
...@@ -139,8 +168,8 @@ public class RobotConnector extends Connector { ...@@ -139,8 +168,8 @@ public class RobotConnector extends Connector {
} }
} }
if (currentRobot.equals(ROBOT_RIGHT)) { if (arm.equals(ROBOT_RIGHT)) {
System.out.println("[RobotConnector] Sending place command to right robot."); System.out.println("[RobotConnector] Sending drop command to right robot.");
try { try {
client.publish(Configurations.RIGHT_COMMAND_TOPIC, comMsg); client.publish(Configurations.RIGHT_COMMAND_TOPIC, comMsg);
} catch (MqttException e) { } catch (MqttException e) {
......
...@@ -3,6 +3,9 @@ package de.tudresden.inf.st.sorting.nodes; ...@@ -3,6 +3,9 @@ package de.tudresden.inf.st.sorting.nodes;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode; import de.tudresden.inf.st.pnml.engine.ros.DiNeRosNode;
import de.tudresden.inf.st.pnml.jastadd.model.*; import de.tudresden.inf.st.pnml.jastadd.model.*;
import de.tudresden.inf.st.sorting.constants.TokenConstants; import de.tudresden.inf.st.sorting.constants.TokenConstants;
import de.tudresden.inf.st.sorting.mqtt.Configurations;
import de.tudresden.inf.st.sorting.mqtt.RobotConnector;
import org.eclipse.paho.client.mqttv3.MqttException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
...@@ -14,6 +17,14 @@ public class ExecutorNode extends DiNeRosNode { ...@@ -14,6 +17,14 @@ public class ExecutorNode extends DiNeRosNode {
public ExecutorNode(String nodeName, PetriNet petriNet, String rcHost) { public ExecutorNode(String nodeName, PetriNet petriNet, String rcHost) {
super(nodeName, petriNet, rcHost, "mqtt"); super(nodeName, petriNet, rcHost, "mqtt");
RobotConnector rc = RobotConnector.getInstance();
try {
rc.setup(Configurations.MQTT_BROKER_ADDRESS);
rc.listenToScenes();
} catch (MqttException e) {
e.printStackTrace();
}
} }
public boolean hasIntervalPassed() { public boolean hasIntervalPassed() {
......
...@@ -2,10 +2,21 @@ package de.tudresden.inf.st.sorting.nodes; ...@@ -2,10 +2,21 @@ package de.tudresden.inf.st.sorting.nodes;
import de.tudresden.inf.st.pnml.engine.ros.DiNeRosDefaultNode; import de.tudresden.inf.st.pnml.engine.ros.DiNeRosDefaultNode;
import de.tudresden.inf.st.pnml.jastadd.model.PetriNet; import de.tudresden.inf.st.pnml.jastadd.model.PetriNet;
import de.tudresden.inf.st.sorting.mqtt.Configurations;
import de.tudresden.inf.st.sorting.mqtt.RobotConnector;
import org.eclipse.paho.client.mqttv3.MqttException;
public class SynchronizerNode extends DiNeRosDefaultNode { public class SynchronizerNode extends DiNeRosDefaultNode {
public SynchronizerNode(String nodeName, PetriNet petriNet, String rcHost) { public SynchronizerNode(String nodeName, PetriNet petriNet, String rcHost) {
super(nodeName, petriNet, rcHost, "mqtt"); super(nodeName, petriNet, rcHost, "mqtt");
RobotConnector rc = RobotConnector.getInstance();
try {
rc.setup(Configurations.MQTT_BROKER_ADDRESS);
rc.listenToScenes();
} catch (MqttException e) {
e.printStackTrace();
}
} }
} }
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
<subnet>selectorGreen</subnet> <subnet>selectorGreen</subnet>
<balloonMarking> <balloonMarking>
<tokens> <tokens>
<token>{"color" : "green", "name" : "green1", "pickSuccess" : "false", "placeSuccess" : "false", <token>{"color" : "green", "name" : "smallGreen", "pickSuccess" : "false", "placeSuccess" : "false",
"humanDetected" : "false", "sensorData" : "", "trace" : "", "locked" : "false" } </token> "humanDetected" : "false", "sensorData" : "", "trace" : "", "locked" : "false" } </token>
</tokens> </tokens>
</balloonMarking> </balloonMarking>
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
<subnet>selectorBlue</subnet> <subnet>selectorBlue</subnet>
<balloonMarking> <balloonMarking>
<tokens> <tokens>
<token>{"color" : "blue", "name" : "blue1", "pickSuccess" : "false", "placeSuccess" : "false", <token>{"color" : "blue", "name" : "smallBlue", "pickSuccess" : "false", "placeSuccess" : "false",
"humanDetected" : "false", "sensorData" : "", "trace" : "", "locked" : "false" } </token> "humanDetected" : "false", "sensorData" : "", "trace" : "", "locked" : "false" } </token>
</tokens> </tokens>
</balloonMarking> </balloonMarking>
...@@ -70,7 +70,7 @@ ...@@ -70,7 +70,7 @@
<subnet>selectorRed</subnet> <subnet>selectorRed</subnet>
<balloonMarking> <balloonMarking>
<tokens> <tokens>
<token>{"color" : "red", "name" : "red1", "pickSuccess" : "false", "placeSuccess" : "false", <token>{"color" : "red", "name" : "smallRed", "pickSuccess" : "false", "placeSuccess" : "false",
"humanDetected" : "false", "sensorData" : "", "trace" : "", "locked" : "false" } </token> "humanDetected" : "false", "sensorData" : "", "trace" : "", "locked" : "false" } </token>
</tokens> </tokens>
</balloonMarking> </balloonMarking>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment