3 minute read

This summer I worked on the FreeCAD Google Summer of Code 2026 project “Reviving and modernising the Robotic Workbench” (350h), mentored by Carlo Dormeletti (onekk), Furkan & Pieter Hijma. The project set out to modernise FreeCAD’s built-in Robot workbench, and along the way became something bigger: Robot WB, a brand-new robot simulation workbench, developed as an addon.

What the workbench does

You take an ordinary CAD file, run it through the robot creator wizard, and get a “robot” object which you can move with sliders, do FK/IK by dragging its tool, and create and move robot on taught trajectories, all inside FreeCAD, without needing an external simulator.

From the proposal to an addon

The proposal targeted the built-in Mod/Robot module: URDF import, joint-space trajectory export, a KDL library refresh, and removing the hard-coded 6-axis limit. The direction of the project however changed, considering that now we have good kinematics support also in python. Keeping the code in python would allow easier entry for new contributors and it would also help us to clean the exisiting FreeCAD codebase of old library that is no longer needed there. The goals in this new WB were the same: robots of any DOF, easy robot definition, trajectory tooling with multi robot support.

Features built over the summer

Define Robot

A four-step wizard (import parts, insert them, define joints, review) that converts an Assembly into a robot object. Joints get axes, limits, and directions; the robot roots at an editable base frame so it can be placed anywhere in the scene. Revolute and prismatic joints are supported as of now.

Define Robot wizard

Trajectories

Waypoints can be taught and played back with point-to-point (PTP) and linear (LIN) motion types, and a trajectory player syncs playback across multiple robots.

Trajectory teaching

Animate Robot

Per-joint sliders for forward-kinematic posing, with live joint-limit enforcement and joint markers in the 3D view.

Animate Robot panel

Define Tool and inverse kinematics

A tool can be attached to the flange with a configurable TCP. Dragging the TCP solves IK and poses the whole chain. The default solver is a damped-least-squares backend; pinocchio, tesseract-robotics, and ikpy are optional alternatives.

Define Tool

Multi-Robot Control

One panel to jog every robot in the document, which useful for cells with several robots working together.

Scripting API

Everything above is scriptable from Python: building robots, posing joints, solving IK, and running trajectories without touching the GUI.

Timeline

When Milestone
early May Ported my prototype code into the project, core refactor
20 May Tool + TCP support
18 Jun Forward/inverse kinematics
13 Jul Prismatic joints
27 Jul Multi-Robot Control
7–10 Aug Trajectories: PTP, then LIN motion
12 Aug Scripting API
mid-Aug UI polish, bug-fixes, documetation wiki

State of the work

All six workbench features work today; development history is in my commits (45+ commits, May–August 2026). Nothing is merged into FreeCAD itself yet, the project moved to the addon path and is not yet mature enough for merge. The route into users’ hands is the FreeCAD Addon Manager.

Left for after GSoC: Refining UI based on user-feedback, collision and reachability envelopes, shared trajectories, multiple-tools per trajectory, import of URDF files, export to vendor-specific formats

Challenges and lessons

  • It was my first large codebase. learning FreeCAD’s App/Gui split, FeaturePython objects, and the new Assembly workbench internals.
  • Pivoting from the proposal’s patching the C++-module plan to designing a new workbench from scratch, with the scope decisions that came with it.
  • Incorporation of the different UI changes based on user feedback provided useful insights.

Acknowledgements

Thanks to Carlo for the steady reviews and for seeding the project, and to the FreeCAD mentors Furkan and Pieter & the community for answering my questions all summer.