/// <inheritdoc/> public override int[] GetObservationShape() { if (RootBody == null) { return(new[] { 0 }); } // TODO static method in PhysicsBodySensor? // TODO only update PoseExtractor when body changes? var poseExtractor = new ArticulationBodyPoseExtractor(RootBody); var numPoseObservations = poseExtractor.GetNumPoseObservations(Settings); var numJointObservations = 0; foreach (var articBody in poseExtractor.GetEnabledArticulationBodies()) { numJointObservations += ArticulationBodyJointExtractor.NumObservations(articBody, Settings); } return(new[] { numPoseObservations + numJointObservations }); }
public PhysicsBodySensor(ArticulationBody rootBody, PhysicsSensorSettings settings, string sensorName = null) { var poseExtractor = new ArticulationBodyPoseExtractor(rootBody); m_PoseExtractor = poseExtractor; m_SensorName = string.IsNullOrEmpty(sensorName) ? $"ArticulationBodySensor:{rootBody?.name}" : sensorName; m_Settings = settings; var numJointExtractorObservations = 0; m_JointExtractors = new List <IJointExtractor>(poseExtractor.NumEnabledPoses); foreach (var articBody in poseExtractor.GetEnabledArticulationBodies()) { var jointExtractor = new ArticulationBodyJointExtractor(articBody); numJointExtractorObservations += jointExtractor.NumObservations(settings); m_JointExtractors.Add(jointExtractor); } var numTransformObservations = m_PoseExtractor.GetNumPoseObservations(settings); m_Shape = new[] { numTransformObservations + numJointExtractorObservations }; }