Component reference
This is the complete catalog of Egret components, grouped exactly the way they appear in Grasshopper's Lite6 tab. Each entry shows the component's icon, what it does, and every input and output it exposes, so you can see at a glance how data flows from one node into the next. New to the plugin? Skim the Hello World walkthrough first, then keep this page open as your lookup reference.
Targets
CIR (CIR)
Arc move: curves from where it is, through a middle (via) plane, to an end plane, like drawing a circle through three points. Use for rounded paths the robot should sweep, not corner.
"Lite6 CIR", Cartesian circular/arc motion through a via plane to an end plane. The arc is uniquely determined by start (current TCP), via, and end. xArm SDK: arm.move_circle(via, end, percent). For simulation, only the END pose's joint angles are computed (the arc path is not visualized in v0.7, wire multiple intermediate PTP/LIN poses to a single Sim to see the trajectory as discrete poses).
Inputs
| Name | Description |
|---|---|
Via (V)Plane | Via (aux) TCP plane, arc passes through this. |
End (E)Plane | End TCP plane, arc terminates here. |
Percent (%)Number | Arc percent to traverse (100 = full arc to end; <100 stops short; >100 overshoots). |
Speed (S)Number | Speed percent (1-100). |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | robot target (CIR, with via + end planes). |
Joints (J)Text | Resolved END joint angles in degrees (for simulation only). |
Status (S)Text | IK status / warning. |
Cartesian Target (CartTgt)
Build a Cartesian target by typing the TCP pose, X Y Z (mm) + Roll Pitch Yaw (deg), as in uFactory Studio. IK resolves it to joints. Like Pose, but in Cartesian coords. Feed into Live Jog / Stage / Code.
"Cartesian Target", build a Cartesian RobotTarget by typing the TCP pose: X Y Z (mm) + Roll Pitch Yaw (deg), exactly as uFactory Studio shows it. Like a Pose, but in Cartesian/tool coordinates instead of joint angles. IK resolves it to joints (same solver as PTP). Feed it into Live Jog (Cartesian jog), Stage, Code, or any target input, moving X moves the tool in X.
Inputs
| Name | Description |
|---|---|
X (X)Number | TCP X in mm (robot base frame). |
Y (Y)Number | TCP Y in mm. |
Z (Z)Number | TCP Z in mm. |
Roll (A)Number | Roll about X in degrees (uFactory 'A'). |
Pitch (B)Number | Pitch about Y in degrees (uFactory 'B'). |
Yaw (C)Number | Yaw about Z in degrees (uFactory 'C'). |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot to use another model. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | Cartesian RobotTarget (carries the TCP plane + IK joints). |
Plane (Pl)Plane | The TCP plane built from X/Y/Z/A/B/C. |
Status (S)Text | IK status / warning. |
LIN (LIN)
Straight-line move to a target plane: the tool travels in a straight line in space (Cartesian). Use for approaches, retracts, and any path that must stay straight, e.g. inserting a part or following an edge.
"Lite6 LIN", Cartesian linear motion. Takes a target TCP Plane and resolves it to joint angles via IK (for simulation), but the code-gen emits arm.set_position(x, y, z, roll, pitch, yaw) so the robot moves in a straight line in Cartesian space (not joint-interpolated).
Inputs
| Name | Description |
|---|---|
Target (P)Plane | Target TCP plane in robot base frame. |
Speed (S)Number | Speed percent (1-100). |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | robot target (LIN, with Cartesian plane). |
Joints (J)Text | Resolved joint angles in degrees (for simulation only). |
Status (S)Text | IK status / warning. |
Load Traj (LoadTraj)
Read a .ltraj JSON file into a RobotTarget list.
"Lite6 Load Traj", read a .ltraj JSON file written by Lite6 Save Traj and output the RobotTarget list. Schema is the minimal hand-rolled format from the save side; missing fields fall back to defaults.
Inputs
| Name | Description |
|---|---|
Path (P)Text | Path to a .ltraj file. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Loaded targets. |
Count (N)Integer | Number of targets loaded. |
Status (S)Text | Result. |
PTP (PTP)
Point-to-point move to a target plane: the fastest way there, joints take the quickest route, so the tool path is NOT straight. Works out the joint angles for you (IK). Use for free-space moves where the exact path doesn't matter.
"Lite6 PTP", Cartesian point-to-point. Takes a target TCP Plane and resolves it to joint angles via numerical IK (damped least squares in Lite6Kinematics.Inverse). Outputs a RobotTarget with MotionType.PTP, which flows into Stage and Code unchanged.
Inputs
| Name | Description |
|---|---|
Target (P)Plane | Target TCP plane in robot base frame. |
Speed (S)Number | Speed percent (1-100). |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | robot target (joint-angle form). |
Joints (J)Text | Resolved joint angles in degrees, comma-separated. |
Status (S)Text | IK status / warning. |
Pose (Pose)
The simplest target: type or slide the joint angles (in degrees) to pose the arm directly, no inverse kinematics. Uses J1 through however many joints the robot has: xArm 5 uses J1, J5, Lite 6 / xArm 6 / UF 850 use J1, J6, xArm 7 uses J1, J7. Extra joints are ignored (with a warning). The component face shows the active range.
"Lite6 Pose", takes 6 joint angles in DEGREES (more intuitive than radians for Grasshopper sliders) plus motion type and speed, outputs a RobotTarget.
Inputs
| Name | Description |
|---|---|
J1 (J1)Number | Joint 1 angle in degrees. |
J2 (J2)Number | Joint 2 angle in degrees. |
J3 (J3)Number | Joint 3 angle in degrees. |
J4 (J4)Number | Joint 4 angle in degrees. |
J5 (J5)Number | Joint 5 angle in degrees. |
J6 (J6)Number | Joint 6 angle in degrees. Ignored on xArm 5 (5 joints). |
J7 (J7)Number | Joint 7 angle in degrees. Used only on xArm 7 (7 joints); ignored otherwise. |
Motion (M)Text | RIGHT-CLICK the component to pick the motion type (PTP or LIN), shown on its face. (Advanced: wire the text, or 0=PTP, 1=LIN; wired overrides.) |
Speed (S)Number | Speed percent (1-100). |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | robot target. |
Status (S)Text | Validation message. |
Toolpath
G-Code Import (GIn)
Parse slicer 3D-printing G-code into a sequence of robot motion targets.
"Lite6 G-Code Import", reads slicer-flavored G-code (PrusaSlicer, Cura, Slic3r, generic 3D-printer dialect) and converts it into a RobotTarget sequence. Aimed at 3D printing (FDM extruder, syringe deposition, pumpkin carving G-code, or any 2.5D/3D toolpath authored as G-code). 3D Printing. Parsed commands: G0 X Y Z F → PTP (rapid, no extrusion) G1 X Y Z E F → LIN (feed); E delta optionally triggers a digital output G90 / G91 → absolute / relative XYZ positioning M82 / M83 → absolute / relative extruder positioning G92 X Y Z E → set current position without moving G28 → home, ignored with a one-time warning M104/M106/M107/M109/M140/M190 → temperature & fan, ignored with one-time warnings ; ... → comments stripped Tool orientation convention: each emitted target plane has its +Z aligned with the NEGATIVE of Print Frame's Z axis, i.e. tool +Z points INTO the print frame, the way a nozzle/syringe sits over a bed. To attach a real tool offset, chain through Lite6 Custom Tool or Lite6 Tool (TCP) downstream. E (extruder) handling: when "Use Extruder" is true, transitions in E behavior emit DIGITAL_OUT targets on the supplied pin (high when E increased on the prior move, low otherwise). Useful for syringe-dispenser valves, FDM extruder enable pins, laser cutters, plasma cutters, etc. Default off keeps the output to motion only. Pure E-only moves (no XYZ change) are skipped on the motion path but still drive extrusion state.
Inputs
| Name | Description |
|---|---|
G-Code (G)Text | G-code text (multi-line). Wire a File Reader component for files on disk. |
Print Frame (F)Plane | Robot-world plane the G-code (0,0,0) maps to. Tool +Z will point into this frame's -Z. Default WorldXY. |
Speed Cap (Vmax)Number | Maximum speed in mm/s. F values from G-code are clamped to this. Default 100. |
Extruder Pin (Pin)Integer | Digital output pin driven by E transitions when Use Extruder is true. Default 0. |
Use Extruder (E)Boolean | Emit DIGITAL_OUT commands on the Extruder Pin when E values change (on for extruding moves, off for travel). |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Sequence of RobotTarget, PTP for G0 (travel), LIN for G1 (feed). |
Path Curve (C)Curve | Polyline through all motion positions, for preview. |
Moves (M)Integer | Count of motion targets emitted (excludes DIGITAL_OUT toggles). |
Status (S)Text | Parse summary: lines processed, moves emitted, skipped command counts. |
Import (Import)
Parse slicer 3D-print G-code or CAM 5-axis NC toolpaths into a RobotTarget sequence. Pick the source with the Dialect input.
"Import", unified toolpath importer that parses either slicer-flavored 3D-print G-code OR CAM-flavored 5-axis NC G-code into a RobotTarget sequence, selected by a Dialect dropdown. Supersedes the separate "G-Code Import" (Slicer) and "NC Import" (CAM) components, which are kept hidden for backward compatibility with old .ghx files. Dialect = "Slicer" (default): Parses PrusaSlicer/Cura/Slic3r/generic 3D-printer G-code. Each emitted target's +Z points INTO the Print/Work Frame's -Z (nozzle/syringe over a bed). The E (extruder) axis can drive a DIGITAL_OUT pin (see Use Extruder / Extruder Pin). G0/G1 X Y Z E F, G90/G91, M82/M83, G92, G28, M104/M106/M107/M109/M140/M190. Dialect = "CAM": Parses Fanuc-style 5-axis NC (Fusion 360/HSMWorks/Mastercam post or hand-written). Orientation comes from A/B/C Euler (A=Rx, B=Ry, C=Rz); when A/B/C are absent the Tool Down plane orientation is used. G0/G1/G2/G3, G17/18/19, G54-G59, G90/G91, G20/G21, T/M6, M3/M5, M8/M9. Inputs not relevant to the chosen dialect are ignored (Extruder Pin / Use Extruder apply to Slicer only; Tool Down applies to CAM only).
Inputs
| Name | Description |
|---|---|
Dialect (D)Text | RIGHT-CLICK the component to pick the dialect, Slicer (3D-print G-code) or CAM (5-axis NC), shown on its face. (Advanced: wire the text, or 0=Slicer, 1=CAM; wired overrides.) |
G-Code (G)Text | G-code / NC text (multi-line). Wire a File Reader component for files on disk. |
Frame (F)Plane | Robot-world plane the code (0,0,0) maps to. For Slicer, tool +Z points into this frame's -Z. Default WorldXY. |
Speed Cap (Vmax)Number | Maximum speed in mm/s. F values from the code are clamped to this. Default 100. |
Extruder Pin (Pin)Integer | [Slicer only] Digital output pin driven by E transitions when Use Extruder is true. Default 0. Ignored for CAM. |
Use Extruder (E)Boolean | [Slicer only] Emit DIGITAL_OUT commands on the Extruder Pin when E values change (on for extruding moves, off for travel). Ignored for CAM. |
Tool Down (TD)Plane | [CAM only] Default tool orientation when A/B/C are absent. Plane +Z = tool direction. Default WorldXY. Ignored for Slicer. |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Sequence of RobotTarget, PTP for G0 (travel/rapid), LIN for G1 (feed). |
Path Curve (C)Curve | Polyline through all motion positions, for preview. |
Moves (M)Integer | Count of motion targets emitted (excludes DIGITAL_OUT toggles). |
Status (S)Text | Parse summary: lines processed, moves emitted, skipped command counts. |
NC Import (NC)
Parse 5-axis CAM NC G-code into a RobotTarget sequence.
"Lite6 NC Import", parses CAM-flavored 5-axis NC G-code (Fanuc-style) and converts it into a RobotTarget sequence. Companion to Lite6 G-Code Import (which targets 3D-printer slicer dialects). Use this for Fusion 360 post, HSMWorks, Mastercam, or hand-written 5-axis NC. Parsed commands: G0 X Y Z A B C F → PTP (rapid) G1 X Y Z A B C F → LIN (feed) G2 / G3 → currently emitted as 2× LIN (start → end). True arc with I/J/K decomposition is a future cycle. G17 / G18 / G19 → plane select (acknowledged via comment; arc decomp would use these) G54 - G59 → work coordinate system select (treated as identity) G90 / G91 → absolute / relative G20 / G21 → inch warning / metric default T<n> / M6 → tool change (emitted as comment) M3 / M5 → spindle on/off (emitted as comment) M8 / M9 → coolant on/off (emitted as comment) Orientation: A around X, B around Y, C around Z (Fanuc convention). When all three are present, target plane is built as the rotation Rz(C)*Ry(B)*Rx(A) applied to the work-frame's WorldXY. When A/B/C are missing, falls back to the Tool Orientation input (default WorldXY with Z flipped, tool points down).
Inputs
| Name | Description |
|---|---|
NC Code (G)Text | Multi-line NC G-code text. |
Work Frame (W)Plane | Robot-world plane the NC (0,0,0) maps to. Default WorldXY. |
Tool Down (TD)Plane | Default tool orientation when A/B/C are absent. Plane +Z = tool direction. Default WorldXY (tool +Z = world +Z; flip to point down). |
Speed Cap (Vmax)Number | Maximum linear speed in mm/s for F mapping. Default 100. |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget sequence. |
Path Curve (C)Curve | Polyline through TCP positions. |
Moves (M)Integer | Motion targets emitted. |
Status (S)Text | Parse summary. |
Path Curve (PCv)
Sample a Rhino curve as a sequence of LIN targets at uniform arc length.
"Path Curve", sample any Rhino curve as a sequence of LIN targets. Lighter-weight than SPLine (which builds its own interpolated curve from N control planes). Use when you already have a Rhino curve from Brep edges, projected paths, or a CAD spline. Orientation: tool +Z follows the orientation plane's normal by default. Default plane = WorldXY → tool points down. Override for tilted milling / curved-surface following / aim-at-feature workflows (pair with `Orient Plane` upstream). Seed handling: the first IK solve uses the optional `Seed` input (joint angles in degrees), if not wired, defaults to home (all zeros). Each subsequent IK uses the previous sample's joints as its seed, so motion stays continuous through the path. If you see a "wrist flip detected" warning, the IK escaped to a different branch between two adjacent samples, wire a Seed that matches the configuration you want the path to live in (e.g., [-90, 100, 26, 0, -75, -90] for an arm reaching to the -Y side of base).
Inputs
| Name | Description |
|---|---|
Curve (C)Curve | Path curve to follow. |
Step (Step)Number | Sample spacing in mm. Smaller = smoother motion + more targets. Default 5. |
Tool Plane (Tool)Plane | Tool orientation reference. Tool +Z is the cut/touch direction. Default WorldXY → tool points down -Z. The plane's XYZ axes are applied at every sample. |
Speed (S)Number | Speed percent (1-100). |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | LIN target list along the curve. |
Count (N)Integer | Number of samples emitted. |
Skipped (Sk)Integer | Sample indices where IK did not converge (these are missing from the Targets list). |
Flips (Fl)Integer | Sample indices where a wrist flip was detected vs the previous sample. Run the Toolpath Optimizer (Smooth Posture) to resolve them. |
Status (S)Text | Sampling + IK summary. |
Reduce (Red)
Collapse consecutive collinear Cartesian targets within angle + position tolerance.
"Lite6 Reduce Toolpath", collapses consecutive Cartesian targets that lie (nearly) on a straight line within an angle tolerance. Drops the middle target when the turn angle at it is small enough that the robot wouldn't meaningfully change direction. Big win for slicer-generated paths (G-Code Import + dense SPLine outputs) where consecutive moves often deviate by less than 1°. Algorithm: sliding window of 3 (prev, mid, next). If both the position deviation (mid's perpendicular distance from the prev→next line) and the orientation deviation (angle between mid's Z axis and the interpolated Z axis at the same arc-fraction) are within tolerances, drop mid. Non-Cartesian targets (WAIT/IO/etc.) and waypoints with no TargetPlane are always kept (acting as anchors).
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list to reduce. |
Pos Tol (Pt)Number | Position deviation tolerance in mm, drop mid if it's within this distance of the prev→next line. Default 0.2 mm. |
Ang Tol (At)Number | Orientation deviation tolerance in degrees. Default 1°. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Reduced target list. |
Removed (R)Integer | Number of targets dropped. |
Remaining (N)Integer | Number of targets in the output. |
Status (S)Text | Summary. |
SPLine (Spl)
Interpolate a smooth toolpath through a list of planes; emit as dense LIN targets.
"Lite6 SPLine Movement", interpolates a smooth path through a list of input planes and emits it as a dense sequence of Lite6 LIN targets. SPLine Movement. The position curve is a Rhino interpolated curve through the plane origins. The orientation at each sample is interpolated by quaternion SLERP between the two surrounding input planes (parameterized by chord-length t). Each output target's joints come from IK with the previous target's joints as seed, giving continuous motion without surprise reconfigurations. Density is controlled by Step Length (mm). Default 5 mm = good for typical surface-following / 3D-printing / pumpkin-carving work. Lower for tighter curvature, higher for straight runs. Falls back gracefully: if any IK sample fails, that target is skipped with a warning; remaining targets continue.
Inputs
| Name | Description |
|---|---|
Planes (P)Plane | Control planes the spline interpolates through (in order). |
Step (Step)Number | Sample spacing along the spline in mm. Default 5. |
Speed (S)Number | Speed percentage (1-100). Default 50. |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Dense LIN targets along the interpolated spline. |
Path Curve (C)Curve | The interpolated position curve, for preview. |
Status (Status)Text | How many samples were emitted vs failed. |
Toolpath Optimizer (Optimize)
PREMIUM. Relieve singularities, smooth posture, avoid obstacles (beta), reorder for cycle time.
"Toolpath Optimizer" (PREMIUM), post-processes a RobotTarget list so it runs cleaner on the real arm. Four toggle-able tiers, applied in the order D → A+B → C: D. Optimize order, reorder moveable targets (nearest-neighbor + 2-opt) to cut travel. Non-motion steps (gripper/wait/IO) pin in place as fences, so a pick/place program is reordered only WITHIN each fence segment (it never scrambles a pick away from its place). A. Relieve singular, for each target, pick the IK branch farthest from the wrist singularity (|J5|→0); if the pose is inherently flat-wristed, tilt the tool the minimum amount (up to Max Tilt) to clear it. A round vacuum cup tolerates a few degrees of tilt for free. B. Smooth posture, choose IK branches that minimize joint travel between consecutive targets, so the wrist stops flopping between approach and pick. C. Avoid obstacles, BETA. Detect TCP-path collisions with obstacle meshes and insert a lift-and-detour over them. Detection covers the TOOL-TIP PATH ONLY, not the swept arm body, treat as an assist, validate before trusting. License-gated: on the free tier it passes targets through unchanged with a notice. A and B share one forward pass (both are IK-branch selection); their costs are combined.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list to optimize. |
Relieve Singularities (A)Boolean | Tier A: branch-select away from the wrist singularity; tilt the tool minimally if the pose is inherently flat-wristed. |
Wrist Clearance (Wc)Number | Tier A: keep |J5| at least this many degrees away from 0 (the wrist singularity). Default 8. |
Max Tilt (Mt)Number | Tier A: max tool tilt (deg) allowed to clear a singularity. 0 = branch-select only, never tilt. Default 12. |
Smooth Posture (B)Boolean | Tier B: keep consecutive targets in the same IK branch (minimize joint travel / wrist flopping). |
Avoid Obstacles (C)Boolean | Tier C (BETA): detect tool-tip path collisions with the Obstacles and detour over them. Tool-tip path only, not the full arm sweep. |
Obstacles (Obs)Mesh | Tier C: obstacle meshes (world frame). Used only when Avoid Obstacles is on. |
Optimize Order (D)Boolean | Tier D: reorder moveable targets (nearest-neighbor + 2-opt) to cut travel. Non-motion steps stay pinned as fences. |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component to use another model. |
Payload (Pay)Mesh | Tier C (optional): geometry of an object the gripper PICKS UP, positioned where it sits at the pick. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Optimized RobotTarget list. |
Status (S)Text | One-line summary of what each tier did. |
Report (Rp)Text | Per-action notes (singularities relieved, tilts, detours). |
Tilted Frames (Tf)Plane | Tier A: tool frames that were tilted to clear a singularity (for inspection). |
Utilities
3Pt Plane (3Pt)
Build a Plane from three points (origin, +X reference, +Y reference).
"Lite6 3Pt Plane", builds a Plane from three points: origin, a point along the desired +X axis, and a point in the +Y half-plane (used to orient Y).
Inputs
| Name | Description |
|---|---|
Origin (O)Point | Plane origin. |
X Ref (X)Point | Point along the desired +X axis. |
Y Ref (Y)Point | Point in the desired +Y half-plane (defines Y orientation). |
Outputs
| Name | Description |
|---|---|
Plane (P)Plane | Constructed plane. |
Analog Output (AO)
Drive an analog output pin to a voltage (controller or tool side).
"Lite6 Analog Output", emits a single ANALOG_OUT target that drives a controller or tool analog output pin to a voltage. Pin range and voltage range are controller-dependent. On uFactory Lite 6, controller analog outputs (cGPIO) typically accept 0-10V; tool analog outputs (tGPIO) are usually 0-5V. The Pin Type input selects between the two. See xArm SDK set_cgpio_analog and set_tgpio_analog. Voltage is clamped to a sane [0, 10] range here; controller will further clamp to its actual hardware range.
Inputs
| Name | Description |
|---|---|
Pin (P)Integer | Analog output pin index (0-based). |
Voltage (V)Number | Output voltage (0-10V). Tool AO is typically clamped to 0-5V by the controller. |
Tool Side (Tool)Boolean | True = tool analog out (set_tgpio_analog); false = controller analog out (set_cgpio_analog). |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | RobotTarget carrying the analog-out command. |
Analysis (Anlz)
Per-target joint values + warnings for limits, singularities, and axis flips. Double-click for graphical view.
"Lite6 Analysis", exposes per-target joint values for plotting and flags toolpath problems that would cause the real robot to stop or misbehave. Analysis. Per-target checks: • **Joint limit**, Lite 6 joint values exceed the URDF-defined hardware ranges. • **Wrist singularity**, J5 close to 0 (J4 and J6 become coaxial; arm loses one DOF and IK becomes ill-conditioned, often causing axis-flip jumps). • **Elbow singularity**, J3 near full extension (cos(J3) close to 1, arm fully outstretched, Jacobian rank drops). • **Shoulder singularity**, TCP close to the J1 vertical axis (small XY radius from base), J1 becomes ill-defined and small Cartesian motions need huge J1 swings. Between-target check: • **Axis flip**, any joint changes by more than the Flip Threshold (degrees) between consecutive targets. Often signals an IK reconfiguration that the real arm can't follow at speed. Outputs joint values as six lists (one per joint, in degrees). Wire each into a Quick Graph for the classic per-axis plot, or use the Graph Curves output for an in-viewport preview polyline (joint deg vs target index, scaled to fit a unit box).
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTarget. |
Wrist Singularity (deg) (Ws)Number | Warn when |J5| is below this many degrees. Default 5. |
Elbow Singularity (deg) (Es)Number | Warn when |J3| is within this many degrees of 0 (fully extended). Default 5. |
Shoulder Singularity (mm) (Ss)Number | Warn when TCP's XY radius from base is below this. Default 30. |
Flip Threshold (deg) (Ft)Number | Warn when any joint changes by more than this between consecutive targets. Default 90. |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
J1 (deg) (J1)Number | J1 angle per target. |
J2 (deg) (J2)Number | J2 angle per target. |
J3 (deg) (J3)Number | J3 angle per target. |
J4 (deg) (J4)Number | J4 angle per target. |
J5 (deg) (J5)Number | J5 angle per target. |
J6 (deg) (J6)Number | J6 angle per target. |
Warnings (W)Text | One entry per target. 'OK' or comma-separated problem flags. |
Graph Curves (G)Curve | 6 polylines (one per joint), joint deg vs target index. For in-viewport preview. |
Summary (S)Text | Counts of each warning type across the toolpath. |
Approach / Retract (AppRet)
Insert LIN approach/retract moves at the path ends. Direction selects the offset source: Global (project onto a safe plane), Tool axis (along each target's local tool axis), or Path tangent (along the toolpath direction).
"Approach / Retract", inserts LIN approach/retract moves around the first/last Cartesian target of a toolpath. A single Direction selector chooses how the approach/retract offset vector is derived, consolidating three former components: • "Global" (formerly Safe Plane), projects the first/last TCP origin onto a single global safe plane. • "Tool axis" (formerly Tool Axis Offset), offsets along each target's local tool axis (its +Z, negated), so the move sits ABOVE the target. Respects per-target tool tilt. • "Path tangent" (formerly Tangential Offset), offsets along the local toolpath direction (first→second, prev→last), so entry/exit runs along the path (drag knife, welding lead-in, etc.). In every mode the inserted moves are LIN (straight-line Cartesian travel) and preserve the anchor target's orientation, SpeedPct and ToolOffset. IK is re-run with the anchor's joints as seed; if IK fails the move is dropped with a warning. Backward compatibility: the three original components still exist (hidden) so old .ghx files keep loading. New graphs should use this component.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTarget. |
Direction (Mode)Text | RIGHT-CLICK the component to pick the direction, shown on its face: Global (project onto the Safe Plane), |
Distance (Dist)Number | Lead-in / lead-out distance in mm (wire your slider HERE, e.g. 200). Used by \ |
Approach (A)Boolean | Insert approach LIN before first Cartesian target. |
Retract (R)Boolean | Append retract LIN after last Cartesian target. |
Safe Plane (Safe)Plane | \ |
Robot (Rob)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets with approach/retract moves inserted. |
Status (S)Text | What was inserted. |
Blend Radius (Blend)
Stamp a per-target blend radius (mm) for smooth continuous-velocity motion. Negative = stop at waypoint; 0 = sharp; >0 = arc blend.
"Lite6 Blend Radius", stamps a blend radius onto every target in a list, so the generated code emits set_position(..., radius=R) for continuous-velocity blending between waypoints. Semantics (from uFactory Studio motion characteristics): Radius < 0 → robot decelerates to zero at each waypoint (sharp stop) Radius = 0 → sharp corner, but continuous motion (no smoothing) Radius > 0 → circular blend with that radius, fastest smooth motion Recommended: 1-5 mm for tight toolpaths, 10-50 mm for sweeping paths.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list. |
Radius (R)Number | Blend radius in mm. <0 stop, 0 sharp, >0 smooth arc. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets with the blend radius stamped on every entry. |
Status (S)Text | Summary. |
Bounds (Bnd)
Safety filter: warn / clip / drop targets outside an XYZ workspace box.
"Lite6 Bounds", safety guardrail. Filter or clip Cartesian targets that fall outside a user-defined XYZ workspace box. Useful for hardware-protection, keep the tool away from the workpiece edge, keep the spindle off the fixture, etc. Modes: "warn", pass everything through, but warn for each violator (default). "clip", clamp the offending coordinate into the box, re-IK is NOT done (use Lite6 Cartesian Offset etc. to re-IK if needed). "drop", silently remove the violator from the output list.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list. |
Bounds (B)Box | Workspace box (world frame). Targets with TCP outside the box are flagged. |
Mode (M)Text | RIGHT-CLICK the component to pick the mode (warn / clip / drop), shown on its face. (Advanced: wire the text, or 0=warn, 1=clip, 2=drop; wired overrides.) |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Filtered targets. |
Violations (V)Integer | Count of targets that fell outside the box. |
Status (S)Text | Summary. |
Cartesian Offset (Off)
Translate all Cartesian target planes by a vector in base frame.
"Lite6 Cartesian Offset", translates every Cartesian target's TargetPlane and ViaPlane by a vector in robot base coordinates, and re-runs IK with prior joints as seed. Use cases: nudge an entire toolpath by a small delta (e.g. "everything 5mm higher in Z"), batch a stack of identical operations at different heights, or compensate for a measured fixture offset without re-authoring the path. Non-Cartesian targets (WAIT, WAIT_FOR_DI, DIGITAL_OUT, pure-joint PTP) pass through unchanged.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTarget. |
Offset (V)Vector | Translation in base frame (mm). Default zero = passthrough. |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets with planes translated and joints re-IK'd. |
Reseeded (R)Integer | Count of Cartesian targets whose IK was re-run. |
Status (S)Text | Summary. |
Collision (Col)
Flag targets where robot links collide with themselves or world meshes.
"Lite6 Collision", checks each target for likely robot self-collisions and (if you provide obstacle meshes) for collisions with the world. Conservative model: each link is a sphere chain along the kinematic frames; obstacles are treated as hard meshes via Mesh.ClosestPoint. False positives are possible (sphere model is rough); false negatives only occur when something escapes the sphere radius, pick a Link Radius that comfortably wraps the real link. Wire upstream of Lite6 Code / Live Send. If any target collides, the script downstream should NOT run unmodified. Use Lite6 Analysis alongside for joint- limit + singularity checks; both together catch most "shouldn't have moved there" classes.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list. |
Obstacles (Obs)Mesh | Optional world-frame obstacle meshes (table, fixture, wall, part). A target is flagged |
Clearance (Cl)Number | Obstacle safety gap in mm, flag when the arm comes within this distance of an Obstacle mesh. |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot to use another model. |
Outputs
| Name | Description |
|---|---|
Collisions (C)Boolean | Per-target collision flag (true = collides). |
Details (D)Text | Per-target message describing which links/obstacles collide. |
Total (N)Integer | Count of colliding targets. |
Status (S)Text | Summary. |
Collision Sens (Coll)
Set the controllers collision-detection sensitivity (0=off, 5=highest). Place at the start of a sequence.
"Lite6 Collision Sens", emit arm.set_collision_sensitivity(level) once. xArm controllers accept 0-5: 0 = off (no protection), 1 = low (less likely to false trigger), 5 = high (very twitchy). uFactory recommends 3 as default; lower it if you're carrying load or doing fast moves that the SDK mis-reads as collisions.
Inputs
| Name | Description |
|---|---|
Level (L)Integer | Collision sensitivity 0-5 (0=off, 5=high). Default 3. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | RobotTarget, emits set_collision_sensitivity when run through codegen. |
Counter (Cnt)
Controller-side counter: reset / increment / read.
"Lite6 Counter", emit a counter command (reset / increment / read). Codegen emits the appropriate xArm SDK call. Useful for "do this N times" or "send signal every K cycles" patterns inside the controller without extra logic. RobotTarget storage: WaitDigitalPin = action code: 0 = reset to value, 1 = +1, 2 = no-op (read-only) WaitSeconds = initial value (for reset action)
Inputs
| Name | Description |
|---|---|
Action (A)Text | One of: reset | increment | read. |
Value (V)Number | Initial value for reset action (ignored otherwise). Default 0. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | Counter command target. |
Deconstruct Target (Decon)
Crack a RobotTarget open into parallel lists, TargetPlanes (the pose geometry), Motion type, joints, and Tag. The robot-target version of Grasshopper's Deconstruct; use it to draw/measure the target frames or feed their parts downstream.
"Lite6 Extract", pull planes / joints / motion type / tag out of a target list as parallel lists. Pairs with Lite6 Tag for "which one is the problem" debugging.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list. |
Outputs
| Name | Description |
|---|---|
TargetPlanes (P)Plane | TargetPlane per target (Plane.Unset if none). |
Motions (M)Text | Motion type as string per target. |
Joints (deg) (J)Text | Per-target joints rendered as 'a, b, c, ...°'. |
Tags (Tag)Text | Tag per target (empty if untagged). |
Digital Out (DO)
Drive a controller (default) or tool digital output pin to a value.
"Lite6 Digital Out", drive a digital output pin to a value. Defaults to the CONTROLLER box outputs (CO, set_cgpio_digital, pins 0-7); set Tool = true for the tool-flange outputs (DO, set_tgpio_digital, pins 0-1). For arbitrary I/O (relays, valves, lights, sensors); independent of the Pose component's gripper toggle. Code-gen: arm.set_cgpio_digital(pin, value) (controller) / set_tgpio_digital (tool). G-code: M62/M63 P<pin> (controller bank).
Inputs
| Name | Description |
|---|---|
Pin (P)Integer | Digital output pin index (0-based). Controller box: 0-7. Tool flange: 0-1. |
Value (V)Boolean | Value to set (true = high / 1, false = low / 0). |
Tool (Tl)Boolean | Output bank: false (default) = controller box (CO / set_cgpio_digital, pins 0-7); |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | Lite6 digital-output command. |
Frame (Frame)
Relocate a whole program to where your part actually sits: give the part's base plane and every target moves with it. Design once at the origin, then drop it onto the real fixture.
"Lite6 Frame", re-interprets a list of RobotTargets as if their plane targets had been authored in a local work-coordinate frame, and outputs new targets in robot base (world) coordinates. Typical workflow: the user designs a toolpath on a part (e.g. a hole pattern on a fixture) in its own coordinate system, then wires `[targets] → Lite6 Frame [base = where the part sits in robot world] → motion list`. Lets users physically reposition the fixture without re-authoring the toolpath. For Cartesian targets (PTP/LIN with a TargetPlane, or CIR with a ViaPlane), the planes are mapped from local→world via Transform.PlaneToPlane(WorldXY, Base), and IK is re-run with the previous joints as seed. Pure-joint targets (Pose-only PTP), WAIT, WAIT_FOR_DI, and DIGITAL_OUT are passed through unchanged, joint poses are not frame-dependent and utility commands have no spatial component. On IK failure for a transformed target: warns and KEEPS the original joints (so the script still emits SOMETHING and the user gets a clear error per-target, rather than the whole list silently breaking).
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTarget authored in a local frame. |
Base (B)Plane | Where the local frame's WorldXY sits in robot base coords. Default WorldXY = pass-through. |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets with planes mapped into world and joints re-IK'd from prior joints as seed. |
Status (S)Text | Per-target IK status; empty if all passthrough or all succeeded. |
Reseeded (R)Integer | Count of Cartesian targets whose IK was re-run. |
IO When (IoWhen)
Set a digital output when the TCP is within tolerance of a position. Controller-side trigger.
"Lite6 IO When", set digital IO when TCP is within tolerance of a target point. Controller-side trigger; fires once per pass through the position. uFactory Blockly equivalent: "Set I/O when (X, Y, Z, tolerance)". RobotTarget storage: TargetPlane.Origin = trigger XYZ WaitSeconds = tolerance in mm DigitalOutPin = IO pin DigitalOutValue = value when triggered WaitDigitalValue = tool side flag (true = tool, false = controller)
Inputs
| Name | Description |
|---|---|
Trigger Point (P)Point | TCP world position that triggers the IO. |
Tolerance (Tol)Number | Distance from trigger point that counts as 'reached', in mm. |
Pin (Pin)Integer | Digital output pin to set. |
Value (V)Boolean | Value to set when triggered. |
Tool Side (Tool)Boolean | True = tool digital out, false = controller digital out. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | IO-when command target. |
Info (Info)
Show the installed Egret plugin version, build date, and assembly path.
"Info", drop on any canvas to read the installed Egret version, build date, and assembly path. Useful for sanity-checking "is the new version actually loaded" after copying a new .gha into Grasshopper's Libraries folder and restarting Rhino.
Outputs
| Name | Description |
|---|---|
Name (N)Text | Plugin name. |
Version (V)Text | Semantic version (sourced from assembly metadata). |
Build Date (D)Text | UTC timestamp the installed .gha was last written. |
Author (A)Text | Plugin author. |
Description (Desc)Text | Plugin description. |
Assembly Path (P)Text | Filesystem path of the loaded .gha, useful for confirming Rhino picked up the file you expected. |
Orient Plane (Orient)
Rotate each plane around its origin so its -X axis aims at a target point.
"Lite6 Orient Plane", rotates each input plane around its origin so its -X axis points at a target point. Useful for milling, spraying, surface-following, and any process where the tool must aim at a feature. Convention: the -X axis of the plane (the "back" of the tool frame) is aimed at the target. Tool +Z (typically the tool axis) and tool +Y (typically the feed direction) are kept as orthogonal as possible to the original.
Inputs
| Name | Description |
|---|---|
Planes (P)Plane | Planes to reorient. |
Target (T)Point | Point the -X axis of each plane should aim at. |
Outputs
| Name | Description |
|---|---|
Planes (P)Plane | Reoriented planes. |
Path Optimizer (Opt)
Reorder LIN/PTP targets to minimize total travel distance (2-opt).
"Lite6 Path Optimizer", reorders a list of LIN/PTP targets to minimize total travel distance (and as a proxy, total program time). Nearest-neighbor seed followed by 2-opt improvement until no further reduction or budget hit. Cost model: Euclidean TCP-origin distance between consecutive targets (resolved via TargetPlane else Forward(joints)). Motion type and SpeedPct are ignored during optimization, the goal is shorter wire-distance, which corresponds well to shorter wall-clock for the dominant LIN-heavy case. Pair with `Lite6 Time Estimate` to compare before/after. Honors a Locked Range so commands that must stay in place (gripper actions, digital outputs, waits, start/end of program, tool changes) are not reordered. Anything OUTSIDE the optimization range is preserved at its original position; only the in-range targets are permuted. Non-motion commands (WAIT, DIGITAL_OUT, GRIPPER_CMD, etc.) inside the range also stay pinned at their original indices, only PTP/LIN/CIR are moved.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list. |
Start (Sb)Integer | Optimize from this index onward (inclusive). Default 0. |
End (Eb)Integer | Optimize up to this index (inclusive). Default = last index. |
Max Iters (It)Integer | Maximum 2-opt iterations. Default 2000. Each iteration scans for one improving swap. |
Closed (Cl)Boolean | Treat path as a closed tour (returns to start). Default false (open path). |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Reordered RobotTarget list (same length as input). |
Order (O)Integer | Per-output-position original index, so callers can map auxiliary lists. |
Distance Before (Db)Number | Total inter-target Euclidean distance in mm before optimization. |
Distance After (Da)Number | Total inter-target Euclidean distance in mm after optimization. |
Status (S)Text | Iterations performed + improvement summary. |
RPY Frame (RPY)
Build a coordinate frame (plane) from X/Y/Z (mm) + A/B/C (deg, uFactory Roll-Pitch-Yaw). Wire into a Robot's Root (mounting frame) OR a Frame's Base (work coordinate system).
"RPY Frame", builds a coordinate frame (plane) from typed X/Y/Z (mm) + A/B/C (deg), using the uFactory Roll-Pitch-Yaw convention. It is role-neutral: wire its output wherever you need a frame defined by numbers, the destination decides what it MEANS: • into a Robot's Root (Rt) → the robot MOUNTING frame (e.g. floor = 0/0, ceiling = A 180). • into a Frame's Base (B) → the WORK / base coordinate system (e.g. a 3-point touch-off origin like -275.2, -123.7, -30.53, 3.92°, 0, 0). A/B/C follow uFactory Roll-Pitch-Yaw (ZYX intrinsic Euler): A = roll about X, B = pitch about Y, C = yaw about Z, applied as Rz(C)·Ry(B)·Rx(A). Same convention the code generators and Custom Tool use, so the numbers you type here match the controller.
Inputs
| Name | Description |
|---|---|
X (X)Number | Origin X in mm. |
Y (Y)Number | Origin Y in mm. |
Z (Z)Number | Origin Z in mm. |
A (A)Number | Roll in degrees (rotation about X). |
B (B)Number | Pitch in degrees (rotation about Y). |
C (C)Number | Yaw in degrees (rotation about Z). |
Outputs
| Name | Description |
|---|---|
Frame (F)Plane | Coordinate frame. Wire into a Robot's Root (Rt) for a mount, or a Frame's Base (B) for a work coordinate system. |
Repeat (Rep)
Concatenate N copies of a target list (e.g. run a sub-program once per piece). Same copying as Grasshopper's native Duplicate Data, the difference is the optional Tag Index (Idx), which suffixes each copy's Tag with _rep<i> so Deconstruct Target / Analysis / Code can tell the cycles apart. Without Idx, Duplicate Data does the same job.
"Lite6 Repeat", concatenate N copies of a target list. Trivial but commonly needed for production-line, per-piece, or per-segment patterns where the same sub-sequence runs multiple times. If Tag a copy index is on, each repetition gets its tag suffix '_rep' so downstream Extract / Analysis can distinguish copies.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list to repeat. |
Count (N)Integer | Number of repetitions (default 2, min 1). |
Tag Index (Idx)Boolean | Append _rep<i> to each copy's Tag (rep0, rep1, …) so downstream Extract / Analysis / Code |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Repeated target list. |
Total (N)Integer | Length of the output list. |
Reverse (Rev)
Reverse a target list (for retrace / return-path workflows).
"Lite6 Reverse", return path generator. Reverses a target list so the robot retraces its steps. Useful for go-and-return patterns; pair with Lite6 Repeat for ping-pong cycles.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list to reverse. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Reversed list. |
Safe Plane (Safe)
Prepend/append approach + retract LIN moves above the first/last Cartesian target.
"Lite6 Safe Plane", wraps a toolpath with approach/retract LIN moves so the robot enters and exits the workpiece from a known clear height. Behavior: finds the first Cartesian target with a TargetPlane and prepends a LIN move whose plane has the same orientation but origin projected onto the safe plane (along the safe plane's Z axis). Similarly appends a retract LIN after the last Cartesian target. Inserted moves carry the same SpeedPct as their neighbor, and IK is run with the neighbor's joints as seed. If there are NO Cartesian targets (e.g. all WAIT/joint), the component is a no-op, there's no TCP frame to project from.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTarget. |
Safe Plane (Safe)Plane | Plane the TCP is projected onto for approach/retract moves. Default WorldXY at Z=200mm. |
Approach (A)Boolean | Insert approach LIN before first Cartesian target. |
Retract (R)Boolean | Append retract LIN after last Cartesian target. |
Robot (Rob)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets with approach/retract moves inserted. |
Status (S)Text | What was inserted. |
Self Test (Test)
Run internal smoke checks (FK / IK roundtrip, mesh load, license state) and report pass/fail. Useful after install / upgrade / keypair rotation.
"Self Test", drop on any canvas to run a battery of internal smoke checks and surface a pass/fail report. Useful for verifying the install isn't broken after a Rhino upgrade, a .gha reinstall, or a keypair rotation. Checks (run on the wired robot model, default Lite 6): 1. Forward kinematics, FK at home pose returns a valid plane. 2. FK roundtrip, Forward(known joints) at a known config matches a manually-computed reference within ε. 3. IK convergence, Inverse on a workspace-center plane converges. 4. IK roundtrip, IK(FK(seed)) returns joints close to seed. 5. Joint-limit guard, WithinLimits correctly accepts in-range joints and rejects out-of-range. 6. Embedded mesh load, XArmMeshes.TryGetLinkMeshes returns non-null for the wired model. 7. License state, LicenseGate.GetStatus returns one of the expected states (FreeNoToken / Active / Expired / etc.), informational. 8. Document context, the picker walker (ResolveOrDocumentDefault) can find at least the default model. Outputs: Pass (P), bool, true if all CRITICAL checks pass. License state is informational and never fails the suite. Report (R), multi-line text summary suitable for piping into a Panel. Failed (F), number of failed checks (0 if all pass).
Inputs
| Name | Description |
|---|---|
Run (R)Boolean | Set to true to run the suite. Stays inert otherwise (avoids re-running on every canvas redraw). |
Robot (Rob)Generic | Optional, defaults to Lite 6. Wire a Robot component to test against a specific model. |
Outputs
| Name | Description |
|---|---|
Pass (P)Boolean | True if all critical checks passed. |
Report (R)Text | Multi-line report, one '✓' or '✗' line per check, plus a summary footer. |
Failed (F)Integer | Count of failed checks (0 = all pass). |
Tag (Tag)
Stamp a string tag onto every target in a list (or auto-number if Tag is empty).
"Lite6 Tag", stamp a string tag onto every target in a list. Lite6 Extract pulls the tags back out alongside the planes/joints for "which target was the problem" debugging. Auto-numbered tags if the Tag input is empty.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list. |
Tag (Tag)Text | Tag prefix. Empty = auto-number each target by index. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Tagged targets. |
Tangential Offset (TanOff)
Insert LIN approach/retract moves along the toolpath tangent at the first/last Cartesian target. Use when the tool must enter / exit along the path direction (drag knife, welding lead-in, etc.) rather than perpendicular to the surface.
"Tangential Offset", inserts LIN approach/retract moves along the TOOLPATH TANGENT at the first/last Cartesian target. Differs from: • Safe Plane, offsets in a single global up direction (one shared normal for all approach/retract). • Tool Axis Offset, offsets along each target's local tool +Z (per-target normal). Used when the tool tilts across the path. • Tangential Offset, offsets along the local toolpath direction itself. Use cases: drag-knife cutting (entry/exit along the cut line, not above it), arc-welding lead-in / lead-out moves, threaded-tap entry, vibrating-blade laminar entry. Anywhere the tool must enter or exit "in the path direction" rather than perpendicular to the work surface. Tangent direction: • At first Cartesian target → vector from first to the next Cartesian target. Approach pose sits at (first.Origin − tangent × distance), preserving the first target's orientation. • At last Cartesian target → vector from the previous Cartesian target to last. Retract pose sits at (last.Origin + tangent × distance), preserving the last target's orientation. Inserted moves are LIN, straight-line travel in Cartesian space, so the tool enters/exits along a real geometric line, not the joint-space PTP arc.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTarget. |
Offset (D)Number | Distance to offset along the tangent direction (mm). Default 20 mm. |
Approach (A)Boolean | Insert approach LIN before first Cartesian target. |
Retract (R)Boolean | Append retract LIN after last Cartesian target. |
Robot (Rob)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets with approach/retract moves inserted. |
Status (S)Text | What was inserted. |
Target Info (TInfo)
Break out one RobotTarget into its component fields (joints, plane, motion type, speed, tag, etc.). Companion to Stage.Tc, wire Stage's Current Target output here for live inspection while scrubbing.
"Target Info", inspector for a single RobotTarget. Pairs naturally with Stage's Current Target (Tc) output: wire a slider + Stage + Target Info to see exactly what target the scrubbed pose contains. Differs from Extract (which takes a LIST and returns parallel lists), this takes ONE target and surfaces the same fields as scalar outputs, plus a multi-line Summary text suitable for piping into a Panel.
Inputs
| Name | Description |
|---|---|
Target (T)Generic | Single RobotTarget to inspect. |
Outputs
| Name | Description |
|---|---|
Joints (deg) (J)Number | Joint angles in degrees. Length matches the source target's robot DOF (5 / 6 / 7). |
Motion (M)Text | Motion type as a string (PTP / LIN / CIR / WAIT / DIGITAL_OUT / GRIPPER_CMD / ...). |
Speed % (Sp)Number | Speed as a percentage (1-100). |
Target Plane (P)Plane | Cartesian TCP target plane. Plane.Unset for joint-only or non-motion targets. |
Tool Offset (Tool)Plane | TCP offset in flange frame. Plane.Unset if no tool stamped. |
Tag (Tag)Text | Tag string (from Tag component). Empty if untagged. |
Summary (S)Text | Multi-line human-readable summary of every field on the target. |
Time Estimate (Time)
Estimate per-target and total program execution time in seconds.
"Lite6 Time Estimate", predicts execution time for a target list. Per-target seconds + program total + formatted H:MM:SS. Honors SpeedPct, MotionType, and BlendRadius (no settle when blending continues past a waypoint). LIN/CIR distances are computed from TargetPlane when present, else Forward(joints). Estimates ignore controller acceleration ramps, planning latency, and the real time uFactory takes to switch motion modes; treat them as lower bounds that get within ~10-20% of wall-clock for steady toolpaths. The Settle input is the per-stop pad that absorbs decel + comm, tune by comparing one real run. Useful for batch-cycle planning ("does this program fit in N seconds?") and for picking blend radii to hit a throughput target.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list. |
Joint Speed Max (Js)Number | Max joint speed at 100% in deg/s. Default 180 (Lite 6 spec). |
Linear Speed Max (Ls)Number | Max TCP linear speed at 100% in mm/s. Default 500 (Lite 6 spec). |
Settle (St)Number | Per-stop settle/decel pad in seconds. Skipped when BlendRadius > 0. Default 0.15. |
Cmd Latency (Cl)Number | Round-trip latency per non-motion command (IO, gripper, mode) in seconds. Default 0.05. |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Per Target (P)Number | Seconds per target (parallel to input list). |
Cumulative (Cu)Number | Running total in seconds after each target. |
Total (Tot)Number | Total program duration in seconds. |
HMS (H)Text | Total formatted as H:MM:SS. |
Status (S)Text | Per-class breakdown + caveats (WAIT_FOR_DI durations are unknown). |
Wait (Wait)
Pause the program for a given number of seconds.
"Lite6 Wait", pause for a given number of seconds. Code-gen emits time.sleep(seconds). No robot motion. Use to dwell at a pose for curing, settling, photographing, etc.
Inputs
| Name | Description |
|---|---|
Seconds (S)Number | Pause duration in seconds. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | Lite6 wait command (flows like a target, wire into a list with motion targets). |
Wait For DI (WaitDI)
Pause until a digital input pin reads the expected value.
"Lite6 Wait For Digital", block program execution until a digital input pin reads the expected value. Code-gen emits a polling loop on arm.get_tgpio_digital(pin).
Inputs
| Name | Description |
|---|---|
Pin (P)Integer | Digital input pin index (0-based). Lite 6 tool I/O typically 0-1. |
Value (V)Boolean | Value to wait for (true = high / 1, false = low / 0). |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | Lite6 wait-for-digital command. |
Tools
BIO Gripper (Bio)
uFactory BIO gripper open/close command.
"Lite6 BIO Gripper", uFactory's pneumatic-style two-state gripper. Open or close via arm.set_bio_gripper_status. Suction-cup-friendly, fast cycle. Codegen emits the appropriate set_bio_gripper_status call. RobotTarget storage: WaitDigitalPin = 0 (encodes BIO type) WaitDigitalValue = true (open) / false (close)
Inputs
| Name | Description |
|---|---|
Open (O)Boolean | True = open, False = close. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | BIO gripper command target. |
Change Tool (Change)
Stamp the named state of a Multi-State Tool onto a target list.
"Lite6 Change Tool", stamps a named tool state onto every target in a list. Effectively a Custom Tool whose offset comes from a Multi-State Tool's named state.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | Target list to stamp. |
Tool (Tool)Generic | Multi-State Tool definition. |
State (S)Text | State name to apply. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets with the tool state stamped. |
Status (Stat)Text | Summary. |
Gripper (Grip)
Unified gripper command. Type = BIO / Robotiq / Vacuum; only that type's inputs apply. BIO: Open. Robotiq: Position(0=open,255=closed)/Force/Speed (untested on real hardware). Vacuum: On + Timeout.
"Gripper", unified gripper command. Pick the Type (BIO / Robotiq / Vacuum); only that type's inputs apply. Replaces the three separate gripper command components (which are now hidden). Same RobotTarget encoding as before (WaitDigitalPin 0/1/2 = BIO/Robotiq/Vacuum). BIO, Open (true=open, false=close). Robotiq, Position 0(open)-255(closed), Force 0-255, Speed 0-255. (UNTESTED on real hw.) Vacuum, On (true=suction, false=release), Timeout seconds (wait-stable).
Inputs
| Name | Description |
|---|---|
Type (Ty)Text | RIGHT-CLICK the component to pick the gripper type (BIO / Robotiq / Vacuum), the choice shows on its face. (Advanced: wire the text name, or a number 0=BIO, 1=Robotiq, 2=Vacuum; a wired value overrides the right-click pick.) |
Open/On (O)Boolean | BIO: true=open, false=close. Vacuum: true=suction on, false=release. (Ignored for Robotiq.) |
Position (P)Integer | Robotiq only: 0=fully open, 255=fully closed. |
Force (F)Integer | Robotiq only: grip force 0-255. |
Speed (Sp)Integer | Robotiq only: open/close speed 0-255. |
Timeout (To)Number | Vacuum only: seconds to wait for pressure to stabilize (0 = don't wait). |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | Gripper command target. |
Gripper Tool (GripTool)
Two-finger gripper preset: draws the tool on J6, sets the TCP at the jaw line, and stamps that offset onto your targets.
"Gripper Tool", a two-finger parallel-jaw gripper preset. Draws a body block plus two jaws on the flange, sets the TCP at the jaw line, and stamps that offset onto every target so downstream code/sim work at the grip point. Pair with the BIO Gripper command component (Open input) to actually open/close it on the real arm.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | Optional list of RobotTarget to stamp with the gripper TCP. Leave empty to use the tool just for the picture. |
Opening (O)Number | Jaw gap in mm (distance between the two fingers). Default 40. |
TCP Length (L)Number | Flange-to-grip-point distance in mm = the TCP offset along flange +Z. Default 83.6 (the uFactory Lite 6 gripper; matches Studio's tool coordinate). |
Real Mesh (Real)Boolean | On = draw the actual uFactory gripper CAD model (when available for the canvas robot); off = simple parametric jaws driven by Opening. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets stamped with the gripper TCP offset (empty if none supplied). |
Tool Meshes (M)Mesh | Gripper geometry in the flange frame, wire into Lite6Sim's Tool input. |
TCP Plane (Tcp)Plane | The tool's working point in the flange frame (jaw line). |
Status (S)Text | Summary. |
Tool (Tl)Generic | Bundled tool (geometry + TCP + payload), wire into the Robot picker's Tool input so it |
MS Tool (MSTool)
Define a tool with multiple named TCP states (e.g. open/closed gripper).
"Lite6 MS Tool", define a tool with multiple named states. Inputs are parallel lists: each state name + its TCP plane in the flange frame. Multi-State Tool.
Inputs
| Name | Description |
|---|---|
State Names (N)Text | Parallel list of state names. |
State Planes (P)Plane | Parallel list of TCP planes in flange frame. Must match State Names length. |
Outputs
| Name | Description |
|---|---|
Tool (T)Generic | Multi-state tool definition. |
States (S)Text | Comma-separated state names. |
Robotiq (Rq)
Robotiq gripper: position 0(open)-255(closed), force 0-255, speed 0-255. Codegen emits robotiq_reset + robotiq_set_activate (once) then robotiq_set_position per step. NOTE: built to the xArm SDK API but UNTESTED on real Robotiq hardware, verify before relying on it.
"Lite6 Robotiq Gripper", uFactory's Robotiq 2F-85 / 2F-140 adapter. Position 0-255 (0=fully open, 255=fully closed), force 0-255. arm.robotiq_set_position for jog moves; arm.robotiq_close() / arm.robotiq_open() for endpoints. RobotTarget storage: WaitDigitalPin = 1 (encodes Robotiq type) WaitSeconds = position (0-255) WaitDigitalValue = unused ToolOffset.OriginX = force (0-255), OriginY = speed (0-255)
Inputs
| Name | Description |
|---|---|
Position (P)Integer | 0 = fully open, 255 = fully closed. |
Force (F)Integer | Grip force 0-255. Default 150. |
Speed (S)Integer | Open/close speed 0-255. Default 100. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | Robotiq gripper command target. |
TCP Load (TCPLoad)
Tell the controller the payload mass + center of gravity. Place at the start of a sequence.
"Lite6 TCP Load", emit a one-time arm.set_tcp_load(weight, [cog_x, cog_y, cog_z]) call. Place this target at the start of a sequence so the controller knows the payload mass + center of gravity. Improves motion smoothness and collision detection accuracy when the robot is carrying significant load. Weight is in kg (e.g. 0.5 for a 500g syringe + fixture). CoG xyz is in mm from the flange. uFactory Blockly equivalent: "Set TCP Load Weight and XYZ Offset". Overloads RobotTarget fields: WaitSeconds = weight (kg) WaitDigitalPin overloaded as int(WaitSeconds field is used only for weight here) (CoG xyz is packed via ToolOffset.Origin since we already have a Plane field.)
Inputs
| Name | Description |
|---|---|
Weight (kg)Number | Payload mass in kg. |
CoG (CoG)Point | Center of gravity in mm from flange origin. Default (0, 0, 50). |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | RobotTarget, emits set_tcp_load when run through codegen. |
Tool (Tool)
Define a tool and stamp its TCP onto your targets. Type=Custom: type X Y Z (mm) + Roll Pitch Yaw (deg) from uFactory Studio's tool-coordinate field (for a straight tool just set Z). Type=Gripper / Vacuum: built-in presets with auto mesh, TCP and payload. Set Weight (kg) for set_tcp_load. Absorbs the old Gripper Tool / Vacuum Tool presets.
"Lite6 Custom Tool", defines a Tool Center Point offset (a Plane in the flange/link6 frame) and stamps it onto a list of RobotTargets. Inputs: - Targets: the list to stamp. - Tool Plane: the TCP in the flange frame. Default WorldXY = no offset. - Tool Meshes: optional mesh(es) representing the physical tool (in flange frame). Passed through unchanged; downstream the user transforms them with the flange pose from Lite6Sim. Sim does NOT auto-render them (next cycle could). Outputs: - Targets: same list with ToolOffset stamped on every target. - Tool Meshes: passthrough of the input meshes (so it's easy to wire into a Transform). - TCP Status: short description of what was applied. Behavior in downstream components: - Lite6Sim: TCP output becomes flange * ToolOffset instead of flange alone. - Lite6Code: emits arm.set_tcp_offset([x,y,z,roll,pitch,yaw]) once in the header when any target carries a non-null ToolOffset.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTarget. |
X (X)Number | TCP offset X in mm (flange frame). |
Y (Y)Number | TCP offset Y in mm (flange frame). |
Z (Z)Number | TCP offset Z in mm, distance out along the flange axis. For a straight tool this is the only one you need. |
Roll (A)Number | Roll about X in degrees (uFactory 'A'). 0 for a straight tool. |
Pitch (B)Number | Pitch about Y in degrees (uFactory 'B'). |
Yaw (C)Number | Yaw about Z in degrees (uFactory 'C'). |
Tool Meshes (M)Mesh | Optional mesh(es) representing the tool, in the flange frame (mount at origin, tool along +Z). Passed through, wire into Stage's Tool input to see it on J6. (Custom type only.) |
Type (Ty)Text | RIGHT-CLICK the component to pick the tool type (Custom / Gripper / Vacuum), shown on its face. Custom = define TCP via X/Y/Z/RPY; Gripper/Vacuum = presets (auto mesh + TCP + payload). (Advanced: wire the text, or 0=Custom, 1=Gripper, 2=Vacuum; wired overrides.) |
Weight (Kg)Number | Tool payload mass in kg → codegen set_tcp_load. 0 = none (Custom) or the preset's known mass (Gripper 0.277, Vacuum 0.145). |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets stamped with the tool offset. |
Tool Meshes (M)Mesh | Passthrough of input meshes, wire into Transform with flange pose from Sim. |
Status (S)Text | Summary of what was applied. |
Tool (Tl)Generic | Bundled tool (geometry + TCP), wire into the Robot picker's Tool input so it travels |
Tool (TCP) (ToolTCP)
Aim the TOOL TIP (not the wrist flange) at your target planes. Tell it how far the tool sticks out and it re-solves the moves so the tip lands on each plane. Use when you drew your path at the tip, the usual case for tools like pens, nozzles, or grippers.
"Lite6 Tool (TCP)", applies a Tool Center Point offset to a list of RobotTargets, treating each Cartesian target's TargetPlane as the desired TCP location (not the flange location). Re-runs IK so the FLANGE goes wherever it needs to in order for the TCP to land on the user-supplied plane. PTP/LIN/CIR work together when the user wires a Tool into a motion component. Contrast with Lite6 Custom Tool (the other component): - Custom Tool = "stamp only". TargetPlane stays as the flange pose; IK already targeted it. TCP = flange × tool offset for Sim and codegen output only. Use this when you authored flange poses directly. - Tool (TCP) = "re-target IK". TargetPlane is treated as the TCP target. New flange target = TargetPlane × inverse(toolOffset), IK re-runs against that. Use this when you authored TCP poses (most common in CAM-style workflows). Pure-joint targets, WAIT, WAIT_FOR_DI, and DIGITAL_OUT pass through unchanged (no Cartesian target to re-IK against).
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTarget authored with TCP-centric target planes. |
Tool Plane (Tool)Plane | TCP in the flange (link6) frame. Default WorldXY = no offset, pure passthrough. |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets with TargetPlane updated to the flange pose needed for TCP to land on the original plane; tool offset stamped. |
Reseeded (R)Integer | Count of Cartesian targets whose IK was re-run. |
Status (S)Text | Summary. |
Tool Axis Offset (ToolAx)
Insert LIN approach/retract moves offset along each target's local tool axis.
"Lite6 Tool Axis Offset", inserts LIN approach/retract moves offset along EACH target's local tool axis (its +Z by default, negated for approach). Unlike Safe Plane which projects onto a single global plane, this respects per-target tool orientation, critical when the tool tilts across the path (5-axis milling, spraying, deposition onto curved surfaces). Tool Axis Offset. Approach insertion: prepend a LIN move at first-target-plane + Offset × (-toolAxis). Retract insertion: append a LIN move at last-target-plane + Offset × (-toolAxis). Tool axis defaults to each target's local Z (the tool plane's normal); for a downward-pointing tool the offset puts the approach ABOVE the target.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTarget. |
Offset (D)Number | Distance to offset along negative tool axis (mm). Default 25 mm above the target. |
Approach (A)Boolean | Insert approach LIN before first Cartesian target. |
Retract (R)Boolean | Append retract LIN after last Cartesian target. |
Robot (Rob)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets with approach/retract moves inserted. |
Status (S)Text | What was inserted. |
Vacuum (Vac)
Vacuum gripper on/off with optional wait-until-stable timeout.
"Lite6 Vacuum", uFactory vacuum gripper (suction-cup) on/off. arm.set_vacuum_gripper with optional wait-until-stable timeout. RobotTarget storage: WaitDigitalPin = 2 (encodes Vacuum type) WaitDigitalValue = true (on) / false (off) WaitSeconds = wait-stable timeout in seconds (0 = no wait)
Inputs
| Name | Description |
|---|---|
On (On)Boolean | True = suction on, False = release. |
Timeout (T)Number | Seconds to wait for pressure to stabilize. 0 = don't wait. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | Vacuum gripper command target. |
Vacuum Tool (VacTool)
Suction-cup preset: draws the cup on J6, sets the TCP at the cup face, and stamps that offset onto your targets.
"Vacuum Tool", a suction-cup preset on a stem. Draws the stem + cup on the flange, sets the TCP at the cup face, and stamps that offset onto every target. Pair with the Vacuum command component to switch suction on/off on the real arm.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | Optional list of RobotTarget to stamp with the vacuum TCP. Leave empty to use the tool just for the picture. |
Cup Diameter (D)Number | Suction cup diameter in mm. Default 25 (uFactory Lite 6 cup). |
TCP Length (L)Number | Flange-to-cup-face distance in mm = the TCP offset along flange +Z. Default 61.1 (the official uFactory Lite 6 vacuum gripper; matches Studio's tool coordinate). |
Real Mesh (Real)Boolean | On = draw the actual uFactory vacuum-gripper CAD model (when available for the canvas robot); off = simple parametric stem + cup. |
Outputs
| Name | Description |
|---|---|
Targets (T)Generic | Targets stamped with the vacuum TCP offset (empty if none supplied). |
Tool Meshes (M)Mesh | Vacuum geometry in the flange frame, wire into Lite6Sim's Tool input. |
TCP Plane (Tcp)Plane | The tool's working point in the flange frame (cup face). |
Status (S)Text | Summary. |
Tool (Tl)Generic | Bundled tool (geometry + TCP + payload), wire into the Robot picker's Tool input so it |
Visualization
Path Preview (PathPrev)
Draw the TCP toolpath in the viewport: a colored trail through every Cartesian target (PTP dotted, LIN solid, CIR arc), with optional direction arrows and tool frames. Outputs the path as a Polyline curve.
"Path Preview", draw the TCP toolpath in the Rhino viewport: a colored trail through every Cartesian target. PTP shows dotted/grey (rapid, joint- interpolated, the TCP does NOT follow this line), LIN solid/blue, CIR as the true arc/teal. Optional travel-direction arrows and per-target tool frames. Non-Cartesian commands (WAIT, DIGITAL_OUT, gripper) carry no pose and are skipped. Makes approach/retract and offset moves (Tangential / Tool Axis / Safe Plane) visible instead of inferring them from a target count. Also outputs the path as a Polyline curve you can bake.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list (output of PTP / LIN / CIR / Path Curve / offset components). |
Arrows (A)Boolean | Draw travel-direction arrows on each move. |
Frames (F)Boolean | Draw the tool plane (XYZ axes) at each target. |
Size (Sz)Number | Arrow / frame size in mm. |
Outputs
| Name | Description |
|---|---|
Path (C)Curve | Polyline through the TCP origins (Cartesian targets only). |
Points (P)Point | TCP origin per Cartesian target. |
Status (S)Text | Segment summary. |
Player (Play)
Scrub through a target list with a 0..1 slider for animation playback.
"Player", virtual playback. Drag a 0..1 slider (or animate it) and the output target scrubs through the input toolpath, lerping joint angles between adjacent motion waypoints. Wire output into Stage.T to watch the arm move through the program in the Rhino viewport. Modes: "interp", lerp joints between adjacent waypoints for smooth motion (default). "step", snap to the nearest pose-bearing target. Useful for verifying individual targets one at a time. Non-motion commands (WAIT, DIGITAL_OUT, gripper, etc.) carry no pose to interpolate. The player skips them, the arm holds the previous motion pose, matching how the real robot behaves during waits / IO. Use Time Estimate: when true, weights each segment by its estimated execution time (same model as the Time Estimate component) so slow segments take proportionally more slider travel, playback then mirrors real wall-clock proportions. When false, every segment is an equal slice of the 0..1 timeline (pure uniform-per-step playback).
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | RobotTarget list to play through. |
Time (t)Number | Normalized playback time, 0.0 = first pose, 1.0 = last pose. |
Mode (M)Text | interp = lerp between waypoints (smooth). step = snap to nearest target. Default interp. |
Use Time Estimate (Te)Boolean | If true, weight segments by per-segment duration so playback mirrors real wall-clock proportions. Default true. |
Joint Speed Max (Js)Number | (Te only) Max joint speed at 100% in deg/s. Default 180. |
Linear Speed Max (Ls)Number | (Te only) Max TCP linear speed at 100% in mm/s. Default 500. |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Target (T)Generic | Synthesized RobotTarget at the interpolated pose. Wire into Stage.T. |
Index (i)Integer | Index in the input list nearest to the current playback position. |
Segment t (St)Number | Local blend factor (0..1) within the current segment. |
Status (S)Text | Playback summary. |
Stage (Stage)
Visualize the robot, scrub the toolpath, see per-joint plots. Double-click for the Stage form. Outputs link meshes, TCP, and a passthrough Targets list.
"Stage", the canvas-level hub for visualizing a toolpath on the selected robot. Renders the arm at the last pose (or all poses overlaid, or a single scrubbed pose when its double-click form is open). Outputs link meshes, TCP plane, TCP orientation axes, status, and a passthrough Targets list for downstream Analysis / other consumers. Double-click on the canvas to open the Stage form: timeline scrubber, per-joint spark plots with limit lines, live TCP/joint readout, and (eventually) the license-activation panel.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTargets to visualize. Uses the LAST one. |
Show All (All)Boolean | If true, show all poses overlaid (ghost mode). |
Real Meshes (Real)Boolean | Show the lifelike 3D robot instead of the simple stick-figure. Turn on for a realistic preview; leave off for a faster, lighter view. (Advanced: add your own robot meshes via the Egret meshes folder, see the wiki.) |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Time (Tm)Number | Optional 0..1 scrub: wire a Number Slider with 0.0-1.0000000 to drive the arm smoothly through the program. 0 = first move, 1 = last. Interpolates BETWEEN targets (LIN/CIR travel straight in Cartesian space, PTP blends in joint space) so the arm moves continuously instead of snapping pose-to-pose. Overrides the Stage form's slider when wired. |
Edges (E)Boolean | Overlay wireframe edges on the real meshes. Off = clean shaded view (joints separated by colour); on = adds edge lines (more technical / busier). |
Tool (Tl)Mesh | Optional end-effector mesh(es) in the flange (J6) frame, e.g. from a Gripper Tool / Vacuum Tool component. Drawn attached to J6 at the live pose so you see the actual tool; its working point shows via the TCP Axes output. |
Trail (Tr)Boolean | Draw the TCP toolpath as a trail through all PTP/LIN/CIR targets, with the corners rounded by the blend radius, so you can SEE the actual path (incl. blend rounding). Off by default. |
Trail Arrows (Ar)Boolean | When Trail is on: draw travel-direction arrows on each move. Off by default (busy on dense paths). |
Trail Frames (Fr)Boolean | When Trail is on: draw the tool plane (XYZ axes) at each target. Off by default. |
Payload (Pay)Mesh | Optional picked-object mesh(es), positioned where the object sits at the pick. While the vacuum is ON (holding) the object is drawn riding the cup, so you can see the carried part. Vanishes on release. |
Hold Payload (Hld)Boolean | Force the Payload onto the gripper at the current pose, use in LIVE preview, where there are no gripper ON/OFF commands to detect a grab. Rides the part centered on the TCP. Off = use the program's vacuum/gripper commands to decide when it's held. |
Outputs
| Name | Description |
|---|---|
Robot Meshes (M)Mesh | Mesh per link, transformed to the current pose. |
TCP (TCP)Plane | Tool flange plane at the last pose. |
TCP Axes (Ax)Line | Three colored line segments at the TCP plane (X=50mm red, Y=50mm green, Z=50mm blue) for orientation visualization. |
Status (S)Text | Reachability / limit status. |
Targets (T)Generic | Input target list, passed through. Fork into Analysis or other downstream consumers without re-merging from the source. |
Current Target (Tc)Generic | The single RobotTarget Stage is currently rendering, whichever target the form's slider, the wired Time input, or the default 'last target' resolves to. Wire into Code / G-Code / Analysis to act on the scrubbed pose specifically. |
Trail (Tr)Curve | The TCP toolpath through all PTP/LIN/CIR targets, corners rounded by the blend radius. Empty unless the Trail input is on. Bake it to keep the path geometry. |
Workspace (Work)
Show how far the robot can reach: a cloud of reachable tool points plus a bounding box. Use it to check a part fits inside the working envelope before you program moves.
"Lite6 Workspace", samples the reachable TCP positions for the selected robot by sweeping the first 3 joints (the shoulder/elbow that dominate position) across their hardware limits and computing forward kinematics. Wrist joints stay at 0. Output is a point cloud you can wire into a hull / Mesh from Points / point preview. Coarse but fast: default 8 samples per joint = 8^3 = 512 points. Bump to 16 for a denser envelope (~4k points, still sub-second).
Inputs
| Name | Description |
|---|---|
Samples (N)Integer | Samples per joint (default 8 → 512 points; 16 → 4096). |
Robot (R)Generic | Optional, defaults to Lite 6. Wire a Robot component (uFactory > Utilities) to use another model. |
Outputs
| Name | Description |
|---|---|
Reachable TCP (P)Point | Sampled TCP origin positions (mm). |
Bounding Box (B)Box | Axis-aligned bounding box of the sampled cloud. |
Status (S)Text | Sample count + bbox extents. |
Output
Code (Code)
Turn your list of targets into a ready-to-run Python program for the robot (xArm Python SDK). Copy the output to a .py file and run it on a PC connected to the controller. Wire into a Panel to read it.
"Lite6 Code", takes a list of RobotTargets + robot IP + base speed, emits a Python script that uses xArm-Python-SDK to execute the sequence. The generated .py runs on a computer connected to the robot, NOT necessarily the machine running Rhino. Output is text, user saves to file or pipes.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTarget. |
IP (IP)Text | Robot IP baked into the generated script's XArmAPI(...) connect line (Lite 6 default 192.168.1.159). |
Wait (W)Boolean | Wait for each motion to complete before issuing the next (recommended). |
Robot (R)Generic | Optional uFactory robot model. Defaults to Lite 6. Used only for Forward-kinematics fallback when LIN targets have no TargetPlane. |
Outputs
| Name | Description |
|---|---|
Script (S)Text | Python script. Save as .py and run on a host that can reach the robot. |
Moves (M)Integer | Number of motion commands generated. |
G-Code Export (GCode)
Emit uFactory-dialect G-code (RS-274 / LinuxCNC-compatible) executable on any uFactory controller. (Exporter, not to be confused with the 'Import' component that reads G-code/NC in.)
"Lite6 G-Code", emits 6-axis G-code (X/Y/Z + A/B/C) from a list of RobotTargets. Output conforms to uFactory's G-code dialect (RS-274 / LinuxCNC-compatible) and runs natively on the Lite 6 controller via uFactory Studio's G-code panel. Reference: https://docs.ufactory.cc/user_manual/ufactoryStudio/6.gcode.html Mapping (uFactory-supported): PTP → G0 (rapid; X Y Z A B C) LIN → G1 (linear feed; X Y Z A B C F<linear>) CIR → two G1 segments (via, then end). G2/G3 with R or I/J/K are supported by uFactory but require a planar arc and a plane select (G17/G18/G19); non-planar 3-point robot arcs are decomposed into linear segments instead. WAIT → G4 P<seconds> WAIT_FOR_DI → emitted as a COMMENT only, uFactory G-code does not include M66 / wait-for-input. To gate on a digital input on the Lite 6, use Lite6 Code (Python) instead. DIGITAL_OUT → M62 P<pin> (on) / M63 P<pin> (off), synchronized with motion Gripper → M116 P<type> Q<action>, uFactory end-effector control, where P is the TYPE (1=Gripper, 2=Vacuum, 3=BIO), auto-set from the upstream gripper command. Vacuum: Q1=suction on, Q0=release. A/B/C are ZYX intrinsic Euler in degrees, matching xArm set_position. X/Y/Z are the target's TOOL TIP by default (so the controller's TCP/tool offset must be set to match), UNLESS "Bake Tool Offset" is on , then the tool offset is folded into X/Y/Z so they are the FLANGE and the program runs self-contained with the controller TCP at 0.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | List of RobotTarget. |
Linear Feed (Fl)Number | Feedrate for G1 (LIN) moves in mm/min. Default 6000 = 100 mm/s. |
Rapid Feed (Fr)Number | Feedrate annotation for G0 (PTP) moves in mm/min. Default 18000 = 300 mm/s. |
Header (H)Boolean | Include G90/G21 preamble and trailing M30. |
Gripper IO (G)Integer | DEPRECATED / ignored. M116's P is the end-effector TYPE (1=Gripper, 2=Vacuum, |
Robot (R)Generic | Optional uFactory robot model. Defaults to Lite 6. Used only for Forward-kinematics fallback when PTP/LIN targets have no TargetPlane. |
Bake Tool Offset (Bake)Boolean | OFF (default): X/Y/Z are the TOOL TIP, so the controller's TCP/tool offset must be set to |
Outputs
| Name | Description |
|---|---|
G-Code (G)Text | G-code text. Save as .ngc / .nc and load in uFactory Studio's G-code panel. |
Lines (L)Integer | Count of motion lines (G0/G1) emitted. |
SavSave Code (SaveCode)
Write generated Code (Python) or G-Code text to a file. Overwrite guards an existing file.
"Lite6 Save Code", write generated program text to a file on a rising-edge Save trigger. Takes the text output of either the Code Gen (Python) or G-Code component and writes it to disk, so a toolpath can be saved straight from the canvas instead of copy-pasting. An Overwrite toggle guards an existing file: OFF (default) refuses to clobber it and reports it; ON replaces it. The parent folder is created if missing. Distinct from "Save Traj", which serializes the RobotTarget list to .ltraj for round-tripping back into Grasshopper; this saves the final program you actually run on the robot.
Inputs
| Name | Description |
|---|---|
Content (C)Text | Text to write, e.g. the Code Gen (Python) or G-Code output. |
Path (P)Text | Full file path including extension (e.g. C:/jobs/part.gcode or part.py). |
Save (Go)Boolean | Set true to write. Acts on the false->true edge, so it writes once per toggle. |
Overwrite (O)Boolean | If false (default), refuse to overwrite an existing file; if true, replace it. |
Outputs
| Name | Description |
|---|---|
Status (S)Text | Result message. |
Success (OK)Boolean | True if a file was written this run. |
Save Traj (Save)
Write a RobotTarget list to a .ltraj JSON file.
"Lite6 Save Trajectory", write a RobotTarget list to a .ltraj JSON file on disk. Round-trips through Lite6 Load Trajectory. Useful for saving authored toolpaths between Rhino sessions, sharing with teammates, or feeding non-GH tools.
Inputs
| Name | Description |
|---|---|
Targets (T)Generic | Target list to save. |
Path (P)Text | File path (.ltraj recommended). |
Save (Go)Boolean | Set true to write. |
Outputs
| Name | Description |
|---|---|
Status (S)Text | Result. |
Live
Connect (Conn)
Open a persistent TCP connection to a uFactory bridge process. Output handle wires into Live State / Live Send / Drag Mode / Record.
"Lite6 Connect", opens a persistent TCP connection to the Lite6 bridge process and outputs a connection handle for downstream live-control components (Lite6 Live State, Live Send, Drag Mode, Record Trajectory). The bridge is a small daemon (shipped as egret-bridge.exe) that sits between this plugin and the xArm Python SDK. When Host is local and Auto-start is on, Connect launches it automatically (see BridgeLauncher); default host/port is 127.0.0.1:65432.
Inputs
| Name | Description |
|---|---|
Host (H)Text | Bridge host. Leave at 127.0.0.1 for the normal same-machine bridge (auto-started). Use 'mock' for the in-memory emulator (offline testing); or a remote machine's IP if you run the bridge elsewhere. |
Port (P)Integer | Bridge port (default 65432). |
Enable (On)Boolean | Toggle to open the connection. Set false to close. |
Robot IP (IP)Text | The uFactory ARM's IP address (e.g. 192.168.1.159), NOT the bridge host. Used to auto-start the bridge so it connects to your robot. Find it in uFactory Studio. |
Auto-start (Auto)Boolean | When Host is local (127.0.0.1) and no bridge is reachable, launch the bundled egret-bridge.exe automatically, no terminal needed. Reuses any bridge already running. |
Allow Motion (Move)Boolean | OFF (default) auto-starts the bridge read-only, probes work, all motion blocked. Flip ON to (re)start it motion-enabled. Only affects bridges Egret auto-started. |
Outputs
| Name | Description |
|---|---|
Connection (C)Generic | Connection handle. Wire into Live State / Live Send / etc. |
Open (Open)Boolean | True if the socket is currently open. |
Status (S)Text | Connection status / error. |
Drag Mode (Drag)
Toggle robot manual / free-drive mode. Drag the arm by hand while Live State mirrors it in Rhino.
"Lite6 Drag Mode", toggles the robot's manual / free-drive mode (mode 2 on xArm-family controllers). When on, you can physically grab the arm and move it; the controller logs joint positions but does not actively drive. Pair with Lite6 Live State to see the arm position in Rhino as you move it. Sends bridge cmd "manual_drag" with on=bool. Bridge switches mode and returns the SDK code.
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Drag (D)Boolean | True = manual mode (drag-by-hand). False = position-control mode. |
Outputs
| Name | Description |
|---|---|
Status (S)Text | Mode change status. |
Enable (Enable)
Run motion_enable + set_mode(0) + set_state(0), clears state 4/5 safety stops and puts the controller back into sport (ready) state. Wire Connect.Connection into C and toggle Go to send. Status shows the per-step SDK codes.
"Enable", clears the controller out of an emergency-stop / safety state (state 4, 5, or any non-zero) and gets it back to the sport / ready state where motion commands work. Runs the standard xArm startup sequence: motion_enable(True) → set_mode(0) → set_state(0). Use this any time you see a status reply like "code=9: emergency stop / safety state" or "code=11: controller state error". Typical triggers: • Collision detection fired and stopped the arm. • You pressed the physical or virtual E-stop. • A previous motion command failed and the controller latched. • Just powered on; controller starts in state 4. Equivalent to the "Enable" / "Set Ready" button in the xArm Studio web UI.
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Go (Go)Boolean | Set true to send the enable sequence. Edge-triggered (only fires on false→true transition). |
Outputs
| Name | Description |
|---|---|
Connection (C)Generic | Pass-through connection, present ONLY while enabled. Wire into Home / Live Send / etc. so downstream motion can't run until Enable has succeeded (a dataflow safety gate). |
Status (S)Text | Result of the last enable attempt. |
Get IO (GetIO)
Read controller + tool digital/analog IO state via bridge.
"Lite6 Get IO", polls the bridge for current digital I/O + analog input states. Wire a Timer upstream for continuous monitoring. Outputs lists indexed by pin for easy graphing / threshold-trigger workflows.
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Tick (Tk)Boolean | Trigger a poll. Wire a Timer for continuous updates. |
Outputs
| Name | Description |
|---|---|
Controller DI (cDI)Integer | Controller-side digital inputs. |
Controller DO (cDO)Integer | Controller-side digital outputs. |
Tool DI (tDI)Integer | Tool-side digital inputs. |
Controller AI (cAI)Number | Controller-side analog input voltages. |
Status (S)Text | OK or error. |
Home (Home)
Send the robot to its home (all-zero joint) pose via the bridge.
"Lite6 Home", sends the robot to its zero/home pose (all joints 0°) via the bridge. Useful as the first command after enabling motion, or as a fixture- avoidance reset between operations.
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Go (Go)Boolean | Set true to home. |
Speed (S)Number | Joint speed deg/s. Default 30. |
Robot (R)Generic | Optional Robot, sizes the home joint vector to DOF. |
Outputs
| Name | Description |
|---|---|
Status (Status)Text | Result. |
Live Jog (Jog)
Stream a target to the robot in servo mode for smooth real-time following (bridge-side servo loop, velocity-clamped). Hold Jog true to follow.
"Lite6 Live Jog", smooth real-time following via xArm servo mode (mode 1). Unlike Live Send (discrete point-to-point set_position, which stutters when streamed), Live Jog hands the bridge a continuously-updated target; a servo loop ON THE BRIDGE feeds set_servo_cartesian at ~125 Hz, interpolating toward the latest target with a velocity clamp. The result tracks your hand in real time instead of move-stop-move. Wiring: Connection + Target + a Jog toggle (+ a GH Timer or a moving Target to drive re-solves). Hold Jog true to follow; set false to stop (returns the arm to position mode). Two modes, auto-detected from the target: a JOINT target (a Pose) jogs in joint space, each joint servos to its angle (move J1 -> only J1 moves); a CARTESIAN target (has a TargetPlane, e.g. from Cartesian Target / PTP / LIN) jogs the TCP. SAFETY: servo mode has NO acceleration limit on the controller side, the bridge's velocity clamp + 0.5s deadman + floor guard are what keep it safe. Start with a LOW Speed, e-stop in hand.
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Target (T)Generic | RobotTarget to follow. A JOINT target (e.g. a Pose) jogs in joint space, each joint |
Jog (Go)Boolean | True = stream live in servo mode (drive re-solves with a Timer or a moving input). |
Speed (V)Number | Max follow speed, mm/s for Cartesian jog, deg/s for joint jog (the bridge velocity clamp). |
Outputs
| Name | Description |
|---|---|
Status (S)Text | Jog status. |
Live Send (Send)
Push a single RobotTarget to the bridge for immediate execution.
"Lite6 Live Send", pushes a single RobotTarget to the robot immediately via the bridge, no codegen step. Wire Connection + Target + a trigger. Returns the bridge's response code so you can chain "wait for completion" logic with downstream Lite6 Live State polls. PTP with joints-only → bridge cmd "move_joint" (set_servo_angle). PTP / LIN / CIR with TargetPlane → bridge cmd "move" (set_position). CIR via plane is currently sent as the END pose only (full move_circle from the bridge is a future cycle).
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Target (T)Generic | RobotTarget to send. |
Send (Go)Boolean | Set true to send. Edge-trigger with a Button. |
Wait (W)Boolean | If true, robot completes the move before the bridge replies. |
Outputs
| Name | Description |
|---|---|
Code (Code)Integer | Bridge/SDK return code (0 = OK). |
Status (S)Text | Status text. |
Live State (Live)
Poll the bridge for current robot joint/TCP/IO state. Wire a Timer upstream for continuous updates.
"Lite6 Live State", polls the bridge for the robot's current joint angles, TCP pose, and IO state. Wire a GH Timer upstream (e.g. 100ms) to get a continuously-updating digital twin in Rhino. Outputs are designed to flow into Stage (joints → see the real arm in viewport) and into Live Send (use current pose as a seed for next move).
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Connection from Lite6 Connect. |
Tick (Tk)Boolean | Trigger a poll. Wire a Timer (~100-250ms) for continuous updates. |
Outputs
| Name | Description |
|---|---|
Joints (deg) (J)Number | Current joint angles in degrees (length = robot DOF). |
TCP (TCP)Plane | Current TCP pose as a Plane. |
Target (T)Generic | RobotTarget built from current joints + TCP, wire into Stage for live mirror. |
Status (S)Text | OK or error. |
Play Recording (Play)
Load + play a controller-recorded .traj by name (xArm native trajectory). Replays straight from Grasshopper.
"Lite6 Play Recording", load + play a controller-recorded .traj by name (the xArm native 250 Hz trajectory recorded via the Record component). The file lives on the CONTROLLER, not the PC, this replays it straight from Grasshopper instead of bouncing to uFactory Studio. Bridge: load_trajectory(file) + playback_trajectory(times, double_speed). Pairs with Record (which now persists via save_record_trajectory). SAFETY: this drives the real arm through the entire recorded path. Edge- triggered (fires once on Play rising edge), low/normal speed, e-stop in hand.
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
File (F)Text | Name of the controller-saved .traj to replay (the name you gave Record's File input). |
Times (N)Integer | How many times to play the recording. |
Speed (Spd)Number | Playback speed multiplier (1 = recorded speed, 2 = double, etc). |
Play (Go)Boolean | Rising edge loads + plays the recording. SAFETY: drives the real arm through the whole path, e-stop in hand. |
Outputs
| Name | Description |
|---|---|
Status (S)Text | Playback status. |
Record (Rec)
Start / stop the controller's onboard 250Hz trajectory recorder.
"Lite6 Record", start/stop the controller's onboard 250Hz trajectory recorder. Recorded files (.traj) live on the controller. Companion to Drag Mode: enable drag, hit Record start, move the arm by hand, hit stop, playback later via xArm Studio or your own bridge calls. xArm SDK convention: max ~5 minutes per recording.
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Start (S)Boolean | Toggle: rising edge starts recording, falling edge stops + saves. |
File (F)Text | Filename to save on the controller (used when Start goes false). |
Outputs
| Name | Description |
|---|---|
Status (S)Text | Recorder status. |
Robot Info (RobotInfo)
Serial + firmware versions read from the controller via bridge.
"Lite6 Robot Info", fetch serial number + firmware versions from the controller via bridge. Mostly for confirming you're talking to the robot you think you are (fleet sanity), and for paste-into-bug-reports.
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Tick (Tk)Boolean | Trigger a query. |
Outputs
| Name | Description |
|---|---|
Serial (SN)Text | Robot serial number. |
Robot IP (IP)Text | Bridge's robot IP. |
Firmware (FW)Text | Firmware version + master/slave. |
Status (S)Text | OK / error. |
Set Mode (Mode)
Push controller mode change (0=position, 2=manual, 6=simulation, etc).
"Lite6 Set Mode", pushes arm.set_mode(N) via the bridge. 0 = position control (the default for codegen scripts) 1 = servo control (high-rate streaming, advanced) 2 = manual / free-drive (drag the arm by hand, same as Lite6 Drag Mode) 4 = joint motion (used for some streaming patterns) 6 = simulation (no physical motion)
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Mode (M)Integer | Controller mode: 0 = position control (normal moves, the usual choice); |
Apply (Go)Boolean | Set true to push. |
Outputs
| Name | Description |
|---|---|
Status (S)Text | Result. |
Set Mode/State (ModeState)
Push controller mode and/or state. Mode: 0=position, 2=manual, 6=sim. State: 0=ready, 3=pause, 4=stop. Wire only the one you want, or neither for the standard init (0/0).
"Set Mode/State", push controller mode and/or state via the bridge in one step. Replaces the separate Set Mode + Set State components (now hidden). Wire only Mode to set mode, only State to set state, or neither to push the standard init (mode 0 + state 0 = position control, ready). Mode: 0=position (normal), 1=servo, 2=manual/free-drive, 4=joint, 6=simulation. State: 0=ready (motion allowed), 3=pause, 4=stop.
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Mode (M)Integer | Controller mode: 0=position (normal moves), 1=servo, 2=manual/teach (free-drive), 6=simulation. Default 0. |
State (St)Integer | Controller state: 0=ready (motion allowed), 3=pause, 4=stop. Default 0. |
Apply (Go)Boolean | Set true to push. |
Outputs
| Name | Description |
|---|---|
Status (S)Text | Result. |
Set State (State)
Push controller state change (0=ready, 3=pause, 4=stop).
"Lite6 Set State", pushes arm.set_state(N) via the bridge. 0 = ready (motion allowed) 3 = pause 4 = stop
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
State (S)Integer | Controller state: 0 = ready / sport (motion allowed, the usual choice); |
Apply (Go)Boolean | Set true to push. |
Outputs
| Name | Description |
|---|---|
Status (Status)Text | Result. |
Stop (Stop)
SOFTWARE stop, halts motion now and sets the controller to Stop state (arm.emergency_stop). NOT a hardware e-stop: no power cut or lockout, and motion can be re-enabled (even from Studio). Use the physical red button for real emergencies.
"Lite6 Stop", a SOFTWARE stop. Sends arm.emergency_stop(): motion halts and the controller drops to Stop state. This is NOT a safety e-stop, it does not cut motor power or engage a lockout, and any client (Egret or Studio) can re-enable and drive again. For real emergencies use the PHYSICAL red button on the controller. Wire this to a panic toggle or a watchdog condition for a quick software halt.
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Trigger (Tr)Boolean | Set true to stop. Edge-triggered. |
Outputs
| Name | Description |
|---|---|
Status (S)Text | Result. |
Test Bridge (Ping)
Ping the bridge and measure round-trip latency.
"Lite6 Test Bridge", sends a ping to the bridge and reports round-trip latency. Useful for debugging connection issues, measuring polling overhead before wiring a fast Live State Timer, and confirming the bridge's robot connection is alive.
Inputs
| Name | Description |
|---|---|
Connection (C)Generic | Lite6 Connection. |
Tick (Tk)Boolean | Trigger a ping. |
Outputs
| Name | Description |
|---|---|
Latency (ms) (ms)Number | Round-trip in milliseconds. |
Robot IP (IP)Text | Robot IP the bridge is talking to. |
Mode (M)Integer | Controller mode (raw SDK code, see Status for the plain-language label). |
State (St)Integer | Live controller state (raw SDK get_state code, see Status for the label; 2 = Ready/idle is normal). |
Status (S)Text | OK + plain-language Mode / State. |
Robots
Mount (Mount)
Robot mounting frame from Tilt + Rotation (uFactory install). 0=floor, 90=wall, 180=ceiling. Orientation only, wire into a Robot's Root (Rt).
"Mount", the robot MOUNTING frame from just Tilt + Rotation, matching the uFactory install settings (which are two angles, not a full pose). Orientation ONLY, no position: the robot base stays at the origin and is reoriented. Where the WORK sits (including any Z offset to the part) belongs to the base coordinate system, i.e. the Frame component, NOT here. Output wires into a Robot's Root (Rt). Tilt: degrees from upright. 0 = floor (upright), 90 = wall, 180 = ceiling (inverted). Rotation: degrees of yaw about vertical, which way the mounted arm faces. Convention: Rz(rotation) · Rx(tilt). VERIFY against your robot's mounting on hardware at low speed.
Inputs
| Name | Description |
|---|---|
Tilt (Tilt)Number | Tilt from upright, in degrees. 0 = floor, 90 = wall, 180 = ceiling. |
Rotation (Rot)Number | Yaw about vertical, in degrees, which way the mounted arm faces. |
Outputs
| Name | Description |
|---|---|
Root (Rt)Plane | Mounting frame (orientation only, at the origin). Wire into a Robot's Root (Rt). |
Robot (Robot)
Pick a uFactory robot model via right-click. For per-model draggable pickers, use Lite 6 / xArm 5/6/7 / UF 850 in this same subcategory.
"Robot", drop on canvas, right-click to pick a uFactory model, outputs a robot reference that wires into the optional Robot input on every motion / utility / sim / codegen component. The selected model is shown on the component face (below the name) so you can see at a glance which arm the downstream graph is targeting. Selection persists on the GH document (Read/Write). Default = Lite 6 so the component behaves like the rest of the plugin out of the box when unwired.
Inputs
| Name | Description |
|---|---|
Tool (Tl)Generic | Optional end-effector to attach to this robot, from a Gripper / Vacuum / Custom Tool |
Collision Sensitivity (Cs)Integer | Optional controller collision sensitivity 0 (off), 5 (most sensitive). Travels with the |
Root (Rt)Plane | Optional robot ROOT (base) frame in world. Set it to how the arm is actually fixed, |
Seed (Sd)Generic | Optional IK SEED pose: wire a Pose (joint angles) to choose the arm configuration the whole |
Outputs
| Name | Description |
|---|---|
Robot (R)Generic | Selected robot model (carrying the attached tool, if any). Wire into the Robot input |