/// <summary> /// Add relevant information on each body part to observations. /// </summary> public void CollectObservationBodyPart(MLAgentsExamples.BodyPart bp, VectorSensor sensor) { var rb = bp.rb; sensor.AddObservation(bp.groundContact.touchingGround ? 1 : 0); // Is this bp touching the ground sensor.AddObservation(rb.velocity); sensor.AddObservation(rb.angularVelocity); var localPosRelToHips = hips.InverseTransformPoint(rb.position); sensor.AddObservation(localPosRelToHips); if (bp.rb.transform != hips && bp.rb.transform != handL && bp.rb.transform != handR && bp.rb.transform != footL && bp.rb.transform != footR && bp.rb.transform != head) { sensor.AddObservation(bp.currentXNormalizedRot); sensor.AddObservation(bp.currentYNormalizedRot); sensor.AddObservation(bp.currentZNormalizedRot); sensor.AddObservation(bp.currentStrength / m_JdController.maxJointForceLimit); } }
/// <summary> /// Add relevant information on each body part to observations. /// </summary> public void CollectObservationBodyPart(MLAgentsExamples.BodyPart bp, VectorSensor sensor) { var rb = bp.rb; sensor.AddObservation(bp.groundContact.touchingGround ? 1 : 0); // Whether the bp touching the ground var velocityRelativeToLookRotationToTarget = m_TargetDirMatrix.inverse.MultiplyVector(rb.velocity); sensor.AddObservation(velocityRelativeToLookRotationToTarget); var angularVelocityRelativeToLookRotationToTarget = m_TargetDirMatrix.inverse.MultiplyVector(rb.angularVelocity); sensor.AddObservation(angularVelocityRelativeToLookRotationToTarget); if (bp.rb.transform != body) { var localPosRelToBody = body.InverseTransformPoint(rb.position); sensor.AddObservation(localPosRelToBody); sensor.AddObservation(bp.currentXNormalizedRot); // Current x rot sensor.AddObservation(bp.currentYNormalizedRot); // Current y rot sensor.AddObservation(bp.currentZNormalizedRot); // Current z rot sensor.AddObservation(bp.currentStrength / m_JdController.maxJointForceLimit); } }