public override void CollectObservations() { obs.Clear(); obs.Add(normalize(Cart.transform.localPosition.z, travelLimit, -travelLimit)); obs.Add(normalize(rbCart.velocity.z, maxSpeed, -maxSpeed)); obs.Add(normalize(Ray.DegreeToRadian(poleAngle), Ray.DegreeToRadian(angleLimit), Ray.DegreeToRadian(-angleLimit))); obs.Add(normalize(rbPole.angularVelocity.x, maxAngularSpeed, -maxAngularSpeed)); AddVectorObs(obs); }
public override void CollectObservations() { if (!this.useVisual) // No Vector Obs if use Visual checked { foreach (int co in System.Enum.GetValues(typeof(BallColor.EnumColors))) { AddVectorObs((int)Ball.GetColorEnum() == co ? 1.0f : 0.0f); } AddVectorObs(normalize(Ray.DegreeToRadian(Sorter.transform.rotation.eulerAngles.y), 2 * Mathf.PI, 0)); AddVectorObs(normalize(Lifter.transform.localPosition.y, Lifter.upperLimit, Lifter.lowerLimit)); } }
public override void CollectObservations() { var res = rayPer.Perceive(rayDistance, rayAngles, detectableObjects, 0.4f, 0f); hitOneHot = string.Join(", ", res[0].onehot) + " | " + res[0].tag; obs.Clear(); obs.Add(normalize(Palette.transform.position.x, maxPositionValue, minPositionValue)); obs.Add(normalize(Palette.transform.position.z, maxPositionValue, minPositionValue)); obs.Add(normalize(MainBody.transform.position.x, maxPositionValue, minPositionValue)); obs.Add(normalize(MainBody.transform.position.z, maxPositionValue, minPositionValue)); obs.Add(normalize(Ray.DegreeToRadian(MainBody.transform.rotation.eulerAngles.y), 2 * Mathf.PI, 0)); obs.Add(normalize(rbMainBody.velocity.x, maxSpeed, -maxSpeed)); obs.Add(normalize(rbMainBody.velocity.z, maxSpeed, -maxSpeed)); obs.Add(normalize(rbMainBody.angularVelocity.y, maxAngularVelocity, -maxAngularVelocity)); AddVectorObs(obs); }
public override void InitializeAgent() { if (usePlayerBrain) { MLAgents.PlayerBrain playerBrain = (MLAgents.PlayerBrain)Resources.Load("_RobotPlayerBrain"); this.brain = playerBrain; print("Brain loaded"); } rbMainBody = MainBody.GetComponent <Rigidbody>(); rbPalette = Palette.GetComponent <Rigidbody>(); rayPer = MainBody.GetComponent <Ray3D>(); forkPosition = forkMin; maxAngularVelocity = Ray.DegreeToRadian(360) * rpm / 60; rbMainBody.maxAngularVelocity = maxAngularVelocity; GameObject ground = GameObject.Find("Ground"); var transform = ground.GetComponent <Transform>(); maxPositionValue = transform.lossyScale.x * 10 / 2; minPositionValue = -maxPositionValue; }