public override void CollectObservations(VectorSensor sensor) { if (sensor != null) { sensor.AddObservation(stats.steer); float speed = Mathf.Clamp(stats.speed, 0f, 40f); sensor.AddObservation(speed / 20f - 1f); float angle = Mathf.Clamp(stats.orientation, -45f, 45f); sensor.AddObservation(angle / 45f); float offset = Mathf.Clamp(stats.offset, -Chunk.RoadExtent, Chunk.RoadExtent); sensor.AddObservation(offset / Chunk.RoadExtent); sensor.AddObservation(vehicle.Inclination); sensor.AddObservation(Normalization.Sigmoid(vehicle.Velocity)); sensor.AddObservation(Normalization.Sigmoid(vehicle.AngularVelocity)); sensor.AddObservation(road.GetNormalizedObstacleDistances(60)); foreach (var dir in road.GetWayPointDirections(5, 16)) { sensor.AddObservation(dir); } } }
public override void CollectObservations(VectorSensor sensor) { sensor.AddObservation(m_NormTargetSpeed); sensor.AddObservation(NormTargetWalkAngle); sensor.AddObservation(NormTargetLookAngle); sensor.AddObservation(m_Body.Gyro); sensor.AddObservation(Normalization.Sigmoid(m_Body.LocalVelocity)); sensor.AddObservation(Normalization.Sigmoid(m_Body.LocalAngularVelocity)); for (int i = 0; i < m_Bones.Length; i++) { sensor.AddObservation(m_Bones[i].NormAngle); sensor.AddObservation(m_Bones[i].NormLocalVelocity); } foreach (var detector in m_GroundRayDetectors) { sensor.AddObservation(detector.GetGroundDistance()); } foreach (var detector in m_GroundContactDetectors) { sensor.AddObservation(detector.HasGroundContact); } }
public override void CollectObservations(VectorSensor sensor) { sensor.AddObservation(m_PrevActions); sensor.AddObservation(Health * 2 - 1); var v = Normalization.Sigmoid(m_Walker.LocalVelocity); sensor.AddObservation(v.x); sensor.AddObservation(v.z); }
public override void CollectObservations(VectorSensor sensor) { Info.Position = transform.position; Info.Forward = transform.forward; road.UpdateInfo(Info); if (Info.IsOffRoad) { AddReward(Mathf.Abs(Info.Deviation) * -offRoadPenaltyFactor); } else { AddReward(Vector3.Dot(Info.Frame.Forward, physics.Velocity) * speedRewardFactor); } sensor.AddObservation(Info.Angle / 180f); sensor.AddObservation(Mathf.Clamp(Info.Deviation * 0.2f, -1f, 1f)); sensor.AddObservation(physics.Inclination3); Vector3 v = physics.Localize(physics.Velocity); sensor.AddObservation(Normalization.Sigmoid(v.x)); sensor.AddObservation(Normalization.Sigmoid(v.y)); // Forward Speed: 0 - 25 m/s => 0 - 90 km/h // http://fooplot.com/#W3sidHlwZSI6MCwiZXEiOiJzcXJ0KHgqMC4wNCkqMi0xIiwiY29sb3IiOiIjMDAwMDAwIn0seyJ0eXBlIjoxMDAwLCJ3aW5kb3ciOlsiLTI1LjA2MzAwMTE5MjUzMjk2NSIsIjExNy45ODgxNDYyNjg0MDQzOSIsIi01LjgzMzQzOTgyNjk2NTMyMyIsIjguNDcxNjc0OTE5MTI4NDA3Il19XQ-- sensor.AddObservation(Mathf.Min(Mathf.Sqrt(Mathf.Max(v.z, 0f) * 0.04f) * 2f - 1f, 1f)); sensor.AddObservation(Normalization.Sigmoid(physics.AngularVelocity)); sensor.AddObservation(physics.WheelR.NormMotorTorque); sensor.AddObservation(physics.WheelF.NormSteer); sensor.AddObservation(physics.WheelR.NormBrakeTorque); sensor.AddObservation(physics.WheelF.NormBrakeTorque); sensor.AddObservation(physics.WheelR.GetHeightAboveGround()); sensor.AddObservation(physics.WheelF.GetHeightAboveGround()); Vector3 origin = GetRayOrigin(); foreach (int i in lookAhead) { Vector3 p = road.GetFrame(Info.Frame.Index + i).Position; sensor.AddObservation((p - origin).normalized); Debug.DrawRay(p, Vector3.up, Color.white); } foreach (float distance in rayObs) { // Buffered sensor.AddObservation(distance); } CastRays(origin); foreach (float distance in rayObs) { // Current sensor.AddObservation(distance); } }
public override void CollectObservations(VectorSensor sensor) { sensor.AddObservation(multicopter.Inclination); sensor.AddObservation(Normalization.Sigmoid( multicopter.LocalizeVector(multicopter.Rigidbody.velocity), 0.25f)); sensor.AddObservation(Normalization.Sigmoid( multicopter.LocalizeVector(multicopter.Rigidbody.angularVelocity))); foreach (var rotor in multicopter.Rotors) { sensor.AddObservation(rotor.CurrentThrust); } }