RLPark 1.0.0
Reinforcement Learning Framework in Java
|
00001 package rlpark.plugin.critterbot.internal; 00002 00003 import java.awt.Color; 00004 import java.io.IOException; 00005 import java.nio.ByteOrder; 00006 00007 import rlpark.plugin.critterbot.actions.CritterbotAction; 00008 import rlpark.plugin.critterbot.data.CritterbotLabels; 00009 import rlpark.plugin.critterbot.data.CritterbotLabels.LedMode; 00010 import rlpark.plugin.robot.internal.disco.DiscoConnection; 00011 import rlpark.plugin.robot.internal.disco.datagroup.DropColorGroup; 00012 import rlpark.plugin.robot.internal.disco.datagroup.DropScalarGroup; 00013 import rlpark.plugin.robot.internal.disco.drops.Drop; 00014 import rlpark.plugin.robot.internal.disco.drops.DropInteger; 00015 00016 public class CritterbotConnection extends DiscoConnection { 00017 static private double ActionVoltageMax = 25; 00018 protected final Drop actionDrop = DropDescriptors.newActionDrop(); 00019 protected final DropScalarGroup actions = new DropScalarGroup(CritterbotLabels.VelocityCommand, actionDrop); 00020 protected final DropInteger actionMode = (DropInteger) actionDrop.drop(CritterbotLabels.MotorMode); 00021 protected final DropInteger ledMode = (DropInteger) actionDrop.drop(CritterbotLabels.LedMode); 00022 private final DropColorGroup leds = new DropColorGroup(actionDrop); 00023 00024 public CritterbotConnection(String hostname, int port) { 00025 super(hostname, port, DropDescriptors.newObservationDrop(), ByteOrder.LITTLE_ENDIAN); 00026 } 00027 00028 public long lastObservationDropTime() { 00029 return sensorDrop.time(); 00030 } 00031 00032 public void sendActionDrop(CritterbotAction action, LedMode ledModeValue, Color[] ledValues) { 00033 if (action.actions == null || isClosed()) 00034 return; 00035 actionMode.setDouble(action.motorMode.ordinal()); 00036 if (action.motorMode != CritterbotAction.MotorMode.WHEEL_SPACE) 00037 actions.set(action.actions); 00038 else { 00039 double[] actionValues = action.actions.clone(); 00040 for (int i = 0; i < actionValues.length; i++) 00041 actionValues[i] = Math.signum(actionValues[i]) * Math.min(ActionVoltageMax, Math.abs(actionValues[i])); 00042 actions.set(actionValues); 00043 } 00044 actionMode.setDouble(action.motorMode.ordinal()); 00045 ledMode.setDouble(ledModeValue.ordinal()); 00046 leds.set(ledValues); 00047 try { 00048 socket.send(actionDrop); 00049 } catch (IOException e) { 00050 e.printStackTrace(); 00051 close(); 00052 } 00053 } 00054 }