Home robot after crash

Is there a command in PLR that either initializes the robot again or moves the robot arms to the home position after a crash or error?

I am currently working on a Tecan Evo but i have the same time when using the hamilton.

On Hamilton machines (I don’t know about Tecan machines):

There are various commands that “re-initialise” the machine or various parts of it:

My favourite is

await lh.backend.spread_pip_channels()

…for channel crashes.
Why:
It represents one command that…

  • moves all channels into the save z-position,
  • checks whether all channels are reachable, i.e. detects if a channel has crashed, and
  • performs a channel-flag search, i.e. moves all channels to the back of the arm for the sensor to sequentially detect where each channel is,
  • then spreads all channels evenly in the y-dimension,
  • after that I can usually use all channels again as expected.

Is this sufficient or do you need a command that also moves the arm to a specific x-position and checks the autoload (if you have one) as well?

1 Like

Thanks that is a huge help.
Is there a way to specify this for a single arm such as the gripper, 8-channel pipetter or the 96-channel head?

  • STAR.initialize_core_96_head
  • STAR.initialize_autoload
  • STAR.initialize_iswap

for the pipetting channels, it’s a little more complicated:

dy = (4050 - 2175) // (star.num_channels - 1)
y_positions = [4050 - i * dy for i in range(star.num_channels)]
await star.initialize_pipetting_channels(
  x_positions=[star.extended_conf["xw"]],  # Tip eject waste X position.
  y_positions=y_positions,
  begin_of_tip_deposit_process=int(star._traversal_height * 10),
  end_of_tip_deposit_process=1220,
  z_position_at_end_of_a_command=3600,
  tip_pattern=[True] * star.num_channels,
  tip_type=4,  # TODO: get from tip types
  discarding_method=0,
)

(I will add a convenience function for this, we also need it :))

you can initialize individual components of pipetting channels using low-level firmware commands (I can add wrappers if this is needed often):

star.send_command(module="P<channel_idx>", command="<drive_index>I")

  • channels are indexed 1-G from the back (10 = a, 11 =b, 16 = g) (note: plr is 0-indexed)
  • y drive = Y, z drive = Z, dispensing drive = D, squeezer drive = S

for example: lh.backend.send_command(module="P1", command="ZI") to initialize the z-drive on the first thannel from the back (channel 0 in plr)

2 Likes