CNC program (G-code B&R) - Change of Axis angle while holding TCP

I have 3 axis robot in XY plane and I wanted to ask, if it is possible somehow for me to lock TCP coordinate while changing axis angle in CNC prog (G-code B&R).

Let’s say my robot is at X = 100, Y = 100, Q1 = 10°. Now I would like to change only Q1 to 15°, but at the same time keep the TCP position fixed at X = 100 and Y = 100. That would mean Q2 and Q3 should automatically adjust to compensate for the change in Q1.

However, I cannot combine TCP and axis commands in one block (e.g. X = 100 Y = 100 Q1 = 15). Is there some special function to do this I missed in help, or it is not possible?

There isn’t a built-in function to just change a single joint but keep the TCP in place like you are describing.

You can’t mix coordinates in a single call, but I believe you can do G01 to a given set of joints (I know it works in ARNC0, I assume it still works in Mapp Motion). You would need to calculate all the joints to give to the call otherwise it will assume the other joints should end where they start. You can add your own custom functions to do this, and in fact could make your own GCode function to do it.

The other option is to just setup your coordinate systems so that the TCP rotation reflects the Q1 and do a normal TCP move with only a changing orientation.

Hello,

I think you have to ceate a special input Interface for your usecase, because our standard system is not intended to do this.

For geometrie movement we have two options…

Linear-Movements (G00/G01):

In this operation Mode we interpolate in the cartesian coordinates. The Path is generated for X,Y Coordinates and while the path is moving we transform each input X,Y set to a Q1,Q2 Axes Coordinate.

G01 X=10 Y=10
G01 Q1=10 Q2=10 → the Interpreter use the direct transformation to calculate the set Point in X,Y and operates like if given X,Y Coordinates.

So you can use PCS or ACS coordinates but you cant mix them.

Issue here, if you are at X=100 Y=100 and you move to X=100 Y=100 you will end up with no interpolation at all, because the system does not see a difference.

PTP-Movements (G100/G101):

In this operation Mode we interpolate in the Joint Axis Coordinates. No inverse Transformation is called while movement becuase each calculated point is already in Joint coordinates.

G101 Q1=10 Q2=10
G101 X=100 Y=100 → Inverse Transformation is called once to translate the target coordinates to the Joint version.


If your TCP stays in the position if both axes are just rotating in oposite direction with same speed, you can just call G101 with the traget Joint Coordinates.

But if there is a non linear transformation in this compensation we need to find a different idea.


The question in generall would mean that for the Targeted Position your kinematik is in a sigular position, which has multiple solutions for the same TCP. The PathPanner has to call the Transformation multiple times , with same TCP input but should get different results. That is an operation i think the system is not made for i think. Normaly you want to get through a singular postion with the one solution selected which is next to the previous solution to have minimal axis movement.

If we want to change the mode of a Kinematic at B&R we go with PTP-Movements and allow the TCP to move, while we reconfigure an Kinematic.

Example for a SCARA you have first right handed and want to go to left handed. This is a non redundant Kinematik like all our build in kinematiks. It is not possible to reconfigure from one mode to the other without moving the tcp.

There have been some now functions added which increases the usable interface from CNC-Programm to Transformation. I did not jet have time to test them or understand all possible use cases of them.

MODE: Set robot mode
REF_POS: Set reference joint position
UPDATE_CUSMECH_DATA

I hope this information helped to understand the interpolation modes of the PathPlanner. I am currently very busy with other tasks. I will check for your update …

Greetings
Michael

Thank you for your reply. I will look into it.

I would like to clarify my question regarding the redundant kinematic system in B&R CNC.

I am working with a robot in the XY plane that has 3 axes and is a redundant system. I utilize this redundancy by treating one of the joint axes (Q1) as an optional parameter in the inverse kinematics solution. Based on its value, I calculate the remaining axes (Q2, Q3) using my own implementation of inverse kinematics within a custom mechanical system. This solution works correctly when Q1 is set statically—for example, Q1 = 15°, in which case the system calculates Q2 and Q3 so that the TCP follows the desired trajectory from the G-code in Cartesian coordinates X, Y.

However, what I need is to change this redundant parameter dynamically during movement. I have a defined TCP trajectory in Cartesian space (X, Y interpolation in G-code), and at the same time, I would like to smoothly change the value of Q1 (e.g., from 10° to 15° during movement). I expect that inverse kinematics will recalculate Q2 and Q3 at each interpolation step so that the TCP remains exactly on the defined trajectory.

I understand that if I control the joint axes directly, inverse kinematics will not be used in CNC mode. However, I need to remain in Cartesian (TCP/CV) control mode and only influence the IK solution using a redundant parameter.

One possible way to address this would be to implement this parameter not as a joint axis, but as an additional Cartesian interpolation variable (e.g., by extending the TCP space with a third component, such as X, Y, C). This “virtual” C-axis would be smoothly interpolated in G-code along with X and Y and would then be mapped to Q1 within the custom mechanical system, while Q2 and Q3 would still be solved by inverse kinematics.

My question, therefore, is: is there a mechanism in B&R CNC to introduce and smoothly adjust such a redundant parameter—which is part of the input to inverse kinematics—during TCP motion without violating the Cartesian trajectory? In other words, is it possible to maintain TCP trajectory interpolation while simultaneously superimposing an additional degree of freedom onto it, which is evaluated only in inverse kinematics, rather than as direct control of the joint axis?

Thank you again,
Jan

Hello,

I think your description with the additional degree of Freedom “C” is a good idea, and i would go for this. Currently i see no issue in your explanation.

Q1, Q2, Q3 ↔ Y,X,C

If you configure your TCP Coordinates like this, the System knows that C not an Cartesian Coordinate.

The PathDefinition, which defines how the Feedrate is calculated, is set by default to only consider movement in the cartesian plane. Angular Axis are excluded from the Feedrate Calculation.

You can extend all your 4 Transformation Functions to support the Parameter C as Angel-Axis Value.

The interpolation will traverse the Parameter C in a linar way from start of the XY Movement to the End of the XY-Movement. While considering the Feedrate only for the XY-Movement.

G01 X=10 Y=10 C=10
G01 X=20 Y=20 C=20

However there is one situation i want to go more in detail… if you have no XY-Movement but only C-Paramter change. This will lead to a movements with Axis Limits, because the Feedrate-Path for Cartesian Coordinates does not see a movement.

G01 X=10 Y=10 C=10
G01 X=10 Y=10 C=20

But there is a possible way to reduce the Feedrate if needed for this situation if you use additional Path-Definitions and you switch for this special situation to a different Path.

You need only Path2 or Path3. Path3 will definitly work as i allready used this setting. Path2 uses a new Setting which was added recently. As Both Values are linked 1:1 in the Transformation it may not make much of a difference, which of them is used.

SET_FEED_PATH PathQ1
F=100
G01 X=10 Y=10 C=10
G01 X=10 Y=10 C=20
SET_FEED_PATH PathXY

With the Function SET_FEED_PATH you can change to which Path-Definition the Feedrate is applied as Veloctiy Limit. If you know that you will only move C-Coordinate alone, you apply the Feedrate to a Path which limits also the C or Q1 Axis Movement.

I hope i did not miss any situation, but with this additional knowledge about the PathDefinitions you should be able to solve the usecase.

Greetings
Michael Bertsch