private void Start() { if (this.SourceAvatar == null) { this.SourceAvatar = this.GetComponent <MMIAvatar>(); } }
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); } } }
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; }
/// <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; }
/// <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(); }
/// <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(); }
// Start is called before the first frame update void Start() { this.avatar = this.GetComponent <MMIAvatar>(); }
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) { }
// 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(); }
// 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); } } }
void Start() { this.mmiAvatar = this.GetComponent<MMIAvatar>(); Load(); }