| using System; |
|
|
| namespace Unity.MLAgents.Sensors |
| { |
| |
| |
| |
| [UnityEngine.Scripting.APIUpdating.MovedFrom("Unity.MLAgents.Extensions.Sensors")] |
| [Serializable] |
| public struct PhysicsSensorSettings |
| { |
| |
| |
| |
| public bool UseModelSpaceTranslations; |
|
|
| |
| |
| |
| public bool UseModelSpaceRotations; |
|
|
| |
| |
| |
| public bool UseLocalSpaceTranslations; |
|
|
| |
| |
| |
| public bool UseLocalSpaceRotations; |
|
|
| |
| |
| |
| public bool UseModelSpaceLinearVelocity; |
|
|
| |
| |
| |
| public bool UseLocalSpaceLinearVelocity; |
|
|
| |
| |
| |
| public bool UseJointPositionsAndAngles; |
|
|
| |
| |
| |
| public bool UseJointForces; |
|
|
| |
| |
| |
| |
| public static PhysicsSensorSettings Default() |
| { |
| return new PhysicsSensorSettings |
| { |
| UseModelSpaceTranslations = true, |
| UseModelSpaceRotations = true, |
| }; |
| } |
|
|
| |
| |
| |
| public bool UseModelSpace |
| { |
| get { return UseModelSpaceTranslations || UseModelSpaceRotations || UseModelSpaceLinearVelocity; } |
| } |
|
|
| |
| |
| |
| public bool UseLocalSpace |
| { |
| get { return UseLocalSpaceTranslations || UseLocalSpaceRotations || UseLocalSpaceLinearVelocity; } |
| } |
| } |
|
|
| internal static class ObservationWriterPhysicsExtensions |
| { |
| |
| |
| |
| |
| |
| |
| |
| |
| public static int WritePoses(this ObservationWriter writer, PhysicsSensorSettings settings, PoseExtractor poseExtractor, int baseOffset = 0) |
| { |
| var offset = baseOffset; |
| if (settings.UseModelSpace) |
| { |
| foreach (var pose in poseExtractor.GetEnabledModelSpacePoses()) |
| { |
| if (settings.UseModelSpaceTranslations) |
| { |
| writer.Add(pose.position, offset); |
| offset += 3; |
| } |
|
|
| if (settings.UseModelSpaceRotations) |
| { |
| writer.Add(pose.rotation, offset); |
| offset += 4; |
| } |
| } |
|
|
| foreach (var vel in poseExtractor.GetEnabledModelSpaceVelocities()) |
| { |
| if (settings.UseModelSpaceLinearVelocity) |
| { |
| writer.Add(vel, offset); |
| offset += 3; |
| } |
| } |
| } |
|
|
| if (settings.UseLocalSpace) |
| { |
| foreach (var pose in poseExtractor.GetEnabledLocalSpacePoses()) |
| { |
| if (settings.UseLocalSpaceTranslations) |
| { |
| writer.Add(pose.position, offset); |
| offset += 3; |
| } |
|
|
| if (settings.UseLocalSpaceRotations) |
| { |
| writer.Add(pose.rotation, offset); |
| offset += 4; |
| } |
| } |
|
|
| foreach (var vel in poseExtractor.GetEnabledLocalSpaceVelocities()) |
| { |
| if (settings.UseLocalSpaceLinearVelocity) |
| { |
| writer.Add(vel, offset); |
| offset += 3; |
| } |
| } |
| } |
|
|
| return offset - baseOffset; |
| } |
| } |
| } |
|
|