Discussion

Left ArrowBack to discussions page
ThomasSThomasS Posts: 3 Apprentice

Hey,

I am working with a UR10 and i am using the URscript to program the robot.

One task of the robot is to tighten and loosen some screws. For this I command the waypoints of the screws to catch them and after I command a rotation around the tcp z-axis. I am using the following simple command:

movel(pose_trans(get_forward_kin(),p[0,0,0,0,0,rot_qnt]),a,v)

So far everything is working and the robot is performing the correct rotation. Now I got the problem, that I have to be sure with which velocity the rotation is performed.

The description of the movel command says, that the unit of the given velocity is m/s. Since the calculated movement is just a rotation around a point, I don't know how to transform m/s in rad/s. Does someone know how the calculation is done?

As another solution I already tried to use the movej command. But then I got the problem that I am commanding the velocity of the fastest joint. And further a rotation of 180° around the tcp z-axis may not just lead to a movement of wrist 3. The most times the robot is calculating a movement of the five other wrists. For a rotation around the z-axis I am able to solve it:

joints = get_actual_joint_position()

joints[5] = joints[5] + rot_qnt

movej(joints,a,v)

But for a rotation around the tcp x- or y-axis - which I also need - this solution is not working. And I am also not sure, if the calculated movements are keeping the tcp at the same x, y and z coordinates.

I hope someone can help me. If there is another or even better solution for this task, I would be grateful to learn from you.


Thanks a lot and greetings,

Thomas

Comments

  • matthewd92matthewd92 Posts: 967Founding Pro, Tactile Sensor Beta Testers Handy
    Why not use the same pose_trans with the movej command?  We do movej all the time around the tcp and motion performs just as we expect. 
  • ThomasSThomasS Posts: 3 Apprentice

    Thanks for your answer!

    The problem is that I also have to perform more than 180° and I already get a problem with more than 160°.

    The calculation behind the movej command somehow calculates a rotation of the base, shoulder, elbow, wrist 1 and 2 instead of just wrist 3.

  • matthewd92matthewd92 Posts: 967Founding Pro, Tactile Sensor Beta Testers Handy
    Give it a qnear point that is close to the final solution you want. Or else it will pick the most joint efficient solution to get there. 
  • matthewd92matthewd92 Posts: 967Founding Pro, Tactile Sensor Beta Testers Handy
    What is your TCP offset?  Does it have some component of x or y in it, or some rotation around x or y?
  • ThomasSThomasS Posts: 3 Apprentice

    To answer the last question: no, it just has a z offset.

    And the first idea I already tried in the following way:

    joint_pos=get_actual_joint_positions()

    movej(get_inverse_kin(pose_trans(get_forward_kin(),p[0,0,0,0,0,rot_qnt]),joint_pos),a,v)

    In my mind the robot should realise that 5 of 6 joints are already at the perfect position.

    As I want to use this function for many screws that are oriented in completely different ways and which have to be rotated by different values of degree, I am not able to define a unique qnear that always fits.


    That is why I thought about using the movel where I can be sure that just wrist 3 will be moved. But there I have the problem with the velocity. I mean somehow the robot is interpretating a m/s as rad/s. So I am wondering if it is possible to find out the equation for this transformation of units.

Sign In or Register to comment.
Left ArrowBack to discussions page