private void Start()
 {
     if (this.SourceAvatar == null)
     {
         this.SourceAvatar = this.GetComponent <MMIAvatar>();
     }
 }
Beispiel #2
0
    public InstructionDefinitionWindow(MMIAvatar avatar, ref MInstruction rootInstruction, MInstruction availableInstruction = null)
    {
        this.avatar          = avatar;
        this.mmuDescriptions = this.avatar.MMUAccess.GetLoadableMMUs();


        this.motionTypeOptions = mmuDescriptions.Select(s => s.MotionType).ToArray();
        this.instructionList   = rootInstruction.Instructions;

        if (availableInstruction == null)
        {
            this.instruction            = new MInstruction();
            this.instruction.ID         = MInstructionFactory.GenerateID();
            this.instruction.Properties = new Dictionary <string, string>();
        }
        else
        {
            this.instruction = availableInstruction;

            //Preselect the motion type
            if (this.motionTypeOptions.Contains(this.instruction.MotionType))
            {
                this.motionTypeIndex = this.motionTypeOptions.ToList().IndexOf(this.instruction.MotionType);
            }
        }
    }
Beispiel #3
0
    void LateUpdate()
    {
        if (Execute && !lastState && GazeTarget != null)
        {
            MInstruction instruction = new MInstruction(System.Guid.NewGuid().ToString(), "gaze", "Pose/Gaze")
            {
                Properties = new Dictionary <string, string>()
                {
                    { "TargetID", this.GazeTarget.MSceneObject.ID }
                }
            };

            this.lastInstructionID = instruction.ID;

            MMIAvatar avatar = this.GetComponent <MMIAvatar>();

            //Add the motion type to the cosim
            avatar.CoSimulator.SetPriority("Pose/Gaze", 10);

            avatar.CoSimulator.AssignInstruction(instruction, new MSimulationState(avatar.GetPosture(), avatar.GetPosture()));
        }

        if (!Execute && lastState)
        {
            this.avatar.CoSimulator.Abort(lastInstructionID);
        }

        lastState = Execute;
    }
Beispiel #4
0
        /// <summary>
        /// Basic constructor
        /// </summary>
        /// <param name="mmus"></param>
        /// <param name="avatar"></param>
        public RemoteCoSimulation(IMotionModelUnitAccess coSimulationMMU, IServiceAccess serviceAccess, MMIAvatar avatar, Dictionary <string, string> priorities) : base(new List <IMotionModelUnitAccess>() { coSimulationMMU })
        {
            this.avatar        = avatar;
            this.serviceAccess = serviceAccess;

            this.remoteCoSimulationMMU = coSimulationMMU;
        }
Beispiel #5
0
    /// <summary>
    /// Basic constructor
    /// </summary>
    /// <param name="avatar"></param>
    public BehaviorDefinitionWindow(MMIAvatar avatar)
    {
        this.avatar          = avatar;
        this.rootInstruction = new MInstruction()
        {
            Instructions = new List <MInstruction>(),
            ID           = MInstructionFactory.GenerateID(),
            MotionType   = "Composite"
        };

        this.instructionsArray = this.rootInstruction.Instructions.Select(s => s.Name + " , " + s.MotionType + " , " + s.ID).ToArray();
    }
Beispiel #6
0
    /// <summary>
    /// Basic constructpr
    /// </summary>
    /// <param name="avatar"></param>
    public NodeBasedEditor(MMIAvatar avatar)
    {
        this.avatar = avatar;

        if (this.avatar.MMUAccess == null || !this.avatar.MMUAccess.IsInitialized)
        {
            return;
        }


        ///Use the priorities of the co-simulator
        Dictionary <string, float> priorities = this.avatar.CoSimulator.GetPriorities();


        this.sortedPriorities = priorities.ToList().OrderBy(s => s.Value).ToList();

        Dictionary <float, int> indexMap = new Dictionary <float, int>();


        for (int i = 0; i < sortedPriorities.Count; i++)
        {
            var item = sortedPriorities[i];

            if (!indexMap.ContainsKey(item.Value))
            {
                indexMap.Add(item.Value, 0);
            }


            string motionType = sortedPriorities[i].Key;

            int xPos = (int)(10 + 200 * sortedPriorities[i].Value);

            int yPos = (int)(100 + 50 * indexMap[item.Value]);



            Node node = new Node(new Vector2(xPos, yPos), 150, 50, nodeStyle, selectedNodeStyle, inPointStyle, outPointStyle, OnClickInPoint, OnClickOutPoint, OnClickRemoveNode)
            {
                title = motionType,
                Depth = (int)item.Value
            };

            indexMap[item.Value]++;


            this.nodes.Add(node);
        }

        AddConnections();
    }
Beispiel #7
0
 // Start is called before the first frame update
 void Start()
 {
     this.avatar = this.GetComponent <MMIAvatar>();
 }
Beispiel #8
0
    private void OnGUI()
    {
        if (GUI.Button(new Rect(300, 200, 200, 100), "Grasp object (trajectory)"))
        {
            MPathConstraint pathConstraint = new MPathConstraint()
            {
                PolygonPoints = new List <MGeometryConstraint>()
            };

            foreach (Transform transform in this.TrajectoryPoints)
            {
                MVector3 position      = transform.position.ToMVector3();
                MVector3 rotationEuler = transform.rotation.eulerAngles.ToMVector3();


                pathConstraint.PolygonPoints.Add(new MGeometryConstraint("")
                {
                    TranslationConstraint = new MTranslationConstraint()
                    {
                        Type   = MTranslationConstraintType.BOX,
                        Limits = position.ToMInterval3(this.TranslationTolerance)
                    },
                    RotationConstraint = new MRotationConstraint()
                    {
                        Limits = rotationEuler.ToMInterval3(this.RotationTolerance)
                    }
                });
            }

            MConstraint moveConstraint = new MConstraint(System.Guid.NewGuid().ToString())
            {
                PathConstraint = pathConstraint
            };

            MInstruction idleInstruction = new MInstruction(MInstructionFactory.GenerateID(), "Idle", "idle");

            MInstruction reachRight = new MInstruction(MInstructionFactory.GenerateID(), "reach right", "Pose/Reach")
            {
                Properties = PropertiesCreator.Create("TargetID", UnitySceneAccess.Instance["GraspTargetR"].ID, "Hand", "Right", "MinDistance", 2.0.ToString()),
            };

            MInstruction moveRight = new MInstruction(MInstructionFactory.GenerateID(), "move right", "Object/Move")
            {
                Properties = new Dictionary <string, string>()
                {
                    { "SubjectID", this.GetComponent <MMISceneObject>().MSceneObject.ID },
                    { "Hand", "Right" },
                    { "MinDistance", 2.0.ToString() },
                    { "trajectory", moveConstraint.ID }
                },
                StartCondition = reachRight.ID + ":" + mmiConstants.MSimulationEvent_End,
                Constraints    = new List <MConstraint>()
                {
                    moveConstraint
                }
            };

            MMIAvatar avatar = GameObject.FindObjectOfType <MMIAvatar>();

            //this.CoSimulator.Abort();
            avatar.CoSimulator.AssignInstruction(idleInstruction, new MSimulationState()
            {
                Initial = avatar.GetPosture(), Current = avatar.GetPosture()
            });
            avatar.CoSimulator.AssignInstruction(reachRight, new MSimulationState()
            {
                Initial = avatar.GetPosture(), Current = avatar.GetPosture()
            });
            avatar.CoSimulator.AssignInstruction(moveRight, new MSimulationState()
            {
                Initial = avatar.GetPosture(), Current = avatar.GetPosture()
            });
        }
    }
 /// <summary>
 /// Method which is called for each frame and avatar.
 /// In here further processing can be done (e.g. setting variables of the MMIAvatar).
 /// </summary>
 /// <param name="result"></param>
 /// <param name="avatar"></param>
 protected virtual void OnResultComputed(MSimulationResult result, MMIAvatar avatar)
 {
 }
Beispiel #10
0
 // Use this for initialization
 protected virtual void Start()
 {
     this.avatar = this.GetComponent <MMIAvatar>();
 }
        /// <summary>
        /// Basic constructor
        /// </summary>
        /// <param name="mmus"></param>
        /// <param name="avatar"></param>
        public LocalCoSimulation(List <IMotionModelUnitAccess> mmus, IServiceAccess serviceAccess, MMIAvatar avatar) : base(mmus)
        {
            this.avatar             = avatar;
            this.serviceAccess      = serviceAccess;
            this.HierachicalSolving = false;

            this.priorities = new Dictionary <string, float>()
            {
                { "Default", -1 },


                //Level 0
                { "Pose", 0 },
                { "Pose/Idle", 0 },
                { "idle", 0 },

                //Level 1
                { "Locomotion", 1 },
                { "Locomotion/Walk", 1 },
                { "Locomotion/Run", 1 },
                { "Locomotion/Jog", 1 },
                { "Locomotion/Crouch", 1 },
                { "Locomotion/Turn", 1 },
                { "walk", 1 },

                //Level 2
                { "Pose/Reach", 2 },
                { "positionObject", 2 },
                { "releaseObject", 2 },

                { "Object/Release", 2 },
                { "Object/Carry", 2 },
                { "Object/Move", 2 },
                { "Object/Turn", 2 },

                { "release", 2 },
                { "carry", 2 },
                { "move", 3 },
                { "putDown", 2 },
                { "pickupMTM-SD", 2 },
                { "turn", 2 },
                { "UseTool", 2 },


                //Level 3
                { "Pose/MoveFingers", 3 },
                { "moveFingers", 3 },
                { "grasp", 3 },

                //Level 4
                { "Pose/Gaze", 4 },
                { "Pose/EyeTravel", 4 },
            };

            //Create and add the solvers
            this.Solvers = new List <ICoSimulationSolver>
            {
                new IKSolver(this.serviceAccess, avatar.GetSkeletonAccess(), avatar.MAvatar.ID)
            };

            this.SortMMUPriority();
        }
Beispiel #12
0
    // Update is called once per frame
    void LateUpdate()
    {
        if (EnableIK)
        {
            MMIAvatar avatar = this.GetComponent <MMIAvatar>();

            if (NewInterface)
            {
                List <MConstraint> constraints = new List <MConstraint>();


                if (LeftHandTarget != null)
                {
                    MJointConstraint leftHandConstraint = new MJointConstraint(MJointType.LeftWrist)
                    {
                        GeometryConstraint = new MGeometryConstraint()
                        {
                            ParentObjectID     = "",
                            ParentToConstraint = this.LeftHandTarget.MSceneObject.Transform
                        }
                    };

                    constraints.Add(new MConstraint(System.Guid.NewGuid().ToString())
                    {
                        JointConstraint = leftHandConstraint
                    });
                }

                if (RightHandTarget != null)
                {
                    MJointConstraint rightHandConstraint = new MJointConstraint(MJointType.RightWrist)
                    {
                        GeometryConstraint = new MGeometryConstraint()
                        {
                            ParentObjectID     = "",
                            ParentToConstraint = this.RightHandTarget.MSceneObject.Transform
                        }
                    };

                    constraints.Add(new MConstraint(System.Guid.NewGuid().ToString())
                    {
                        JointConstraint = rightHandConstraint
                    });
                }

                MIKServiceResult result = avatar.MMUAccess.ServiceAccess.IKService.CalculateIKPosture(avatar.GetRetargetedPosture(), constraints, new Dictionary <string, string>());
                avatar.AssignPostureValues(result.Posture);
            }
            else
            {
                List <MIKProperty> ikProperties = new List <MIKProperty>();

                if (LeftHandTarget != null)
                {
                    ikProperties.Add(new MIKProperty()
                    {
                        OperationType = MIKOperationType.SetPosition,
                        Target        = MEndeffectorType.LeftHand,
                        Values        = new List <double>()
                        {
                            LeftHandTarget.transform.position.x, LeftHandTarget.transform.position.y, LeftHandTarget.transform.position.z
                        },
                        Weight = 1
                    });

                    ikProperties.Add(new MIKProperty()
                    {
                        OperationType = MIKOperationType.SetRotation,
                        Target        = MEndeffectorType.LeftHand,
                        Values        = new List <double>()
                        {
                            LeftHandTarget.transform.rotation.x, LeftHandTarget.transform.rotation.y, LeftHandTarget.transform.rotation.z, LeftHandTarget.transform.rotation.w
                        },
                        Weight = 1
                    });
                }
                if (RightHandTarget != null)
                {
                    ikProperties.Add(new MIKProperty()
                    {
                        OperationType = MIKOperationType.SetPosition,
                        Target        = MEndeffectorType.RightHand,
                        Values        = new List <double>()
                        {
                            RightHandTarget.transform.position.x, RightHandTarget.transform.position.y, RightHandTarget.transform.position.z
                        },
                        Weight = 1
                    });

                    ikProperties.Add(new MIKProperty()
                    {
                        OperationType = MIKOperationType.SetRotation,
                        Target        = MEndeffectorType.RightHand,
                        Values        = new List <double>()
                        {
                            RightHandTarget.transform.rotation.x, RightHandTarget.transform.rotation.y, RightHandTarget.transform.rotation.z, RightHandTarget.transform.rotation.w
                        },
                        Weight = 1
                    });
                }

                MAvatarPostureValues posture = avatar.MMUAccess.ServiceAccess.IKService.ComputeIK(avatar.GetRetargetedPosture(), ikProperties);

                avatar.AssignPostureValues(posture);
            }
        }
    }
Beispiel #13
0
 void Start()
 {
     this.mmiAvatar = this.GetComponent<MMIAvatar>();
     Load();
 }