Conveyor tracking update position problem

Hi:

We are trying to make a conveyor belt tracking routine where equidistant objects must be operated. Imagine a series of boxes running down the conveyor where the Tool must travel a certain distance across the box making contact with it. Our solution uses relative movements in order to achieve this, first we estimated the conveyor axis and we are using rotation matrix in order to define our relative movements.

For example in order to move relative to our O_c axis. We do something like this.

  • Obtain current position : act_pose = get_actual_tcp_pose()
  • Define displacement : d_c = R_b_c*[dx, dy, dz]
    Where R_b_c is the rotation matrix which transform conveyor coordinates to base coordinates.
  • Add it to our current position : pose_add(act_pose, p[d_c[0], d_c[1], d_c[2], 0,0,0]).
  • MoveL to that position.

[Figure 2]

Because this must be executed continously we have this runnning inside a loop.

While True:
track_conveyor_linear()
MoveL to next_box
MoveL relative_to_next_box
stop_conveyor_tracking()
act_pose = get_actual_tcp_pose()

We are currently having troubles between boxes because the robots land further and further away from the expected point. I think it could be that we are starting and stopping the conveyor tracking and the conveyor is moving where the robot is not so there is a net displacement of the conveyor w.r.t the robot. First we thought that the TPM parameter was incorrect, but when the robot is moved along the object running in the conveyor with no relative displacement the robot ends at the same starting point but moved along

We are actually doing this:

track_conveyor_linear()
While True:
MoveL to next_box
MoveL relative_to_next_box
act_pose = get_actual_tcp_pose()
stop_conveyor_tracking()

The first box is procesed correctly but in the at the end of the first cycle the robot moves to the second box in the conveyor and tries to move but relative to the first box (it seems like get_actual_tcp_pose() is not updated).

[Figure 3]

In the previous image it would do this cycle (asume the names where out_pose_next box is inherit the same name e.g in_pose = in_pose_next):

out_pose → in_pose → end_pose → out_pose → out_pose_next → in_pose

[ Figure 2]

[Figure 3]