Dear Community User! We are updating our platform to a new system.
Read more: Important information on the platform change.

cancel
Showing results for 
Search instead for 
Did you mean: 

Is it possible to use a Robot 3D circular interpolation function in 2D Cartesian XZ robot ?

Is it possible to use a Robot 3D circular interpolation function in 2D Cartesian XZ robot ?

giustola69
Long-established Member

Is it possible to use the 3D circular interpolation function to make a 2D circular interpolation for example for a XZ cartesian robot or I must use the 2D circular interpolation functions?

Here you have my code: if I run it for the 3 axis intepolatin plane XYZ is working good but I get an error when I run it for the 2 axis interpolation XZ

giustola69_0-1725001617393.png

 

// Circular Interpolationplane XYZ

IF I_KinPlane = enXYZ THEN

      stML_KinMoveCircleData3D.In.KinName                      :=            I_strKinName;

      stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Meaning := IP_X;   

      stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Value := I_IntermediatePosition[0];

      stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Attribute:=ABS_VALUE;

      stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Meaning := IP_Y;   

      stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Value := I_IntermediatePosition[1];

      stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Attribute:=ABS_VALUE;

      stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[2].Meaning := IP_Z;   

      stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[2].Value := I_IntermediatePosition[2];

      stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[2].Attribute:=ABS_VALUE;

      stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleDataSize:=3;

      stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Meaning:= X;

      stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Value:=I_EndPosition[0];

      stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Attribute:=ABS_VALUE;

      stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Meaning:= Y;

      stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Value:=I_EndPosition[1];

      stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Attribute:=ABS_VALUE;

      stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[2].Meaning:= Z;

      stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[2].Value:=I_EndPosition[2];

      stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[2].Attribute:=ABS_VALUE;

      stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTargetSize:=3;

      stML_KinMoveCircleData3D.In.Source             :=         'Kin MoveCirc3DAbs function ';

       ML_KinMoveCircle3D(Data:= stML_KinMoveCircleData3D);

END_IF

 

// Circular Interpolationplane XY

IF I_KinPlane = enXY THEN

                                   stML_KinMoveCircleData3D.In.KinName                      :=            I_strKinName;

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Meaning := IP_X;   

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Value := I_IntermediatePosition[0];

                        stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Attribute:=ABS_VALUE;

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Meaning := IP_Y;   

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Value := I_IntermediatePosition[1];

                        stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Attribute:=ABS_VALUE;

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleDataSize:=2;

                                  

                                    stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Meaning:= X;

                                stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Value:=I_EndPosition[0];

                                  stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Attribute:=ABS_VALUE;

                                    stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Meaning:= Y;

                                stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Value:=I_EndPosition[1];

                                  stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Attribute:=ABS_VALUE;

                                   stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTargetSize:=2;

                       

                                   stML_KinMoveCircleData3D.In.Source             :=         'Kin MoveCirc3DAbs function ';

                                   ML_KinMoveCircle3D(Data:= stML_KinMoveCircleData3D);

END_IF

 

// Circular Interpolationplane XZ

IF I_KinPlane = enXZ THEN

                                   stML_KinMoveCircleData3D.In.KinName                      :=            I_strKinName;

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Meaning := IP_X;   

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Value := I_IntermediatePosition[0];

                        stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Attribute:=ABS_VALUE;

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Meaning := IP_Z;   

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Value := I_IntermediatePosition[1];

                        stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Attribute:=ABS_VALUE;

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleDataSize:=2;

                                  

                                    stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Meaning:= X;

                                stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Value:=I_EndPosition[0];

                                  stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Attribute:=ABS_VALUE;

                                    stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Meaning:= Z;

                                stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Value:=I_EndPosition[1];

                                  stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Attribute:=ABS_VALUE;

                                   stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTargetSize:=2;

                       

                                   stML_KinMoveCircleData3D.In.Source             :=         'Kin MoveCirc3DAbs function ';

                                   ML_KinMoveCircle3D(Data:= stML_KinMoveCircleData3D);

END_IF

 

// Circular Interpolationplane YZ

IF I_KinPlane = enYZ THEN

                                   stML_KinMoveCircleData3D.In.KinName                      :=            I_strKinName;

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Meaning := IP_Y;   

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Value := I_IntermediatePosition[0];

                        stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[0].Attribute:=ABS_VALUE;

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Meaning := IP_Z;   

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Value := I_IntermediatePosition[1];

                        stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleData[1].Attribute:=ABS_VALUE;

                                    stML_KinMoveCircleData3D.In.CmdCircleData.CmdKinCircleDataSize:=2;

                                  

                                    stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Meaning:= Y;

                                stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Value:=I_EndPosition[0];

                                  stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[0].Attribute:=ABS_VALUE;

                                    stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Meaning:= Z;

                                stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Value:=I_EndPosition[1];

                                  stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTarget[1].Attribute:=ABS_VALUE;

                                   stML_KinMoveCircleData3D.In.CmdKinPose.CmdKinTargetSize:=2;

                       

                                   stML_KinMoveCircleData3D.In.Source             :=         'Kin MoveCirc3DAbs function ';

                                   ML_KinMoveCircle3D(Data:= stML_KinMoveCircleData3D);

END_IF

1 REPLY 1

CodeShepherd
Community Moderator
Community Moderator

I did some tests with following results:

Working:

  • XYZ cartesian with 3D circle
  • XYZ cartesian with 2D circle
  • XY cartesian with 2D circle

Not working:

  • XY cartesian with 3D circle

I added my test program here so you can open it. 

In short: For commanding an 2D kinematic an 2D circle commands needs to be used.
In long: A 3D circle is not possible to use with a 2D kinematic, as the calculations are done 3-dimensional and so 3 coordinates are expected, but the transformation is not supporting 3 dimensions so only 2 coordinates are useable.

Icon--AD-black-48x48Icon--address-consumer-data-black-48x48Icon--appointment-black-48x48Icon--back-left-black-48x48Icon--calendar-black-48x48Icon--center-alignedIcon--Checkbox-checkIcon--clock-black-48x48Icon--close-black-48x48Icon--compare-black-48x48Icon--confirmation-black-48x48Icon--dealer-details-black-48x48Icon--delete-black-48x48Icon--delivery-black-48x48Icon--down-black-48x48Icon--download-black-48x48Ic-OverlayAlertIcon--externallink-black-48x48Icon-Filledforward-right_adjustedIcon--grid-view-black-48x48IC_gd_Check-Circle170821_Icons_Community170823_Bosch_Icons170823_Bosch_Icons170821_Icons_CommunityIC-logout170821_Icons_Community170825_Bosch_Icons170821_Icons_CommunityIC-shopping-cart2170821_Icons_CommunityIC-upIC_UserIcon--imageIcon--info-i-black-48x48Icon--left-alignedIcon--Less-minimize-black-48x48Icon-FilledIcon--List-Check-grennIcon--List-Check-blackIcon--List-Cross-blackIcon--list-view-mobile-black-48x48Icon--list-view-black-48x48Icon--More-Maximize-black-48x48Icon--my-product-black-48x48Icon--newsletter-black-48x48Icon--payment-black-48x48Icon--print-black-48x48Icon--promotion-black-48x48Icon--registration-black-48x48Icon--Reset-black-48x48Icon--right-alignedshare-circle1Icon--share-black-48x48Icon--shopping-bag-black-48x48Icon-shopping-cartIcon--start-play-black-48x48Icon--store-locator-black-48x48Ic-OverlayAlertIcon--summary-black-48x48tumblrIcon-FilledvineIc-OverlayAlertwhishlist