Transformation of all frames after physical rotation of the robot

  • Hello Everyone!

    I´m working on a project that requires an update for all the existing frames due to a physical rotation and translation of the robot. Originally, the robot was placed rotated -90° about the Y axis. Now it is placed on a different surface, with no rotation about Y and a translation of about 600mm in Z- (towards ground). All the existing frames were taught using the original robot and I´d like to reuse the frames using the new robot placement.

    My question is: is there a tool or a method to transform all the frames considering the new Robot placement? My guess is that I need the kinematics of the robot, but I don´t think this is an easy task.

    Best regards,


  • I can't speak to the iiWA specifically, but there should be a system function that can perform 6-DOF transforms on any Frame-type variable. In a regular KUKAbot, the syntax would be:

    BASE_DATA[1] = BASE_DATA[1] : {X 0,Y 0,Z 600,A 0,B 90,C 0}

    The ':' is the Geometric Operator, which basically performs a Matrix Cross-Multiplication of the two frames. The iiWA's programming language should include a similar function.

    The alternative would be to do it offline -- convert each frame into a matrix, perform the cross-multiplication, then convert the resulting matrix back to a frame. But doing it programatically in the robot would be the most reliable method.

  • In addition to SkyeFire's answer,

    For iiwa, very frames can act like BASE due to its hierarchy structure.

    You can simply make a frame right below World, set your transformation in it.

    And move all pre-taught frames under the new frame by MANUALLY in xml file.

    - If we do it on Application Data view, the values of frames will be automatically transformed to keep their transformation from the root;World.

    Or you can make use of 'transformation()' method for all of your frames in an application.

    - But you can't change written Frame values of xml, You can only read them and manipulate in an application and use them. All your frames will still remain same.

    But you will have to use this transformed Frame every time instead of using ObjectFrame.

    If your frames are not many in its number, you can make new Frame variables of them once in initialize() and use them afterward instead.

            lbr.move( lin( FrameTransformer( getApplicationData().getFrame( "P1" ) ) ) );
        public Frame FrameTransformer(ObjectFrame frame) {
            Frame ret = frame.copyWithRedundancy().transform( Transformation.ofDeg( x, y, z, alpha, beta, gamma );
            return ret;

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account
Sign up for a new account in our community. It's easy!
Register a new account
Sign in
Already have an account? Sign in here.
Sign in Now