Repository navigation
Kinematics
Nishendra Singh edited this page Aug 19, 2026
·
2 revisions
For developers. The FK/IK pipeline and the backend system.
- The Tool FPO (
App/rbt_tool.py) calculates a worldTCP_placementin itsexecute(). - Its ViewProvider (
Gui/vp_rbt_tool.py) shows a Coin3D sphere at the TCP. You can pull the sphere. - Drag events project the mouse ray onto a camera-facing plane through the drag-start TCP. This gives a 6D target.
- The target goes to
App/rbt_kine.py:ik(). - The solver writes the solution into the
Offset2values of the joints. The assembly solves again.
ik() sends the work to a backend. The protocol is in backends/base.py.
| Backend | Dependency | Note |
|---|---|---|
numpy_dls |
none |
Default (DEFAULT_KIN_LIB). Damped least squares |
pinocchio |
pin |
|
tesseract |
tesseract-robotics |
|
ikpy |
ikpy |
Position-only |
- The robot's
KinematicsLibproperty selects the backend. - If the library is not installed, the addon uses
numpy_dlsand writes a pip hint to the log (PIP_HINTSinApp/rbt_global_constants.py). - The backend instance is in a cache with the key
(robot, lib)inrbt_kine.py.Robot.onChangedclears the cache.
App/rbt_kine_chain.py:extract_chain makes a ChainSpec (dataclasses in rbt_kine_types.py).
- It operates at all poses: it removes the current joint values algebraically (unrotate). No physical zero move is necessary.
- All frames are in robot-assembly coordinates. Thus the chain does not change when the base moves.
- Chain tip = TCP when a tool is configured, else the last joint frame (
ChainSpec.flange_local).
rbt_placement ← rbt_kine_chain ← rbt_kine ← rbt_robot ← rbt_creator. This chain must stay acyclic: chain_root is in rbt_placement.py, not in the kine modules.
Millimeters and degrees at the FreeCAD boundary. Meters and radians in the backends. backends/base.py converts.