Robot Workbench

The robot workbench is tool to simulate industrial grade 6-Axis robots, like e.g. Kuka. Following features are planed and partial already implemented:
 * Visual representation of 6-Axis Robot (done)
 * Forward and inverse kinematic calculation of arbitrary robots (done)
 * RobotLib, dynamic readably robot types (work in progress)
 * Trajectory simulation (work in progress)
 * collision simulation
 * detection of configuration changes and singularities
 * time estimation
 * used volume (planed)
 * Post processor for Kuka robots (work in progress)
 * Process and work cell control (planed)
 * Movie making out of simulation (planed)



Scripting
Example hwo to use the basic robot class Robot6Axis which represent a 6-Axis industrial robot. The Robot Module is not dependend on Part or an other Module. It works only with the basic types Placement, Vector and Matrix. So we need only: from Robot import * from FreeCAD import * create the robot. If you not specify a other kinematic it becomes a Puma 560 rob = Robot6Axis print rob accessing the axis and the Tcp. Axis go from 1-6 and are in degrees: Start = rob.Tcp print Start print rob.Axis1 move the first Axis of the robot: rob.Axis1 = 5.0 the Tcp has changed (forward kinematic) print rob.Tcp move the robot back to start position (reverse kinematic): rob.Tcp = Start print rob.Axis1 the same with axis 2: rob.Axis2 = 5.0 print rob.Tcp rob.Tcp = Start print rob.Axis2 Waypoints: w = Waypoint(Placement,name="Pt",type="LIN") print w.Name,w.Type,w.Pos,w.Cont,w.Velocity,w.Base,w.Tool generate more l = [w] for i in range(5): l.append(Waypoint(Placement(Vector(0,0,i*100),0,Vector(1,0,0)),"LIN","Pt")) create a trajectory t = Trajectory(l) print t del rob,Start Working with the robot document objects: first creat a robot in the active document App.activeDocument.addObject("Robot::RobotObject","Robot") App.activeDocument.Robot.RobotVrmlFile = App.getResourceDir+"Mod/Robot/Lib/Kuka/kr500_1.wrl" App.activeDocument.Robot.Axis2 = -90 App.activeDocument.Robot.Axis3 = 90 retrive the Tcp position pos = FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp move the robot pos.move(App.Vector(-10,0,0)) FreeCAD.getDocument("Unnamed").getObject("Robot").Tcp = pos