Exemplo n.º 1
0
    internal RobotCellKinematics(RobotCell cell, IEnumerable <Target> targets, IEnumerable <double[]>?prevJoints)
    {
        Solutions = new List <KinematicSolution>(new KinematicSolution[cell.MechanicalGroups.Count]);
        var targetsList    = targets.TryCastIList();
        var prevJointsList = prevJoints?.TryCastIList();

        var groupsCount = cell.MechanicalGroups.Count;

        if (targetsList.Count != groupsCount)
        {
            throw new ArgumentException(" Incorrect number of targets.", nameof(targets));
        }

        if (prevJointsList is not null && prevJointsList.Count != groupsCount)
        {
            throw new ArgumentException(" Incorrect number of previous joint values.", nameof(prevJoints));
        }

        var groups = cell.MechanicalGroups.ToList();

        foreach (var target in targetsList)
        {
            var index = target.Frame.CoupledMechanicalGroup;
            if (index == -1)
            {
                continue;
            }
            var group = cell.MechanicalGroups[index];
            groups.RemoveAt(index);
            groups.Insert(0, group);
        }

        foreach (var group in groups)
        {
            int   i            = group.Index;
            var   target       = targetsList[i];
            var   prevJoint    = prevJointsList?[i];
            Plane?coupledPlane = null;

            int coupledGroup = target.Frame.CoupledMechanicalGroup;

            if (coupledGroup != -1 && target.Frame.CoupledMechanism == -1)
            {
                if (coupledGroup == i)
                {
                    throw new ArgumentException(" Cannot couple a robot with itself.", nameof(coupledGroup));
                }

                coupledPlane = Solutions[coupledGroup].Planes[Solutions[coupledGroup].Planes.Length - 2] as Plane?;
            }
            else
            {
                coupledPlane = null;
            }

            var kinematics = group.Kinematics(target, prevJoint, coupledPlane, cell.BasePlane);
            Solutions[i] = kinematics;
        }
    }
Exemplo n.º 2
0
        private void SendJoints(Program program)
        {
            var joints = GetJointsFromProgram(program);

            RobotCell cell  = program.RobotSystem as RobotCell;
            var       robot = cell.MechanicalGroups[0].Robot;
            var       bytes = new List <byte>(6 * 4);

            for (int i = 0; i < 6; i++)
            {
                var joint  = joints[i];
                var degree = robot.RadianToDegree(joint, i);
                bytes.AddRange(BitConverter.GetBytes((float)degree));
            }

            _client.GetStream().Write(bytes.ToArray(), 0, bytes.Count);
        }