Skip to content

Add initial i15-1 robot device#1879

Merged
DominicOram merged 7 commits intomainfrom
dodal-1863
Feb 6, 2026
Merged

Add initial i15-1 robot device#1879
DominicOram merged 7 commits intomainfrom
dodal-1863

Conversation

@Mark-Booth
Copy link
Copy Markdown
Member

@Mark-Booth Mark-Booth commented Feb 2, 2026

Note that this initial implementation does only the first half of a full load operation, picking the requested pin from the puck and leaving it in the staging position

Progresses #1863

Instructions to reviewer on how to test:

  1. Do thing x
  2. Confirm thing y happens

Checks for reviewer

  • Would the PR title make sense to a scientist on a set of release notes
  • If a new device has been added does it follow the standards
  • If changing the API for a pre-existing device, ensure that any beamlines using this device have updated their Bluesky plans accordingly
  • Have the connection tests for the relevant beamline(s) been run via dodal connect ${BEAMLINE}

@Mark-Booth Mark-Booth requested a review from a team as a code owner February 2, 2026 14:49
@tpoliaw
Copy link
Copy Markdown
Contributor

tpoliaw commented Feb 2, 2026

Also, replace @device_factory() with @devices.factory() in i15_1.py

This feels like it could be its own PR

Copy link
Copy Markdown
Contributor

@DominicOram DominicOram left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This feels like it could be its own PR

Ideally, yes, but I'm not too bothered about having it here. It's a small change and i15-1 isn't using any of this in prod yet anyway. But yh, for future reference @Mark-Booth, I think a new PR would have been cleaner.

This looks like a good start, thank you! A few initial comments in the code on the direction to go next but I think think this is good enough to give a first go on the beamline.

Comment thread src/dodal/devices/i15_1/robot.py Outdated
value: the sample location
"""
# if _pin_loaded():
await self.puck_load.trigger()
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could: We could do this at the same time as setting the puck/pos but I doubt it's probably not going to be much faster

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we've seen the puck_sel and and pos_sel change during a program load, so that might introduce a race condition here.

I think it's worth sticking to the current "wait for program loaded" logic for now.

Comment thread src/dodal/devices/i15_1/robot.py Outdated
Comment thread src/dodal/devices/i15_1/robot.py Outdated
value: the sample location
"""
# if _pin_loaded():
await self.puck_load.trigger()
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should: I think we probably need a comment somewhere saying that this loads the program, rather than actually does a robot "load" as it could at first glance look confusing we're loading before we set positions

Copy link
Copy Markdown
Member Author

@Mark-Booth Mark-Booth Feb 5, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rather than adding a comment, I've renamed puck_load to puck_load_program instead.

Comment thread src/dodal/devices/i15_1/robot.py Outdated
Comment thread src/dodal/devices/i15_1/robot.py Outdated
Comment thread src/dodal/devices/i15_1/robot.py Outdated
Comment thread src/dodal/devices/beamlines/i15_1/robot.py
@Mark-Booth
Copy link
Copy Markdown
Member Author

Also, replace @device_factory() with @devices.factory() in i15_1.py

This feels like it could be its own PR

Yeah, we've been discussing preferences on handling 'scout camp rule' changes (leave the camp ground tidier than you found it) and I'll go separate PR in the future.

Copy link
Copy Markdown
Contributor

@oliwenmandiamond oliwenmandiamond left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dodal.devices.i15.robot.py will need to be changed to dodal.devices.beamlines.i15.py

#1866

Note that this initial implementation does only the first half of a full load operation, picking the requested pin from the puck and leaving it in the staging position.
@codecov
Copy link
Copy Markdown

codecov Bot commented Feb 5, 2026

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 99.04%. Comparing base (daee0a7) to head (dff0626).
⚠️ Report is 1 commits behind head on main.

Additional details and impacted files
@@           Coverage Diff           @@
##             main    #1879   +/-   ##
=======================================
  Coverage   99.03%   99.04%           
=======================================
  Files         305      306    +1     
  Lines       11522    11590   +68     
=======================================
+ Hits        11411    11479   +68     
  Misses        111      111           

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@DominicOram DominicOram changed the title Initial #1863 implementation, add i15-1 robot device Add initial i15-1 robot device Feb 6, 2026
Copy link
Copy Markdown
Contributor

@DominicOram DominicOram left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Great, thanks! Tested on the beamline and works as expected

@DominicOram DominicOram enabled auto-merge (squash) February 6, 2026 15:08
@DominicOram DominicOram merged commit ebba33b into main Feb 6, 2026
9 checks passed
@DominicOram DominicOram deleted the dodal-1863 branch February 6, 2026 15:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants