RobotStudio event

Updating robtarget and OrientZYX

Hi I am updating robtarget data over a few targets in a while loop.

I can see from the RAPID watch that my position data gets updated but all the other data parts of robtarget (orient, config, external axis) all reset to zero.

Secondly the program does not run as I get an Orientation definition error. I assume that means the orientation data is wrong (as it was reset to zero for an unknown reason)

I have found the OrientZYX function which I think will calculate the orient data for my updated robtarget but I do not know how to fully use it. It takes angleZ, angleY, angleX but how do I find /generate these angles? Are they the angles between the origin and the new robtargets position? The manual seems slightly unclear.

many thanks

Comments

  • Marcel
    Marcel ✭✭

    Hi<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

    The opposite function of OrientZYX is EulerZYX. So you can get the euler angles of a position with the EulerZYX function. You have to do it separate for Z, Y, X. You can then use that 3 angles in OrientZYX. But that only gives you again the orientation and will not give you the configuration of the position.

    If you switch off the configuration with ConfL\Off or ConfJ\Off you don’t have to care about the confiuration. But then it could happen that the robot tries to go to the position in a unexpected way. With MoveL you could also try to use the SingArea\Wrist instruction, maybe combined with ConfL\Off. With such experiments it is helpful to limit the axis 3 not that the robot goes backwards to the position. If you set the configuration to [0,0,0,0] it could also help because the robot only looks at the configuration if it is not 0.

    If you work with a zone you should give the robots position controller one second to calculate the position that the robot has to go next.

    Best regards

    Marcel

  • I don't think I am using OrientZYX correctly, I have a pos data X Y Z of a robtarget relative to the origin (0,0,0) I am using trigonometry to get the rotation about each axis to get from (0,0,0) to X Y Z and then putting these angles into OrientZYX.


    Is this correct or do I need to use something else for the angles??


    many thanks

  • If I remember correctly, OrientZYX uses intrinsic Tait-Bryan angles (often called Euler angles). Have a look at http://en.wikipedia.org/wiki/Euler_angles for more info on the different types of Euler/Tait-Bryan angles. Key point of OrientZYX is that the rotations happen on top of each other, meaning that the rotation around for instance the y-axis happens AFTER the rotation around the z-axis and is according to the (new) rotated coordinate system. The wikipedia page shows this image: http://en.wikipedia.org/wiki/File:Euler2a.gif which shows the idea, although in this image another angle sequence is used (Z-X-Z).
  • I remember I also had some trouble with OrientZYX and EulerZYX before. Unfortunately I don't remember the theory I used to solve that. But I remember I used an empirical way to test it:
    1) Define a home position and certify that the quaternions describing the orientation are reset.
    2) From that home position, use the teach pendant to orient the tcp to a known rotation (barely).
    3) Read the pose data and use EulerZYX to get the current Euler angles.
    4) Compare the results with those you intended.
    5) Repeat that to different axis and also multi axis rotations until you comprehend how things work.
    6) I have here in my mind that these orientations are also related to working object and tcp definitions, so, it would be nice to also check that.

    I hope this doesn't get you more confused.
    Best regards,
    Leo