public override RequestQueue Execute(SensorRepository repSensors, RequestQueue LastWinner) { bool iWon = LastWinner != null && LastWinner.BehaviorName == m_Name; RequestQueue requests = new RequestQueue(m_Name); if (repSensors.SensorValueBool("IsPower") && repSensors.SensorValueInt("Direction") == (int)Cruise.MoveDir.Mov_Fwd) { if(repSensors.SensorValueInt("DistL30") < repSensors.SensorValueInt("DistR30")) { if(repSensors.SensorValueInt("DistL30") < 20 || (iWon && repSensors.SensorValueInt("DistL30") < 24)) { requests.Enqueue(new Request() { Name = "Turn Right", Channel = "Drive", Command = "RT" }); } } else { if(repSensors.SensorValueInt("DistR30") < 20 || (iWon && repSensors.SensorValueInt("DistR30") < 24)) { requests.Enqueue(new Request() { Name = "Turn Left", Channel = "Drive", Command = "LF" }); } } } return requests; }
public override RequestQueue Execute(SensorRepository repSensors, RequestQueue LastWinner) { bool iWon = LastWinner != null && LastWinner.BehaviorName == m_Name; RequestQueue requests = new RequestQueue(m_Name); // Ignore if powered off or during a spin if (!repSensors.SensorValueBool("IsPower") || repSensors.SensorValueInt("Direction") == (int)Cruise.MoveDir.Mov_SpinCW || repSensors.SensorValueInt("Direction") == (int)Cruise.MoveDir.Mov_SpinCCW) return requests; if (repSensors.SensorValueInt("DistFwd") <= 8) { if (iWon || repSensors.SensorValueInt("Direction") == (int)Cruise.MoveDir.Mov_Halt) { // Halt already sent so create a NOP request to retain control requests.Enqueue(new Request() { Name = "NOP", Channel = "NA", Command = "NP" }); } else { // Halt requests.Enqueue(new Request() { Name = "Halt", Channel = "Drive", Command = "HL" }); } } return requests; }
public override RequestQueue Execute(SensorRepository repSensors, RequestQueue LastWinner) { bool iWon = LastWinner != null && LastWinner.BehaviorName == m_Name; RequestQueue requests = new RequestQueue(m_Name); if (repSensors.SensorValueBool("IsPower") && repSensors.SensorValueInt("Direction") == (int)Cruise.MoveDir.Mov_Fwd && m_DesiredHeading != -1) { int herr = HeadingError(repSensors.SensorValueInt("Heading")); int corr = m_HhPID.Calculate(herr); if(corr > 0) requests.Enqueue(new Request() { Name = "Right Turn" + corr.ToString(), Channel = "Drive", Command = "RX" + corr.ToString() }); else if (corr < 0) requests.Enqueue(new Request() { Name = "Left Turn" + Math.Abs(corr).ToString(), Channel = "Drive", Command = "LX" + Math.Abs(corr).ToString() }); } return requests; }