Import joint values and create targets on a 7DoF robot

I am working with a Kassow 810 7 DoF robot. The seven joint values should describe a robot target unambiguously.

I import a series of joint values and use the follwing code to create the target in VC.

    target = robot_controller.createTarget()
    target.MotionType = VC_MOTIONTARGET_MT_JOINT 
    target.UseJoints = True 
    jvals = [j1, j2, j3, j4, j5, j6, j7, 0]
    target.JointValues = jvals

    pos_frame.PositionInReference = target.Target
    pos_frame.Configuration = 

Strange thing number one. I had to add an extra element in the joint values list for the system to accept it. I think this number will become the Swivel parameter for the target.

The Swivel parameter is what I understand only relevant when a cartesian target is specified to describe how the extra “freedom” in the robot arm should be utilized.

The targets is created in VC as they should but when I create a program to move to the targets, the KR810 executor fail to move to every third target or so. If I manually move the robot to j1-j7 and create a target. The frame will appear in same position and orientation as created by my script but will have another Swivel parameter.

Can the system automatically calculate the Swivel parameter so it is possible for me to create targets acceptable by the executor?

Try adding the following lines:

pos_frame.getProperty('Swivel').Value = target.JointValues[7]

In motions statements for 7 axis robots or any robot with external axes you also need to set the external axes properties on the position frame. setJoint() isn’t enough.

In VC 7 axis robot modeling is bit finicky. Modeling it with just 7 normal axis on the controller is not enough as then there will be no data on motion statements to fix the redundancy in the kinematics. You need an “external axis” whose value then gets saved in the motion statements. In the case of Kassow that axis is the “Swivel” and it’s basically just coupled to joint 3 so they should always have the same value. You could also model one of the 7 normal axis as external axes but the downside with it would be that its behavior when jogging would be different than other joints. Basically jogging that external axis would move other joints as well to compensate in a way where TCP would remain in the same position. This is often unwanted and there is no good workaround for it. Best way at the moment is to model that 8th axis to guide the redundancy and have 7 axis as normal.



Thank you for pointing me in the correct direction Keke.
I had to add j3as the 8th element in the list of jointvalues. For the executor to accept the targets.

    jvals = [j1, j2, j3, j4, j5, j6, j7, j3]
    target.JointValues = jvals

Thank you for the swift reply and help you provide Keke!!

1 Like