Repository navigation
S3: SDK on Drawing 2.0 (Frame3; Pose3 wire-only) (epic-129) - #34
Merged
Merged
Conversation
- Every SDK csproj that references ModelingEvolution.Drawing moves to 2.0.0.72-preview.1 (12 packages + SimpleClient; Devices.Motion was on 1.13.0.71, the rest on 1.9.8.75). - CameraProjector: pose maths on Frame3/Quaternion; Pose3 is the API's wire format, converted once at the edge with scale 1 (every length in and out is mm). RotationTo -> Quaternion.FromTo, Pose3.FromSurface -> Frame3.FromSurface, Triangle3.ToPose -> ToFrame, Rotation.Rotate(EZ) -> TransformVector(EZ), Pose3 * / Inverse / TransformPoint/Vector -> Frame3. - RobotMotionExtensions.RoundCorner: Rotation3.Slerp x3 -> Quaternion.Slerp, Rotation3 in/out once. - CameraProjectorTryProjectToPixelTests: the 2 NonIdentityPoseChain tests compose the ground truth with Frame3 (same expected numbers). - Docs: CameraProjector.md and IDistanceSensorViewLocator remarks name the Drawing 2.0 members. - grep-gate job (TS-129-48): G-18 and G-19d over csharp/, fails on any line. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014wH5aL3TZhJNvLqa8YTku8
Contributor
Author
|
APPROVE. I reviewed head 244a1b6 against master 46ff3ac. The Drawing source I read is bd027b8, which is the commit 1. Every moved call site is correct maths. PASS
2. No hidden semantics change. PASS
3. Pins. PASS, with one correction to the body
4. grep-gate. PASS
5. Hygiene. PASS
🤖 Generated with Claude Code |
…-18a (Rotation3 algebra) per epic-129 test-scenarios; version fallback 3.3.0 Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014wH5aL3TZhJNvLqa8YTku8
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Epic-129 (Matrix), slice S3 "one pose algebra", the rocket-welder-sdk half. Drawing PR: modelingevolution/drawing#5.
Drawing version pin
ModelingEvolution.Drawing2.0.0.72-preview.1. It is set in each csproj (PackageReference), with no central props file. That covers 12 packages plusexamples/SimpleClient: Localization, Vision, Devices.Robot, Devices.DistanceSensor, RocketWelder.SDK, Devices.Camera, Runtime, Operations.Welding, AdaptivePoints, Devices.Motion (was 1.13.0.71), Devices.Welding and Hmi (the rest were 1.9.8.75). Masters never pin a preview: the lead bumps this branch to2.0.0.72once drawing #5 merges, before this PR merges.Some packages also pull Drawing 1.x in transitively: Automation and Automation.Abstractions through
ModelingEvolution.Signals2.0.1.1 (Drawing 1.9.4.71), and Blazor throughBlazorBlaze1.1.5 (1.0.63.45). Neither DLL referencesPose3,Rotation3or any deleted member, so it is safe for them to resolve to 2.0 in a consumer's graph.Call sites moved, and the unit scale each one uses
Vision/CameraProjector.csctorPose3d _cameraToGripperFrame3d,FromPose3(cameraToGripper, 1)onceCameraProjectorcamera → base (×3:ProjectPoseAt,ProjectPoint,TryProjectToPixel)gripperToBase * _cameraToGripper(Pose3*)CameraToBase()=Frame3d.FromPose3(_getCurrentPosition(), 1) * _cameraToGripperCameraProjector.ProjectPoseAtVector3d.EZ.RotationTo(rayDir)Quaternion.FromTo(Vector3d.EZ, rayDir),new Frame3d(…).ToPose3(1)CameraProjector.ProjectPointsurface.Rotation.Rotate(EZ)surface.TransformVector(EZ)on aFrame3dsurfaceCameraProjectorsurface overloads (Pose / Vector / Point / Points × Triangle3, a-b-c)Triangle3.ToPose(),Pose3d.FromSurface(a, b, c)ToFrame(),Frame3d.FromSurface(a, b, c); privatein Frame3dcores; the publicPose3doverloads convert onceCameraProjector.GetTcpForCameraPosecameraPose * _cameraToGripper.Inverse()(FromPose3(cameraPose, 1) * _cameraToGripper.Inverse()).ToPose3(1)Devices.Robot/RobotMotionExtensions.cscorner roundingRotation3.Slerp×3Quaternion.Slerp×3;ToQuaternion()once in,Rotation3.FromQuaterniononce outAutomation.Tests/CameraProjectorTryProjectToPixelTestsNonIdentityPoseChain_MatchesHandComputedGroundTruth,NonIdentityPoseChain_PointBehindCamera_ReturnsFalsegripper * handEyethen.TransformPointFrame3.FromPose3(gripper, 1) * Frame3.FromPose3(handEye, 1); same expected numbersVision/docs/CameraProjector.md(3 snippets),IDistanceSensorViewLocatorremarksPose3.FromSurface,plane + Vector3,Vector3.RotationToFrame3.FromSurface(…).ToPose3(1.0),plane with { Position = … },Quaternion.FromToWhy scale 1: every length in and out of
CameraProjectoris in millimetres: the poses, the returnedPoint3/Vector3,ProjectPoseAt(distance)and thebasePointpassed toTryProjectToPixel. Projecting through the intrinsics divides by Z, so it does not depend on the unit. If the frames were in metres, every input and output point would need a second conversion, so the frames stay in mm. The publicICameraProjectorsignatures are unchanged.The compiler found no other call site: the solution and
SimpleClientbuild with 0 errors on 2.0.0.72-preview.1. PL-2 package validation (dotnet packof Abstractions, Devices.Welding and Automation.Abstractions) passes locally.grep-gate job (TS-129-48)
New
.github/scripts/grep-gate.sh(same shape as drawing's) and agrep-gatejob in.github/workflows/test.yml.test.ymlnow also triggers on changes to the script. Output on this branch:On master 46ff3ac, G-18 found 3 lines (the
CameraProjector.mdsnippets) and G-19d found 4 (RobotMotionExtensions×3,CameraProjectorRotationTo). G-18 does not match an alias such asPose3d.FromSurface. The 2 such calls inCameraProjector.csfailed to compile against 2.0 instead.Test ledger (native, net10.0, Release)
/tmppermission failures before the hangNo test was removed or added. 0 expectations changed.
How the SDK versions itself
There is no version in the files:
release.shtakes the latestv*.*.*git tag (nowv3.2.0) and pushes a new tag (./release.sh --minorgivesv3.3.0).release.ymlruns on the tag and passes/p:Version.csharp/Directory.Build.propsholds only a fallback<Version Condition="'$(Version)' == ''">3.2.0</Version>for builds without/p:Version. Its comment says "Bump on each release alongside the git tag". This PR does not edit it.Branch name
The branch is
s3/epic-129-drawing2, notfeature/*. That way no push publishes previews:preview-publish.ymlruns only onfeature/*.🤖 Generated with Claude Code
https://claude.ai/code/session_014wH5aL3TZhJNvLqa8YTku8