Labware Teaching

Hi! I’m working on implementing some form of automated labware teaching on the Hamilton STAR line (to start). I’ve noticed that pylabrobot has an implementation of the firmware command “Search for Teach in signal using pipetting channel n in X-direction” via the async function: “STAR.search_for_teach_in_signal_using_pipetting_channel_n_in_x_direction”
What exactly does this do? What is the “signal” that the robot is searching for? Is it simply a collision with an arbitrary object, or is it something specific?

Hi and welcome to the forum!

The method STAR.search_for_teach_in_signal_using_pipetting_channel_n_in_x_direction is just copied from the firmware documentation. I’m not entirely sure what it does to be honest.

Instead, check out the resource locator program and @CamilloMoschner’s hack effectively turning the STAR into a CMM: Probe z height using channel by BioCam · Pull Request #69 · PyLabRobot/pylabrobot · GitHub.


Thanks for the welcome! I saw the PR and am working on a teaching implementation using that function. I was just trying to use fewer points (to do this faster), such as by incorporating the ability to detect edges in X and Y. The “teach in signal” function (for X) and “Move Y-drive till LLD found” (P[n]YL) seem to be potential candidates; I was hoping to see if anyone knew precisely what they do or if this is a wild goose chase based purely on promising FW command names!

It has mostly been the latter :sweat_smile: I will say it’s super helpful to produce behavior in venus and spy on the firmware command logs, and to grep through your historic logs (we have many gigabytes).

I have built some intuition for a few things so please ask away! I just don’t really know what ‘teach in signal’ does…

This may be a silly question, but how do I get the firmware logs of my Venus runs?

C:\Program Files (x86)\HAMILTON\LogFiles. You wanna look for HxUsbComm*.trc.

Hi @avoss,

Great to have more minds interested in this!

To be clear, the probe_z_height_using_channel STAR method
(method having the true programming meaning of a class associated function, nothing to do with Hamilton’s “method”, i.e. an automation protocol)
I made is not made to detect plastic plates or tubes normally used in bio wetlabs.

Most of the plastics used in these environments (e.g. polypropylene) are extremely non-conductive:
GPT-4’s take on the matter:

I have tried out detecting the bottom of empty wells placed on the skirt of a standard plate carrier and the conductive liquid level detection (cLLD) probing basically cannot find it. I assume because the charge on the channel has nowhere to dissipate into and so the capacitance sensor isn’t triggered.

So I recommend being careful with the use of cLLD in this instance.

There are many other uses for this function and the “teach in signal” function (for X) and “Move Y-drive till LLD found” you mention above, amongst them are VENUS’ daily and weekly maintenance using the teaching needles (good place for finding log information :slight_smile: ), installation of new machines (shakers, temperature control units), and labware definitions of MFX modules.

I also found it incredibly useful for probing precise differences in carrier height across different sites on the same carrier. Though not massive they can be up to 0.5mm, information useful for some people.

Also, a neat little feature that we’ll make into a function soonish is that you can probe the height of liquids, which in turn you can use to calculate the volume in your wells/containers - but only if the volume is above a certain threshold (probably around the 20-30ul mark), below that, again, there is not enough conductive material to dissipate the channel’s charge into → hence cLLD will fail and the channel simply throws up an error when it reaches its minimal_z_position_to_search_for.

There might be a way to get around this:
Hamilton machines provide the ability to generate controlled z-crashes (this is option 4 of the lld_mode when aspirating/dispensing) → this means there must be a compression sensor (maybe even a piezo) in addition to the capacitance and air pressure sensors in each channel.
I haven’t found the time to look into this, but it should be possible to find the height_of_last_compression_sensor_activation (made up name) and use it for exactly your purpose, automating labware teaching :slight_smile:

Please let me know if you find it - quite interested in it as well :sweat_smile: