Skip to content

PreciseFlexArm: picks and places write a Cartesian station - #1576

Merged
BioCam merged 22 commits into
mainfrom
precise-flex-station-cartesian
Nov 11, 2026
Merged

BioCam merged 22 commits into
mainfrom
precise-flex-station-cartesian

Conversation

@BioCam

@BioCam BioCam commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

The Problem

Every pick and place on a PreciseFlex goes to the wrong place. pick_up_at_* and drop_at_* write the station with locAngles, then send StationType, which empties a station set that way. The station ends up at 0, 0, 0, so the controller works from a location nobody asked for: on the arm, pickplate drove the gripper about 290 mm down and changed the elbow's side.

The column and base plate check does not catch it, because it looks at the station that was asked for and not at where the controller goes.

PR Content/Solution

  • Picks and places write the station with locXyz and locConfig, computed from the same joint state the check ran on, then send StationType. A station set this way stays through StationType.
  • _unchecked_fw_set_joint_angles stays, for locAngles; nothing in a pick or place calls it now.
  • An arm with a rail raises NotImplementedError when the station would be written, since a rail station has not been run on an arm.
  • The wire tests pin the new sequence, and a new test checks the station against poses and wherec readings from the arm, one on each elbow side.

🤖 Generated with Claude Code

`StationType` empties a station set by `locAngles`, so every pick and place targeted 0, 0, 0.
The station is now written with `locXyz` and `locConfig`. A rail arm is refused.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@BioCam
BioCam force-pushed the precise-flex-station-cartesian branch from a64d9ae to 095e19b Compare October 30, 2026 21:17
@BioCam
BioCam marked this pull request as ready for review November 9, 2026 09:40
@BioCam
BioCam requested a review from a team as a code owner November 9, 2026 09:40
BioCam and others added 7 commits November 9, 2026 13:31
The controller reaches a Cartesian station with the wrist at the heading wrapped to +-180, less the
shoulder and the elbow. A station taught a full turn from that made `pickplate` turn the wrist 360
degrees on the way down, past a column check run on the taught wrist. The heading is rounded before
it is wrapped, so the check and the station sent cannot differ at exactly +-180.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@BioCam

BioCam commented Nov 11, 2026 •

Copy link
Copy Markdown
Collaborator Author

tested this on a PF400 (extended reach, IntelliGuide gripper) - the station written by _unchecked_fw_set_station_cartesian reads back from the controller within 0.006 mm/deg of wherec, right and left elbow

pick_up_at_joint_state, drop_at_joint_state and pick_up_at_location ran with a plate-sized block between two taught positions, plus a pick and place with the left elbow - same station both ways, elbow kept, depart exactly 110 mm up

found one gap - pickplate takes the wrist at (heading wrapped to ±180) − shoulder − elbow, so a station taught a full turn away spun the wrist 360° inside the move, past a column check run on the taught wrist

fixed in 2ddc73b - the check now uses the wrist the controller takes, and the check and locXyz share one rounded heading at ±180

one open item - one place stopped with −3122 about 42 mm above the station, the retry and every move after were clean, cause not found

anything else you'd want run on the device before review?

@BioCam
BioCam merged commit 77fc9cf into main Nov 11, 2026
1 check passed
@BioCam
BioCam deleted the precise-flex-station-cartesian branch November 11, 2026 22:12
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.

1 participant