Exemplo n.º 1
0
        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;
            var articBodies = poseExtractor.Bodies;

            if (articBodies != null)
            {
                m_JointExtractors = new IJointExtractor[articBodies.Length - 1]; // skip the root
                for (var i = 1; i < articBodies.Length; i++)
                {
                    var jointExtractor = new ArticulationBodyJointExtractor(articBodies[i]);
                    numJointExtractorObservations += jointExtractor.NumObservations(settings);
                    m_JointExtractors[i - 1]       = jointExtractor;
                }
            }
            else
            {
                m_JointExtractors = new IJointExtractor[0];
            }

            var numTransformObservations = m_PoseExtractor.GetNumPoseObservations(settings);

            m_Shape = new[] { numTransformObservations + numJointExtractorObservations };
        }
        /// <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 numTransformObservations = Settings.TransformSize(poseExtractor.NumPoses);

            return(new[] { numTransformObservations });
        }
        /// <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 });
        }
Exemplo n.º 4
0
        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 };
        }
Exemplo n.º 5
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 });
        }