Exemplo n.º 1
0
        public JointPlacement[] GetJointPlacements(MultiDOFJointStateMsg jointState)
        {
            Quaternion lastWorldRotation = m_Robot.transform.rotation;
            Vector3    lastWorldPosition = m_Robot.transform.position;
            GameObject lastJoint         = m_Robot.gameObject;

            JointPlacement[] result = new JointPlacement[jointState.joint_names.Length];

            for (int i = 0; i < jointState.joint_names.Length; ++i)
            {
                JointPlacement jointData = m_JointsByName[jointState.joint_names[i]];

                ArticulationBody body          = jointData.Joint.GetComponent <ArticulationBody>();
                Quaternion       jointRotation = body.anchorRotation * jointState.transforms[i].rotation.From <FLU>() * Quaternion.Inverse(body.anchorRotation);
                Quaternion       localRotation = jointData.Rotation * jointRotation;
                Vector3          localPosition = Vector3.Scale(lastJoint.transform.InverseTransformPoint(body.transform.position), jointState.transforms[i].translation.From <FLU>());
                Vector3          worldPosition = lastWorldPosition + lastWorldRotation * (lastJoint.transform.InverseTransformPoint(body.transform.position) + localPosition);
                Quaternion       worldRotation = lastWorldRotation * localRotation;

                result[i] = new JointPlacement {
                    Joint = jointData.Joint, Position = worldPosition, Rotation = worldRotation
                };

                lastWorldPosition = worldPosition;
                lastWorldRotation = worldRotation;
                lastJoint         = body.gameObject;
            }

            return(result);
        }
Exemplo n.º 2
0
        public JointPlacement[] GetJointPlacements(JointStateMsg jointState)
        {
            Quaternion lastWorldRotation = m_Robot.transform.rotation;
            Vector3    lastWorldPosition = m_Robot.transform.position;
            GameObject lastJoint         = m_Robot.gameObject;

            JointPlacement[] result = new JointPlacement[jointState.name.Length];

            for (int i = 0; i < jointState.name.Length; ++i)
            {
                JointPlacement jointData       = m_JointsByName[jointState.name[i]];
                float          rotationDegrees = (float)(jointState.position[i] * Mathf.Rad2Deg);

                ArticulationBody body          = jointData.Joint.GetComponent <ArticulationBody>();
                Quaternion       jointRotation = body.anchorRotation * Quaternion.Euler(rotationDegrees, 0, 0) * Quaternion.Inverse(body.anchorRotation);
                Quaternion       localRotation = jointData.Rotation * jointRotation;
                Vector3          localPosition = lastJoint.transform.InverseTransformPoint(body.transform.position);
                Vector3          worldPosition = lastWorldPosition + lastWorldRotation * localPosition;
                Quaternion       worldRotation = lastWorldRotation * localRotation;

                result[i] = new JointPlacement {
                    Joint = jointData.Joint, Position = worldPosition, Rotation = worldRotation
                };

                lastWorldPosition = worldPosition;
                lastWorldRotation = worldRotation;
                lastJoint         = body.gameObject;
            }

            return(result);
        }
Exemplo n.º 3
0
        public JointPlacement[] GetJointPlacements(JointTrajectoryPointMsg point, string[] jointNames)
        {
            Quaternion lastWorldRotation = m_Robot.transform.rotation;
            Vector3    lastWorldPosition = m_Robot.transform.position;
            GameObject lastJoint         = m_Robot.gameObject;

            JointPlacement[] result = new JointPlacement[jointNames.Length];

            for (int Idx = 0; Idx < point.positions.Length; ++Idx)
            {
                JointPlacement jointData       = m_JointsByName[jointNames[Idx]];
                float          rotationDegrees = (float)(point.positions[Idx] * Mathf.Rad2Deg);

                ArticulationBody body          = jointData.Joint.GetComponent <ArticulationBody>();
                Quaternion       jointRotation = body.anchorRotation * Quaternion.Euler(rotationDegrees, 0, 0) * Quaternion.Inverse(body.anchorRotation);
                Quaternion       localRotation = jointData.Rotation * jointRotation;
                Vector3          localPosition = lastJoint.transform.InverseTransformPoint(body.transform.position);
                Vector3          worldPosition = lastWorldPosition + lastWorldRotation * localPosition;
                Quaternion       worldRotation = lastWorldRotation * localRotation;

                result[Idx] = new JointPlacement {
                    Joint = jointData.Joint, Position = worldPosition, Rotation = worldRotation
                };

                lastWorldPosition = worldPosition;
                lastWorldRotation = worldRotation;
                lastJoint         = body.gameObject;
            }

            return(result);
        }
Exemplo n.º 4
0
 // Returns a 2d array: JointPlacement[index of JointTrajectoryPoint][index of joint]
 public JointPlacement[][] GetJointPlacements(JointTrajectoryMsg trajectory)
 {
     JointPlacement[][] result = new JointPlacement[trajectory.points.Length][];
     for (int Idx = 0; Idx < trajectory.points.Length; ++Idx)
     {
         result[Idx] = GetJointPlacements(trajectory.points[Idx], trajectory.joint_names);
     }
     return(result);
 }