diff --git a/script/scenarios/demos/siggraph_asia/twister/bezier_traj.py b/script/scenarios/demos/siggraph_asia/twister/bezier_traj.py index e076b7c730bb67cb9f4eab43826dfcfe91cac6ed..c01a204a353e8c42c6afb33a6168e6f9372107f7 100644 --- a/script/scenarios/demos/siggraph_asia/twister/bezier_traj.py +++ b/script/scenarios/demos/siggraph_asia/twister/bezier_traj.py @@ -67,7 +67,7 @@ def test(s1,s2, path = False, use_rand = False, just_one_curve = False, num_opti createPtBox(viewer.client.gui, 0, c_mid_1[0].tolist(), 0.01, [0,1,0,1.]) createPtBox(viewer.client.gui, 0, c_mid_2[0].tolist(), 0.01, [0,1,0,1.]) - partions = [0.,0.1,0.9,1.] + partions = [0.,0.2,0.8,1.] p0 = fullBody.generateCurveTrajParts(bezier_0,partions) #testing intermediary configurations print 'paritions:', partions[1], " " @@ -450,7 +450,7 @@ def go0(states, num_optim = 0, mu = 0.6, s =None): sc = s for i, el in enumerate(states[:-1]): if s == None: - sc = max(norm(array(states[i+1].q()) - array(el.q())), 1.) * 1 + sc = max(norm(array(states[i+1].q()) - array(el.q())), 1.) * 0.5 path = gen(el,states[i+1],mu=mu,num_optim=num_optim, s=sc) return path diff --git a/script/scenarios/demos/siggraph_asia/twister/spidey_model.py b/script/scenarios/demos/siggraph_asia/twister/spidey_model.py index 8c06bf09a28eb7cca4541aa37df3c4c753d983e9..6e78ca07a2e8eed2b4b4926a1da2330a118e5088 100644 --- a/script/scenarios/demos/siggraph_asia/twister/spidey_model.py +++ b/script/scenarios/demos/siggraph_asia/twister/spidey_model.py @@ -39,7 +39,7 @@ fullBody.runLimbSampleAnalysis(lLegId, "jointLimitsDistance", True) limbsCOMConstraints = { rLegId : {'file': "spiderman/RL_com.ineq", 'effector' : rfoot}, - lLegId : {'file': "spiderman/LL_com.ineq", 'effector' : rHand}, + lLegId : {'file': "spiderman/LL_com.ineq", 'effector' : lfoot}, rarmId : {'file': "spiderman/RA_com.ineq", 'effector' : rHand}, larmId : {'file': "spiderman/LA_com.ineq", 'effector' : lHand} } diff --git a/script/scenarios/demos/siggraph_asia/twister/twister_spidey.py b/script/scenarios/demos/siggraph_asia/twister/twister_spidey.py index 5ebb8f1c9c1d023f2b24083af71f8054f60815e7..42881a54bcac70d56c4dfeaad582a6f8a1badaf5 100644 --- a/script/scenarios/demos/siggraph_asia/twister/twister_spidey.py +++ b/script/scenarios/demos/siggraph_asia/twister/twister_spidey.py @@ -3,6 +3,8 @@ from hpp.corbaserver.rbprm.rbprmbuilder import Builder from hpp.corbaserver.rbprm.rbprmfullbody import FullBody from hpp.gepetto import Viewer from hpp.gepetto import PathPlayer +from numpy import array, sort +from numpy.linalg import norm import twister_spidey_path as path_planner import spidey_model as model @@ -22,7 +24,7 @@ init_plan_execute(model.fullBody, r, path_planner, pp) #~ base_joint_xyz_limits = tp.base_joint_xyz_limits q_0 = fullBody.getCurrentConfig(); r(q_0) - +q_0[2] = 1.05 q_init = fullBody.getCurrentConfig(); q_init[0:7] = path_planner.q_init[0:7] q_goal = fullBody.getCurrentConfig(); q_goal[0:7] = path_planner.q_goal[0:7] @@ -41,7 +43,7 @@ from hpp.corbaserver.rbprm.rbprmstate import State from hpp.corbaserver.rbprm.state_alg import addNewContact, isContactReachable, closestTransform, removeContact, addNewContactIfReachable, projectToFeasibleCom #~ s1 = State(fullBody,q=q_init, limbsIncontact = [rLegId, lLegId]) -s1 = State(fullBody,q=q_init, limbsIncontact = [rLegId]) +s1 = State(fullBody,q=q_0, limbsIncontact = [rLegId, lLegId]) q0 = s1.q()[:] @@ -75,6 +77,12 @@ q0 = s1.q()[:] #~ print "time to check reachable", t3- t2 #~ print "time to project", t4- t3 +def dist(q0,q1): + return norm(array(q0[7:]) - array(q1[7:]) ) + +def distq_ref(q0): + return lambda s: dist(s.q(),q0) + a = computeAffordanceCentroids(tp.afftool, ["Support"]) def computeNext(state, limb, projectToCom = False, max_num_samples = 10): global a @@ -89,7 +97,9 @@ def computeNext(state, limb, projectToCom = False, max_num_samples = 10): print "time to filter", t2 - t1 #~ print "time to create", t4 - t3 print "num res", len(resultsFinal) - return resultsFinal + #sorting + sortedlist = sorted(resultsFinal, key=distq_ref(state.q())) + return sortedlist scene = "bb" r.client.gui.createScene(scene) @@ -97,29 +107,34 @@ b_id = 0 def plot_feasible(state): - for i in range(10): - for j in range(10): - for k in range(20): - c = array([(i - 5)*0.1, (j - 5.)*0.1, (k-10)*0.1]) + com = array(state.getCenterOfMass()) + for i in range(5): + for j in range(5): + for k in range(10): + c = com + array([(i - 2.5)*0.2, (j - 2.5)*0.2, (k-5)*0.2]) active_ineq = state.getComConstraint(limbsCOMConstraints) - if(active_ineq[0].dot( c )<= active_ineq[1]).all(): + if(active_ineq[0].dot( c )<= active_ineq[1]).all() and fullBody.isConfigBalanced(state.q(), s1.getLimbsInContact()): #~ print 'active' - createPtBox(r.client.gui, 0, c, color = [0,1,0,1]) + createPtBox(r.client.gui, 0, c, color = [1,0,0,1]) else: if(active_ineq[0].dot( c )>= active_ineq[1]).all(): #~ print "inactive" - createPtBox(r.client.gui, 0, c) + createPtBox(r.client.gui, 0, c, color = [1,0,0,1]) return -1 + +def plot(c): + createPtBox(r.client.gui, 0, c, color = [0,1,0,1]) i = 0 -s0 = removeContact(s1,rLegId)[0] -s_init = computeNext(s0,rLegId, True,20) -res = computeNext(s0,larmId, True,20) -s1 = res[0] +#~ s0 = removeContact(s1,rLegId)[0] +#~ s_init = computeNext(s0,rLegId, True,20) +#~ res = computeNext(s0,larmId, True,20) +#~ s1 = res[0] #~ res2 = computeNext(s1,rarmId, True,20) -s2 = computeNext(s1,rarmId, True,100)[0] +#~ s2 = computeNext(s1,rarmId, True,100)[0] -all_states=[s1,s2] +all_states=[] +#~ all_states=[s1,s2] #~ s2 = removeContact(s2,rLegId)[0] #~ s3 = computeNext(s2, larmId)[0] #~ go0(s2.sId,1, s=1) @@ -137,10 +152,11 @@ def play(): play() -print "init valid ?", fullBody.isConfigValid(s1.q()) -print "end valid ?", fullBody.isConfigValid(s2.q()) +#~ print "init valid ?", fullBody.isConfigValid(s1.q()) +#~ print "end valid ?", fullBody.isConfigValid(s2.q()) r(q_init) -path = go0([s2,s1], mu=0.3,num_optim=1) - +#~ path = go0([s2,s1], mu=0.3,num_optim=1) +s2 = computeNext(s1,rarmId,True,10)[0]; r(s2.q()) +#~ s3 = computeNext(s2,rLegId,True,10)[0]; r(s3.q())