/// <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 });
        }
예제 #2
0
        /// <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;

            // Start from i=1 to ignore the root
            for (var i = 1; i < poseExtractor.Bodies.Length; i++)
            {
                numJointObservations += ArticulationBodyJointExtractor.NumObservations(
                    poseExtractor.Bodies[i], Settings
                    );
            }
            return(new[] { numPoseObservations + numJointObservations });
        }