Hello all! I’ve been working on my lab’s implementation of PLR on our Tecan Evo 200 decks. We have essentially 2 identical layouts that seem to rather customized compared to the standard Evo setup. PLR has turned out to be a wonderful repository for interfacing with these machines, and I am making this post in hopes to get some clarity regarding a few subjects so that i may contribute back some of what I’ve implemented. Apologies if these topics should be separated into several posts.
Deck Coordinate Layout and Mapping
I’ve noticed that in the default coordinate mapping, the origin (0,0) is by default the bottom left corner. I’m sure this is standard across many machines, however when referencing coordinates to send to the arms, our machine is setup to where x=0 is still the left side of the deck, but y=0 is roughly the middle of the deck, and approx equal to y=345 in the PLR Evo_backend implementation. In addition, larger positive y values bring the arms down (closer to user), and so essentially the y-axis is inverted. What would you suggest to be a feasible solution so as to simplify development and keep our contributions in line with PLR?
PnP Implementation
My colleague and I have been able to get a working demo of the PnP (tube gripper) using the send_command() afforded by the Evo_backend module. At the moment, its currently moving to arbitrary coordinates we provide as parameters (lots of guess and test), and I am working on adapting it to the existing style that PLR uses. Hoping to have a pull request in the near future.
Arm Configuration
From my understanding, the current arm setup is hardcoded, and I believe I came across another post suggesting custom arm configuration ordering upon initializing. I can also make an attempt at this as I believe i have a pretty good idea to approach it. Currently our arms are PnP, LiHa, RoMa in order from left to right.
Resource Pickup
What is the current method to determine which module/arm picks up and drops a resource? For example, tips are picked up by LiHa, carriers are picked up by RoMa, and tubes are picked up by PnP. Is the arm that moves the resource inferred by the type of resource thats being picked up? Or should it be explicitly declared that the PnP is the module used to pick up a tube when calling pickup_resource()?
Happy to provide any additional context as needed! Cheers and thanks in advance.