/// <summary> /// Translate the RobotActions into real world robot movements serial commands /// </summary> /// <param name="action"></param> public override void DoActions(PhysicalRobotAction action) { if (action.ActionType == PhysicalActionType.MoveForward) moveDistance(action.RobotId, (int) action.ActionValue); else if (action.ActionType == PhysicalActionType.MoveBackward) moveDistance(action.RobotId, -1*(int)action.ActionValue); else if (action.ActionType == PhysicalActionType.Turn) rotateDegree(action.RobotId, (int)action.ActionValue); else if (action.ActionType == PhysicalActionType.SetSpeed) moveDistance(action.RobotId, (int)action.ActionValue); }
public override void DoActions(PhysicalRobotAction action) { //Console.WriteLine("Sending action to simulator"); Random rng = new Random(); if (action.ActionType == PhysicalActionType.MoveForward) { //Accounts for scaling differences in the simulator and the controller action.ActionValue = (action.ActionValue / 1000) * this.scale; Console.WriteLine("=====================MOVING FORWARD THIS DISTANCE: " + action.ActionValue); CS266.SimCon.Simulator.RobotActions rb = new RobotActions(); rb.Add(new RobotAction(action.RobotId.ToString(), 0, (float)action.ActionValue)); os.ExecuteActions(rb); } else if (action.ActionType == PhysicalActionType.MoveBackward) { //Accounts for scaling differences in the simulator and controller action.ActionValue = (action.ActionValue / 1000) * this.scale; CS266.SimCon.Simulator.RobotActions rb = new RobotActions(); rb.Add(new RobotAction(action.RobotId.ToString(), 0, (float)-action.ActionValue)); os.ExecuteActions(rb); } else if (action.ActionType == PhysicalActionType.Turn) { if (os.Algo.name != "DFS") { if (action.ActionValue < 0) { action.ActionValue = (-1) * (360f + action.ActionValue); } else { action.ActionValue *= -1; } } Console.WriteLine("=====================TURNING THIS ANGLE: " + action.ActionValue); CS266.SimCon.Simulator.RobotActions rb = new RobotActions(); //rb.Add(new RobotAction(action.RobotId.ToString(), (float)action.ActionValue, 0)); rb.Add(new RobotAction(action.RobotId.ToString(), (-1) * (float)action.ActionValue, 0)); // multiply by -1 to undo what Robot.cs does! os.ExecuteActions(rb); } else if (action.ActionType == PhysicalActionType.CreateRobot) { os.AddNewRobot(new ObjectState("N1", "robot", new float[3] { DFSExperiment.doorX, DFSExperiment.doorY, 0 }, new float[3] { 1, 0, 0 }, new float[3] { 0, 0, 0 }, new float[3] { 0, 0, 0 })); } else if (action.ActionType == PhysicalActionType.SetSpeed) { } //System.Threading.Thread.Sleep(500); }
public abstract void DoActions(PhysicalRobotAction action);