Repository navigation
0.5.0 was about the choices inside a job. This release is about the cell around the robot and the tool on it:
- the axes a robot is installed with that its description doesn't have;
- a TCP measured from the mounting flange, the way a tool's CAD is, and placed in a dialog that previews it;
- editing either without waiting on the solver to recompile, and without the robot jumping.
External axes
External Axes → Add External Axis… adds a joint the description doesn't have: a linear track or rotary base under the robot, a tool spindle or slide, or a positioner beside it. It starts from a preset, and every field can be changed. Each axis is an ordinary joint bone, with a slider, a hold pin, limits, a velocity check, keys and bake. PyRoki solves through it on a model written from the rig's own bones.
- Stacking. A new axis under the robot goes in underneath the ones already there, placed from just below the lowest one's rail. A Y track added after an X track carries it, as if the X track were part of the robot.
- What moves. A base or offset that moves the robot carries everything with it, as one rigid move: the axes above, the TCP, the IK target and swivel, keyed goals, the base meshes and the waypoints. Removing the axis, in any order, puts it all back.
- Preview. While the dialog is open, the viewport shows the placeholder, the travel between the end stops, and a ghost of the robot where it will stand. It follows the sliders as they're dragged. Nothing is added until OK, and the dialog keeps its fields if you click away.
Closes #5.
Edit TCP and the mounting flange
A TCP offset of zero is now the mounting flange the description defines: tool0, or a flange turned so its Z points out of the face. A TCP taken from a tool's drawing goes in unchanged, and a fresh import puts the TCP on the flange with zero offsets. On a KUKA KR10 R1100-2 the default TCP used to land on flange, whose approach axis lies in the flange face; it's now on tool0, pointing out of it. Robots without a flange, and rigs imported before this release, still measure from the joint's link frame, so an existing .blend keeps its TCP where it was. Import again to measure from the flange.
Edit TCP…, in the TCP panel, places the TCP by typed offset, on the 3D cursor (snap it to a tool vertex first), or on an object's origin, optionally taking its orientation too. It shows the offset it will store, measured from where the flange is now, so a TCP can be picked off a tool on a posed robot. The viewport previews the new TCP beside the current one as you drag.
No waiting on the solver
Changing the TCP no longer moves the robot or recompiles PyRoki. Re-offsetting the TCP took 5.1 s on the development machine and now takes 0.01 s. The joints stay where they are, and the IK target comes to the new TCP. Removing and re-adding the IK target, or the swivel, keeps the compiled solver too.
Where a new solver is needed, such as a TCP moved to another joint or an external axis added, live IK solves on NumPy until you're done editing, then PyRoki compiles once. Bakes, Find Solutions, playback and rendering always use PyRoki.
Closes #60.
Fixed
- IK with the Root bone posed. Moving or turning Root left the tool off its target by Root's own pose, up to 1.6 m with the robot upside down. It now follows. Closes #61.
Contributing
Bug reports, suggestions and pull requests from forks are welcome. See CONTRIBUTING.md.
Install
Download the zip for your platform and install it in Blender via Preferences → Add-ons → Install from Disk. Requires Blender 5.2 LTS or newer.
On Windows, keep Blender's configuration directory shallow or enable long-path support. The bundled wheels unpack to deeply nested paths, and a deep profile fails partway with WinError 206.