Repository navigation
Kinema v0.4.0
The KUKA descriptions that would not import correctly, and then the thing that became worth building once they did.
A KR120 imported with its bones up to 5° away from the geometry they were supposed to carry — 0.22 m of error at the flange — because its URDF forbids its own zero pose, which is true of every KUKA quantec. Chasing that turned up two more: link meshes landing with their origins metres underground, and collision geometry that was parsed and then thrown away. With those fixed, the robots stood where their descriptions said, and the question stopped being how do I get this robot into Blender and became what do I want it to do.
Waypoints
The answer to the second question, and the headline here.
Pose the robot and press Record. Each waypoint stores the tool pose and the joint vector it was taught in, because a pose alone does not say which of up to eight solutions you meant — Go To restores that exact configuration instead of re-solving. Every waypoint also gets an Empty in the viewport, so one can be snapped to a feature on the part being worked, and dragging it re-aims the move.
Time is the ordering. A waypoint carries a frame, not a list position, so there is no second order to keep in sync. Each row says how the robot arrives there:
- Joint interpolates the joints. Fast, always reachable, and the tool takes whatever path falls out.
- Linear drives the tool along the straight line between two poses. On a KR120 it holds that line to 0.002 mm over a 300 mm plunge.
Generate Motion writes ordinary keyframes — joint channels for joint moves, the IK goal for linear ones, and the live-IK switch keyed so each span is solved the way it should be. Nothing about the result is special, which is the point: Blender's own graph editor shapes it afterwards, and Bake IK to Keyframes still turns it into plain joint curves that render with the add-on gone.
Collision geometry
Behind a new Import Collision Meshes option, off by default. A URDF describes a robot twice — what it looks like, and the coarse hulls a planner sweeps — and Kinema only ever loaded the first. On a KR120 that is seven STL hulls alongside the visual geometry.
Both kinds now go into their own collection under the robot's, so either can be hidden as a group. Collision starts hidden and draws as wire. For MJCF, geoms in groups 3 to 5 become collision geometry instead of being dropped.
Meshes at File Origin
A checkbox beside Reset Meshes. Improving a robot's geometry means editing a mesh and writing it back as a drop-in replacement for the file the URDF points at — and exporters write world space, so the mesh has to actually be at that file's coordinates. Ticking the box sends every link mesh there; unticking puts them back exactly.
Fixed
Link meshes drifting away from their bones, on any robot whose URDF zero pose its own joint limits forbid — kr120_r2700_2, kr150_r3100_2, the kr210 family, kr240, kr300, kr340, kr500. Meshes were placed by assigning matrix_world, which Blender resolves against the parent bone's evaluated pose, and the limit constraints had already pulled the bones off the rest pose. Placement now comes from each bone's rest matrix.
Link mesh origins now sit on their link frames, instead of metres from their geometry when a URDF authors every mesh in one shared frame.
A warning when a URDF's zero pose is outside a joint's limits, naming the joint, its range, and where the rig will actually rest.
rospkg moves to 1.6.2.
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.
Full changelog: https://github.com/ebgenius/kinema/blob/v0.4.0/CHANGELOG.md