コード例 #1
0
        void InsertEntityNotificationHandler(simengine.InsertSimulationEntity ins)
        {
            _entity = (simengine.VisualEntity)ins.Body;
            _entity.ServiceContract = Contract.Identifier;

            CreateDefaultState();
        }
コード例 #2
0
 void MoveBipedPose(Vector3 offset, simengine.VisualEntity entity)
 {
     entity.PhysicsEntity.SetPose(new Pose(offset + entity.State.Pose.Position, entity.State.Pose.Orientation));
     foreach (simengine.VisualEntity child in entity.Children)
     {
         MoveBipedPose(offset, child);
     }
 }
コード例 #3
0
 public JointDesc(string name, simengine.VisualEntity jointEntity, PhysicsJoint joint)
 {
     Name        = name;
     JointEntity = jointEntity;
     Swing1Angle = 0;
     Swing2Angle = 0;
     TwistAngle  = 0;
     X           = Y = Z = 0;
     Joint       = joint;
 }
コード例 #4
0
 void DeleteEntityInternal()
 {
     _entity = null;
     // add a slider for each joint to the UI
     WinFormsServicePort.FormInvoke(
         delegate()
     {
         _simulatedBipedMoverUI.ClearNames();
         _simulatedBipedMoverUI.ClearSliders();
         Activate(Arbiter.Receive(false, TimeoutPort(5000), dateTime => SpawnIterator(RefreshListIterator)));
     }
         );
 }
コード例 #5
0
 void SuspendBipedInternal(simengine.VisualEntity entity, bool suspend)
 {
     if (suspend)
     {
         entity.PhysicsEntity.IsKinematic = true;
         entity.State.Flags |= Microsoft.Robotics.Simulation.Physics.EntitySimulationModifiers.Kinematic;
         MoveBipedPose(new Vector3(0, 0.3f, 0), entity);
     }
     else
     {
         entity.State.Flags &= ~Microsoft.Robotics.Simulation.Physics.EntitySimulationModifiers.Kinematic;
         MoveBipedPose(new Vector3(0, -0.28f, 0), entity);
         Activate(Arbiter.Receive(false, TimeoutPort(200), SetDynamic));
     }
 }
コード例 #6
0
        void AddJoint(Joint joint, simengine.VisualEntity entity)
        {
            if (!(joint is PhysicsJoint))
            {
                return;
            }

            if (!_state.Joints.ContainsKey(joint.State.Name))
            {
                JointDesc description = new JointDesc(joint.State.Name, entity, joint as PhysicsJoint);
                string[]  DOFNames    = joint.State.Name.Split(';');
                int       which       = 0;
                if (joint.State.Angular != null)
                {
                    if (joint.State.Angular.TwistMode != JointDOFMode.Locked && IsNotUselessDrive(joint.State.Angular.TwistDrive))
                    {
                        AddDOF(DOFNames, which++, description, DOFType.Twist);
                    }
                    if (joint.State.Angular.Swing1Mode != JointDOFMode.Locked && IsNotUselessDrive(joint.State.Angular.SwingDrive))
                    {
                        AddDOF(DOFNames, which++, description, DOFType.Swing1);
                    }
                    if (joint.State.Angular.Swing2Mode != JointDOFMode.Locked && IsNotUselessDrive(joint.State.Angular.SlerpDrive))
                    {
                        AddDOF(DOFNames, which++, description, DOFType.Swing2);
                    }
                }
                if (joint.State.Linear != null)
                {
                    if (joint.State.Linear.XMotionMode != JointDOFMode.Locked && IsNotUselessDrive(joint.State.Linear.XDrive))
                    {
                        AddDOF(DOFNames, which++, description, DOFType.X);
                    }
                    if (joint.State.Linear.YMotionMode != JointDOFMode.Locked && IsNotUselessDrive(joint.State.Linear.YDrive))
                    {
                        AddDOF(DOFNames, which++, description, DOFType.Y);
                    }
                    if (joint.State.Linear.ZMotionMode != JointDOFMode.Locked && IsNotUselessDrive(joint.State.Linear.ZDrive))
                    {
                        AddDOF(DOFNames, which++, description, DOFType.Z);
                    }
                }
            }
        }
コード例 #7
0
        void InsertEntityNotificationHandler(simengine.InsertSimulationEntity ins)
        {
            _entity = (simengine.VisualEntity)ins.Body;
            _entity.ServiceContract = Contract.Identifier;

            // traverse the entities associated with this entity and build a list of joints
            _state.Joints.Clear();
            Dictionary <string, simengine.VisualEntity> entities = new Dictionary <string, simengine.VisualEntity>();

            FindJointsAndEntities(_entity, entities);

            // add a slider for each joint to the UI
            WinFormsServicePort.FormInvoke(
                delegate()
            {
                _simulatedBipedMoverUI.AddEntityName(_entity.State.Name, _state.Joints == null || _state.Joints.Count == 0);
                _simulatedBipedMoverUI.AddSliders(_state.Joints);
            }
                );
        }
コード例 #8
0
        IEnumerator <ITask> OnInsertEntity(sime.InsertSimulationEntity insert)
        {
            _entity = insert.Body;

            var query = new sime.VisualEntity();

            query.State.Name = _state.CameraName;

            yield return(Arbiter.Choice(
                             _simPort.Query(query),
                             success => _camera = success.Entity as Entities.PursuitCamera.PursuitCameraEntity,
                             failure => LogError("Unable to find camera", failure)
                             ));

            if (_camera == null)
            {
                _entity = null;
                yield break;
            }

            SetCameraProperties();
            _camera.Target = _entity;
        }
コード例 #9
0
 void DeleteEntityNotificationHandler(simengine.DeleteSimulationEntity del)
 {
     _entity = null;
 }
コード例 #10
0
        void InsertEntityNotificationHandler(simengine.InsertSimulationEntity ins)
        {
            _entity = (PioneerGPSEntity)ins.Body;
            _entity.ServiceContract = Contract.Identifier;

            CreateDefaultState();
        }
コード例 #11
0
 void OnDeleteEntity(sime.DeleteSimulationEntity delete)
 {
     _entity = null;
     _camera = null;
 }
コード例 #12
0
        private void FindJointsAndEntities(simengine.VisualEntity thisEntity, Dictionary <string, simengine.VisualEntity> visited)
        {
            if (thisEntity == null)
            {
                return;
            }

            if (visited.ContainsKey(thisEntity.State.Name))
            {
                return;
            }
            else
            {
                visited.Add(thisEntity.State.Name, thisEntity);
            }

            // process the children first
            if (thisEntity is simengine.VisualEntity)
            {
                foreach (simengine.VisualEntity Child in ((simengine.VisualEntity)thisEntity).Children)
                {
                    FindJointsAndEntities(Child, visited);
                }
            }


            if (thisEntity.ParentJoint != null)
            {
                AddJoint(thisEntity.ParentJoint, thisEntity);
            }

            // search this entity for other entities or joints
            Type thisEntityType = thisEntity.GetType();

            System.Reflection.FieldInfo[] fields = thisEntityType.GetFields(
                System.Reflection.BindingFlags.Instance |
                System.Reflection.BindingFlags.Public |
                System.Reflection.BindingFlags.NonPublic);
            foreach (FieldInfo field in fields)
            {
                // search for joints
                if ((field.FieldType == typeof(Joint)) || (field.FieldType.IsSubclassOf(typeof(Joint))))
                {
                    Joint thisJoint = (Joint)field.GetValue(thisEntity);
                    if (thisJoint != null)
                    {
                        AddJoint(thisJoint, thisEntity);
                    }
                }
                else if (field.FieldType == typeof(List <Joint>))
                {
                    List <Joint> jointList = (List <Joint>)field.GetValue(thisEntity);
                    if (jointList != null)
                    {
                        foreach (Joint thisJoint in jointList)
                        {
                            AddJoint(thisJoint, thisEntity);
                        }
                    }
                }
                else if (field.FieldType == typeof(Joint[]))
                {
                    Joint[] jointArray = (Joint[])field.GetValue(thisEntity);
                    if (jointArray != null)
                    {
                        foreach (Joint thisJoint in jointArray)
                        {
                            AddJoint(thisJoint, thisEntity);
                        }
                    }
                }

                // search for entities
                if ((field.FieldType == typeof(simtypes.Entity)) || (field.FieldType.IsSubclassOf(typeof(simtypes.Entity))))
                {
                    FindJointsAndEntities((simengine.VisualEntity)field.GetValue(thisEntity), visited);
                }
                else if (field.FieldType.IsGenericType)
                {
                    Type[] parms = field.FieldType.GetGenericArguments();
                    if (parms.Length == 1)
                    {
                        if ((parms[0] == typeof(simtypes.Entity)) || (parms[0].IsSubclassOf(typeof(simtypes.Entity))))
                        {
                            foreach (simengine.VisualEntity someEntity in (System.Collections.ICollection)field.GetValue(thisEntity))
                            {
                                FindJointsAndEntities(someEntity, visited);
                            }
                        }
                    }
                }
            }
        }
コード例 #13
0
 void DeleteEntityNotificationHandler(simengine.DeleteSimulationEntity del)
 {
     _entity = null;
 }