Ejemplo n.º 1
0
    public async void CreateActionObject()
    {
        string newActionObjectName = (string)nameInput.GetValue();

        if (Base.Parameter.CheckIfAllValuesValid(actionParameters))
        {
            List <IO.Swagger.Model.Parameter> parameters = new List <IO.Swagger.Model.Parameter>();
            foreach (IParameter actionParameter in actionParameters)
            {
                if (!parametersMetadata.TryGetValue(actionParameter.GetName(), out Base.ParameterMetadata actionParameterMetadata))
                {
                    Base.Notifications.Instance.ShowNotification("Failed to create new action", "Failed to get metadata for action parameter: " + actionParameter.GetName());
                    return;
                }
                IO.Swagger.Model.ActionParameter ap = new IO.Swagger.Model.ActionParameter(name: actionParameter.GetName(), value: JsonConvert.SerializeObject(actionParameter.GetValue()), type: actionParameterMetadata.Type);
                parameters.Add(DataHelper.ActionParameterToParameter(ap));
            }
            try {
                IO.Swagger.Model.Pose pose = null;
                if (actionObjectMetadata.HasPose)
                {
                    Vector3 abovePoint = SceneManager.Instance.GetCollisionFreePointAbove(SceneManager.Instance.SceneOrigin.transform, actionObjectMetadata.GetModelBB(), SceneManager.Instance.SceneOrigin.transform.localRotation);
                    IO.Swagger.Model.Position offset = DataHelper.Vector3ToPosition(TransformConvertor.UnityToROS(abovePoint));
                    pose = new IO.Swagger.Model.Pose(position: offset, orientation: new IO.Swagger.Model.Orientation(1, 0, 0, 0));
                }
                await Base.WebsocketManager.Instance.AddObjectToScene(newActionObjectName, actionObjectMetadata.Type, pose, parameters);

                Close();
            } catch (Base.RequestFailedException e) {
                Base.Notifications.Instance.ShowNotification("Failed to add action", e.Message);
            }
        }
    }
Ejemplo n.º 2
0
        public IO.Swagger.Model.Pose CreatePoseInTheView(float distance = 0.3f)
        {
            Ray     ray   = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0f));
            Vector3 point = TransformConvertor.UnityToROS(GameManager.Instance.Scene.transform.InverseTransformPoint(ray.GetPoint(distance)));

            return(new IO.Swagger.Model.Pose(position: DataHelper.Vector3ToPosition(point), orientation: DataHelper.QuaternionToOrientation(Quaternion.identity)));
        }
Ejemplo n.º 3
0
    public async void AddAP(string name)
    {
        Debug.Assert(CurrentActionPoint != null);

        Vector3 abovePoint = SceneManager.Instance.GetCollisionFreePointAbove(CurrentActionPoint.transform, Vector3.one * 0.025f, Quaternion.identity);

        IO.Swagger.Model.Position offset = DataHelper.Vector3ToPosition(TransformConvertor.UnityToROS(abovePoint));
        bool result = await GameManager.Instance.AddActionPoint(name, CurrentActionPoint.Data.Id, offset);

        if (result)
        {
            inputDialog.Close();
        }
        UpdateMenu();
    }
Ejemplo n.º 4
0
    private void Update()
    {
        if (CanvasGroup.alpha == 1)
        {
            if (gizmo != null && SceneManager.Instance.IsRobotAndEESelected())
            {
                if (world)
                {
                    gizmo.transform.rotation = GameManager.Instance.Scene.transform.rotation;
                }
                else
                {
                    gizmo.transform.rotation = SceneManager.Instance.SelectedRobot.GetTransform().rotation;// * Quaternion.Inverse(GameManager.Instance.Scene.transform.rotation);
                }

                if (translate)
                {
                    Vector3 position = TransformConvertor.UnityToROS(OrigPose.transform.InverseTransformPoint(SceneManager.Instance.SelectedEndEffector.transform.position));

                    //Coordinates.X.SetValueMeters(position.x);
                    //Coordinates.Y.SetValueMeters(position.y);
                    //Coordinates.Z.SetValueMeters(position.z);
                    gizmo.SetXDelta(position.x);
                    gizmo.SetYDelta(position.y);
                    gizmo.SetZDelta(position.z);
                }
                else
                {
                    Quaternion newrotation = TransformConvertor.UnityToROS(SceneManager.Instance.SelectedEndEffector.transform.rotation * Quaternion.Inverse(OrigPose.transform.transform.rotation));
                    //Coordinates.X.SetValueDegrees(newrotation.eulerAngles.x);
                    //Coordinates.Y.SetValueDegrees(newrotation.eulerAngles.y);
                    //Coordinates.Z.SetValueDegrees(newrotation.eulerAngles.z);

                    gizmo.SetXDeltaRotation(newrotation.eulerAngles.x);
                    gizmo.SetYDeltaRotation(newrotation.eulerAngles.y);
                    gizmo.SetZDeltaRotation(newrotation.eulerAngles.z);
                }
            }
        }
    }
Ejemplo n.º 5
0
    public async void CreateNewAP(string name)
    {
        Debug.Assert(CurrentObject != null);

        /*IO.Swagger.Model.Position offset = new IO.Swagger.Model.Position();
         * Vector3 aboveModel = CurrentObject.GetTopPoint();
         * aboveModel.y += 0.1f;
         * offset = DataHelper.Vector3ToPosition(TransformConvertor.UnityToROS(CurrentObject.transform.InverseTransformPoint(aboveModel)));
         */
        Vector3 abovePoint = SceneManager.Instance.GetCollisionFreePointAbove(CurrentObject.transform.localPosition);

        IO.Swagger.Model.Position offset = DataHelper.Vector3ToPosition(TransformConvertor.UnityToROS(CurrentObject.transform.InverseTransformPoint(abovePoint)));

        bool result = await GameManager.Instance.AddActionPoint(name, CurrentObject.Data.Id, offset);

        //Base.Scene.Instance.SpawnActionPoint(CurrentObject.GetComponent<Base.ActionObject>(), null);
        if (result)
        {
            inputDialog.Close();
        }
        UpdateMenu();
    }
Ejemplo n.º 6
0
    public async void AddOrientation(string name, string robotName)
    {
        Debug.Assert(CurrentActionPoint != null);
        IRobot robot;

        try {
            robot = SceneManager.Instance.GetRobotByName(robotName);
        } catch (ItemNotFoundException ex) {
            Notifications.Instance.ShowNotification("Failed to add orientation", "Could not found robot called: " + robotName);
            Debug.LogError(ex);
            return;
        }


        if (CurrentActionPoint.OrientationNameExist(name) || CurrentActionPoint.JointsNameExist(name))
        {
            Notifications.Instance.ShowNotification("Failed to add orientation", "There already exists orientation or joints with name " + name);
            return;
        }
        IO.Swagger.Model.Orientation orientation = new IO.Swagger.Model.Orientation();
        if (CurrentActionPoint.Parent != null)
        {
            orientation = DataHelper.QuaternionToOrientation(TransformConvertor.UnityToROS(Quaternion.Inverse(CurrentActionPoint.Parent.GetTransform().rotation)));
        }
        preselectedOrientation = name;
        bool successOrientation = await Base.GameManager.Instance.AddActionPointOrientation(CurrentActionPoint, orientation, name);

        bool successJoints = await Base.GameManager.Instance.AddActionPointJoints(CurrentActionPoint, name, robot.GetId());

        if (successOrientation && successJoints)
        {
            inputDialog.Close();
        }
        else
        {
            preselectedOrientation = null;
        }
    }
Ejemplo n.º 7
0
    public async void CreateActionObject()
    {
        string newActionObjectName = (string)nameInput.GetValue();

        if (Base.Parameter.CheckIfAllValuesValid(actionParameters))
        {
            List <IO.Swagger.Model.Parameter> parameters = new List <IO.Swagger.Model.Parameter>();
            foreach (IParameter actionParameter in actionParameters)
            {
                if (!parametersMetadata.TryGetValue(actionParameter.GetName(), out Base.ParameterMetadata actionParameterMetadata))
                {
                    Base.Notifications.Instance.ShowNotification("Failed to create new action object", "Failed to get metadata for action object parameter: " + actionParameter.GetName());
                    return;
                }
                IO.Swagger.Model.ActionParameter ap = new IO.Swagger.Model.ActionParameter(name: actionParameter.GetName(), value: JsonConvert.SerializeObject(actionParameter.GetValue()), type: actionParameterMetadata.Type);
                parameters.Add(DataHelper.ActionParameterToParameter(ap));
            }
            try {
                Ray     ray   = Camera.main.ScreenPointToRay(new Vector3(Screen.width / 2, Screen.height / 2, 0f));
                Vector3 point = TransformConvertor.UnityToROS(GameManager.Instance.Scene.transform.InverseTransformPoint(ray.GetPoint(0.5f)));
                IO.Swagger.Model.Pose pose = null;
                if (actionObjectMetadata.HasPose)
                {
                    pose = new IO.Swagger.Model.Pose(position: DataHelper.Vector3ToPosition(point), orientation: DataHelper.QuaternionToOrientation(Quaternion.identity));
                }
                SceneManager.Instance.SelectCreatedActionObject = newActionObjectName;

                await Base.WebsocketManager.Instance.AddObjectToScene(newActionObjectName, actionObjectMetadata.Type, pose, parameters);

                callback?.Invoke();
                Close();
            } catch (Base.RequestFailedException e) {
                Base.Notifications.Instance.ShowNotification("Failed to add action", e.Message);
            }
        }
    }
Ejemplo n.º 8
0
 public IO.Swagger.Model.Pose GetPose()
 {
     if (ActionObjectMetadata.HasPose)
     {
         return(new IO.Swagger.Model.Pose(position: DataHelper.Vector3ToPosition(TransformConvertor.UnityToROS(transform.localPosition)),
                                          orientation: DataHelper.QuaternionToOrientation(TransformConvertor.UnityToROS(transform.localRotation))));
     }
     else
     {
         return(new IO.Swagger.Model.Pose(new IO.Swagger.Model.Orientation(), new IO.Swagger.Model.Position()));
     }
 }
Ejemplo n.º 9
0
 public override void SetScenePosition(Vector3 position)
 {
     Data.Position = DataHelper.Vector3ToPosition(TransformConvertor.UnityToROS(position));
 }
Ejemplo n.º 10
0
 public async override void CopyObjectClick()
 {
     if (selectedObject is ActionObject actionObject)
     {
         List <IO.Swagger.Model.Parameter> parameters = new List <IO.Swagger.Model.Parameter>();
         foreach (Base.Parameter p in actionObject.ObjectParameters.Values)
         {
             parameters.Add(DataHelper.ActionParameterToParameter(p));
         }
         string newName = SceneManager.Instance.GetFreeAOName(actionObject.GetName());
         SceneManager.Instance.SelectCreatedActionObject        = newName;
         SceneManager.Instance.OpenTransformMenuOnCreatedObject = true;
         await WebsocketManager.Instance.AddObjectToScene(newName,
                                                          actionObject.ActionObjectMetadata.Type, new IO.Swagger.Model.Pose(
                                                              orientation: DataHelper.QuaternionToOrientation(TransformConvertor.UnityToROS(actionObject.transform.localRotation)),
                                                              position: DataHelper.Vector3ToPosition(TransformConvertor.UnityToROS(actionObject.transform.localPosition))), parameters);
     }
 }
Ejemplo n.º 11
0
 public override void SetSceneOrientation(Quaternion orientation)
 {
     Data.Pose.Orientation = DataHelper.QuaternionToOrientation(TransformConvertor.UnityToROS(orientation));
 }
Ejemplo n.º 12
0
 public IO.Swagger.Model.Pose GetPose()
 {
     return(new IO.Swagger.Model.Pose(position: DataHelper.Vector3ToPosition(TransformConvertor.UnityToROS(transform.position)),
                                      orientation: DataHelper.QuaternionToOrientation(TransformConvertor.UnityToROS(transform.rotation))));
 }
    public async void MoveHereModel(bool avoid_collision = true)
    {
        List <IO.Swagger.Model.Joint> modelJoints; //joints to move the model to
        string robotId;

        if (isOrientationDetail)
        {
            try {
                IO.Swagger.Model.Pose         pose        = new IO.Swagger.Model.Pose(orientation.Orientation, DataHelper.Vector3ToPosition(TransformConvertor.UnityToROS(CurrentActionPoint.transform.position)));
                List <IO.Swagger.Model.Joint> startJoints = SceneManager.Instance.SelectedRobot.GetJoints();

                modelJoints = await WebsocketManager.Instance.InverseKinematics(SceneManager.Instance.SelectedRobot.GetId(), SceneManager.Instance.SelectedEndEffector.GetName(), true, pose, startJoints);
                await PrepareRobotModel(SceneManager.Instance.SelectedRobot.GetId(), false);

                if (!avoid_collision)
                {
                    Notifications.Instance.ShowNotification("The model is in a collision with other object!", "");
                }
            } catch (ItemNotFoundException ex) {
                Notifications.Instance.ShowNotification("Unable to move here model", ex.Message);
                return;
            } catch (RequestFailedException ex) {
                if (avoid_collision) //if this is first call, try it again without avoiding collisions
                {
                    MoveHereModel(false);
                }
                else
                {
                    Notifications.Instance.ShowNotification("Unable to move here model", ex.Message);
                }
                return;
            }
        }
        else     //joints menu
        {
            modelJoints = this.joints.Joints;
            robotId     = this.joints.RobotId;
        }

        foreach (IO.Swagger.Model.Joint joint in modelJoints)
        {
            SceneManager.Instance.SelectedRobot.SetJointValue(joint.Name, (float)joint.Value);
        }
    }