RobotStudio event

How to solve the problem of reading robot data and new time? For example, get the 6-axis Angle value

How to solve the problem of reading robot data and new time?
For example, get the 6-axis Angle value synchronously.
Timer control card

Comments

  • Hi XiaoEr

    You want to log the axis values at a given pace.
    I propose creating an RobotStudio add-in.

    Here is a dirty function I've created to read the values on joint value change, I hope at least it's a start for you

    Good luck!
    /Oskar
     public static void ReadJoints()
            {
                if (recording) return;
                mech = Station.ActiveStation.ActiveTask.Mechanism;
                td.delta_t *= Simulator.SimulationSpeed;
                mech.GetJointLimits(out td.jointLowerLimits, out td.jointUpperLimits);
                td.axisTranslations = new double[mech.Children.Count()][];
                foreach (var child2 in mech.Children)  
                {
                    var child = child2 as IMechanismLink;
                    Matrix4 ct = child.CorrectionTransform;
                    if (child2.Name.StartsWith("Link") && child2.Name.Length == 5){
                        //TODO: less crappy link identification
                        int linkId = child2.Name.ElementAt(4) - 49;
                        td.axisTranslations[linkId] = ct.Translation.ToArray();
                    }
                }
    
                double[] jValues = mech.GetJointValues();
                String jValues_text = String.Join(" | ", jValues.Select(j => Math.Round(j,2).ToString()));
                Logger.AddMessage("rs-addin: " +jValues_text);
                mech.JointValuesChanged += JointValuesHandler;
                recording = true;
            }
    
    private static void JointValuesHandler(object sender, EventArgs e)
            {
                double[] jValues = mech.GetJointValues();
                if(DateTime.Now.Subtract(LastTimeStamp) > TimeSpan.FromSeconds(td.delta_t))
                {
                    jointList.Push(jValues);
                    LastTimeStamp = DateTime.Now;
                }
            }