Is anyone using PLR with air lihas? I’ve been digging in again and with Claude’s help, ID’s a few issues that make the current backend incompatible with the air lihas.
Attached are claude’s analysis and implementation plans. The big change would be:
The Air LiHa differs from syringe LiHa in init sequence, conversion factors, and per-operation commands — these are all EVOBackend-level concerns
Subclassing keeps the existing EVOBackend completely untouched
Clean separation: syringe users use EVOBackend, air users use AirEVOBackend
The ZaapMotion configuration is specific to the Air LiHa hardware variant
TipType.AIRDITI already exists in the codebase — just needs liquid class data
Please reach out if you’re using the air liha, I’d appreciate your take. And if anyone has advice/guidance on if the new backend is the right approach, I’m all ears on that too.
this is kind of a big ask and expanding the scope, but I believe it’s the most robust path: how about we use this opportunity to refactor the evo backend into the capability architecture?
a PIPBackend can be the superclass for LiHa AND AirLiHa which would be completely independent. Both would take driver: EvoDriver.
_aspirate_airgap and stuff shouldn’t really exist on the EVOBackend, we should put them on the LiHa classes.
ok. I’ll take a look at the v1b1 branch and see what I can get claude to do. I think i’ve just about got the air_liha subclass working on my local fork. There’s still a lot of emprical testing, but i can convert to the new capability model.
don’t hesitate to post/reach out if there’s something I can help with. v1b1 is good enough for basic star stuff so should be fine, but definitely a bit of a Wild West right now
Ok, I finished a bunch of testing on the hardware. It seems to be working…
I tried out some basic liquid handling with the air liha and moving plates with the RoMa - everything works as expected in the v1b1 architecture, and the legacy. My team is going to keep working on it, so if anything breaking comes up, we’ll try to make PR’s to fix it.
I made two PR’s - one to main with the legacy implementation, one to the v1b1 branch. Sorry for the huge AI generated masses, but the implementations are pretty well encapsulated and don’t touch any core PLR logic.