RLPark 1.0.0
Reinforcement Learning Framework in Java

CritterbotConnection.java

Go to the documentation of this file.
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 }
 All Classes Namespaces Files Functions Variables Enumerations
Zephyr
RLPark