/// <summary> /// Signal all peripherals /// </summary> /// <param name="signal"></param> public void Signal(ControlSignal signal) { foreach (var peripheral in _peripherals) { peripheral.Signal(signal); } }
void Awake() { signalControl = new ControlSignal(); path = "Save/DroneSession/" + "Task-" + task + "/Seed-" + fromSeed + "/"; rndGenerator = new SystemRandomSource(fromSeed); taskObject = (DroneTask)Activator.CreateInstance(Type.GetType("Lexmou.MachineLearning.Drone" + task), rndGenerator, task); mlp = new MultiLayerMathsNet(fromSeed, null, taskObject.shapes, 1, 0); float[] floatArr = new float[taskObject.individualSize]; //float[] floatArr = new float[] {0,-0.33f,0,0,-0.33f,0,0,0,0,0,0.5f,0,0,-1,0,0,-1,0,0,0.5f,0,1,0,0,0,0,0,0,0,0,0,-1,0,0,0,0,0,0,0,0.5f}; Genetic.LoadBest(path, fromGeneration, floatArr); BuildCustomWeights(mlp.weights, taskObject.shapes, Vector <float> .Build.DenseOfArray(floatArr)); //Debug.Log(mlp.weights[0]); /*if (stabilizationGeneration != 0) * { * Debug.Log("Gene Move"); * gene = new Genetic(stabilizationSeed, null, 100, 40, 1.0f, 0.1f, 0.1f, 0.1f, 0.1f, "Save/DroneSession/Task-stabilization/", false); * } * if (moveGeneration != 0) * { * Debug.Log("Gene Move"); * gene = new Genetic(moveSeed, null, 100, 52, 1.0f, 0.1f, 0.1f, 0.1f, 0.1f, "Save/DroneSession/Task-move/", false); * } * deltaDistribution = new ContinuousUniform(-2, 2); * tmpBuildCustomWeights = new List<Matrix<float>>();*/ Restart(); }
public override void Build() { if (save) { writerEnv = UIO.CreateStreamWriter(GeneratePath(task, true), "GeneSessionResults.csv", false); UIO.WriteLine(writerEnv, "Generation;Angle Random Rotation;Wind"); } Debug.Log("Build DroneSession"); signal = new ControlSignal(); tsignal = new ThrustSignal(); tmpBuildCustomWeights = new List <Matrix <float> >(); externalEvaluations = Vector <float> .Build.Dense(populationSize); //Debug.Log(fromTask); taskObject = (DroneTask)Activator.CreateInstance(Type.GetType("Lexmou.MachineLearning.Drone" + task), rndGenerator, fromTask); //Debug.Log(taskObject.fromTask); dronePopulation = new GameObject[populationSize]; droneRigid = new Rigidbody[populationSize]; targetPosition = new Vector3[populationSize]; mlpPopulation = new MultiLayerMathsNet[populationSize]; gene = new Genetic(seed, rndGenerator, populationSize, taskObject.individualSize, initialValueWeights, mutationRate, randomIndividualsRate, bestIndividualsRate, emptyRate, GeneratePath(task, false), save); if (loadGeneration != 0) { float[,] floatArr = new float[taskObject.individualSize - taskObject.rowIndex, populationSize]; Debug.Log(taskObject.fromTask); //Debug.Log(taskObject.individualSize); gene.LoadGeneration(GeneratePath(taskObject.fromTask, true), loadGeneration, floatArr, taskObject.rowIndex); gene.generation = loadGeneration; } }
public void SendControlSignal(ControlSignal signal) { resultControl = signal; foreach (Drone.Hardware.Component <ControlSignal> component in ControlSignalBus) { resultControl = component.ProcessSignal(resultControl); } }
public void SendControlSignal(ControlSignal signal) { ControlSignal result = signal; foreach (Drone.Hardware.Component<ControlSignal> component in ControlSignalBus) { result = component.ProcessSignal (result); } }
private ControlSignalViewModel CreateControlSignalViewModelViewModel( ControlSignal controlSignal, string groupName) { var res = new ControlSignalViewModel(); res.Id = controlSignal.Id; res.Header = controlSignal.Name.ToUpper(); res.GroupName = groupName; return(res); }
void FixedUpdate() { ControlSignal signal = new ControlSignal (); signal.Throttle = Input.GetAxis ("LeftY"); signal.Rudder = Input.GetAxis ("LeftX"); signal.Elevator = Input.GetAxis ("RightY"); signal.Aileron = Input.GetAxis ("RightX"); MainBoard.SendControlSignal (signal); }
void FixedUpdate() { ControlSignal signal = new ControlSignal(); signal.Throttle = Input.GetAxis("LeftY"); signal.Rudder = Input.GetAxis("LeftX"); signal.Elevator = Input.GetAxis("RightY"); signal.Aileron = Input.GetAxis("RightX"); MainBoard.SendControlSignal(signal); }
void FixedUpdate() { if (constant) { ControlSignal signal = new ControlSignal(); signal.Throttle = constantThrottle; signal.Rudder = constantRudder; signal.Elevator = constantElevator; signal.Aileron = constantAileron; MainBoard.SendControlSignal(signal); } else { if (manual) { ControlSignal signal = new ControlSignal(); if (stabilization || move) { Rigidbody rigid = this.gameObject.GetComponentInChildren <Rigidbody>(); if (stabilization) { Debug.Log("Stable !"); MainBoard.inputMLP = Vector <float> .Build.DenseOfArray(new float[] { UAngle.SteerAngle(rigid.transform.eulerAngles.x), UAngle.SteerAngle(rigid.transform.eulerAngles.y), UAngle.SteerAngle(rigid.transform.eulerAngles.z), rigid.angularVelocity.x, rigid.angularVelocity.y, rigid.angularVelocity.z, rigid.velocity.x, rigid.velocity.y, rigid.velocity.z }); } else { Debug.Log("Move !"); MainBoard.inputMLP = Vector <float> .Build.DenseOfArray(new float[] { MainBoard.deltaPosition.x, MainBoard.deltaPosition.y, MainBoard.deltaPosition.z, UAngle.SteerAngle(rigid.transform.eulerAngles.x), UAngle.SteerAngle(rigid.transform.eulerAngles.y), UAngle.SteerAngle(rigid.transform.eulerAngles.z), rigid.angularVelocity.x, rigid.angularVelocity.y, rigid.angularVelocity.z, rigid.velocity.x, rigid.velocity.y, rigid.velocity.z }); } signal.Throttle = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1][3, 0]; signal.Rudder = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1][0, 0]; signal.Elevator = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1][1, 0]; signal.Aileron = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1][2, 0]; } else { signal.Throttle = Input.GetAxis("LeftY"); signal.Rudder = Input.GetAxis("LeftX"); signal.Elevator = Input.GetAxis("RightY"); signal.Aileron = Input.GetAxis("RightX"); } MainBoard.SendControlSignal(signal); } } }
/// <summary> /// Sends the specified signal to the peripheral. /// </summary> /// <param name="signal">The signal.</param> /// <exception cref="System.ArgumentOutOfRangeException">null</exception> public void Signal(ControlSignal signal) { switch (signal) { case ControlSignal.Halt: Gpu.Halt(); break; case ControlSignal.Resume: Gpu.Resume(); break; default: throw new ArgumentOutOfRangeException(nameof(signal), signal, null); } }
public void SendSignalWithMLP(Vector <float> input) { MainBoard.inputMLP = input; ControlSignal signal = new ControlSignal(); signal.Throttle = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1] [3, 0]; signal.Rudder = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1] [0, 0]; signal.Elevator = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1] [1, 0]; signal.Aileron = MainBoard.mlp.layers[MainBoard.mlp.shapesSize - 1] [2, 0]; MainBoard.SendControlSignal(signal); }
/// <summary> /// Sends the specified signal to the peripheral. /// </summary> /// <param name="signal">The signal.</param> public void Signal(ControlSignal signal) { // Don't listen. }
public void AddControl(ControlSignal controlSignal, Behavior behavior) { mBehaviors.Add(new KeyValuePair<ControlSignal, Behavior>(controlSignal, behavior)); }