#!/usr/bin/python2.4 # Copyright 2007 Ben Lipkowitz # You may distribute this software under the GNU GPL v2 or later # # Hexapod visualization. from vismach import * import hal from math import * import sys import random import emc for setting in sys.argv[1:]: exec setting #compname must be the same as given in 'loadusr -W' or the comp #will never be ready compname = "hexagui" #if(randomize): compname += str(random.randrange(0,10000)) c = hal.component(compname) #declare hal pins here c.newpin("joint0", hal.HAL_FLOAT, hal.HAL_IN) c.newpin("joint1", hal.HAL_FLOAT, hal.HAL_IN) c.newpin("joint2", hal.HAL_FLOAT, hal.HAL_IN) c.newpin("joint3", hal.HAL_FLOAT, hal.HAL_IN) c.newpin("joint4", hal.HAL_FLOAT, hal.HAL_IN) c.newpin("joint5", hal.HAL_FLOAT, hal.HAL_IN) #get the tool position in cartesian coordinates from emc #so we dont have to do kinematics c.newpin("axis0", hal.HAL_FLOAT, hal.HAL_IN) c.newpin("axis1", hal.HAL_FLOAT, hal.HAL_IN) c.newpin("axis2", hal.HAL_FLOAT, hal.HAL_IN) c.newpin("axis3", hal.HAL_FLOAT, hal.HAL_IN) c.newpin("axis4", hal.HAL_FLOAT, hal.HAL_IN) c.newpin("axis5", hal.HAL_FLOAT, hal.HAL_IN) c.ready() ################################# #draw it! #provide some reference frames #tool_coords starts out at the origin tool_coords = Capture() blob = CylinderZ(-3, 0.3, 0, 0) tool = Collection([tool_coords, blob]) workpiece = Box(2,2,0,3,4,1) work_coords = Capture() workpiece = Collection([work_coords, workpiece]) struts = [] spheres = [] platform = CylinderZ(0, 5, 1, 5) platform = Translate([platform],0,0,-3) platform = Collection([tool, platform]) platform = HalTranslate([platform],c, "axis0",1,0,0) platform = HalTranslate([platform],c, "axis1",0,1,0) platform = HalTranslate([platform],c, "axis2",0,0,1) platform = HalRotate([platform], c, "axis3",1,1,0,0) platform = HalRotate([platform], c, "axis4",1,0,1,0) platform = HalRotate([platform], c, "axis5",1,0,0,1) platform = Translate([platform],0,0,15) for i in range(6): #the end-cap is so we can always see where the cylinder is inner = CylinderZ(0, 0.8, 10, 0.8) endcap = CylinderZ(9,1.2,10,1.2) inner = Collection([inner, endcap]) outer = CylinderZ(0, 1, 10, 1) #account for joint offset inner = Translate([inner],0,0,-30) # make strut extend and retract hal_pin = "joint" + str(i) inner = HalTranslate([inner],c,hal_pin,0,0,1) # HalTranslate fiddles with the position directly, so provide another layer faux_inner = Collection([inner]) faux_inner = Translate([faux_inner],0,0,10) strut = Collection([faux_inner, outer]) hex_angle = 2*pi/6 radius = 5 x = radius * cos(i * hex_angle) y = radius * sin(i * hex_angle) strut = Translate([strut],x, y,0) #just for looks strut = Rotate([strut],10,y, -x,0) struts = Collection([struts, strut]) sweep = Sphere(0, 0, 0, 2) sweep = HalScale([sweep], c, hal_pin, 0.1, 0.1, 0.1) sweep = Translate([sweep],x,y,0) spheres = Collection([spheres, sweep]) # add a floor size=20 floor = Box(-0.5*size,-0.5*size,-0.02*size,0.5*size,0.5*size,0.0) model = Collection([struts, platform, floor, workpiece]) #model = Collection([spheres, tool, floor, workpiece]) main(model, tool_coords, work_coords, size)