From 67fc6dba59cf306dae5a29414b20fd074e6e32fc Mon Sep 17 00:00:00 2001 From: pFernbach <pierre.fernbach@gmail.com> Date: Mon, 7 Jan 2019 20:48:59 +0100 Subject: [PATCH] [script] add a script for kinodynamic planner with talos --- .../scenarios/demos/talos_flatGround_path.py | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 script/scenarios/demos/talos_flatGround_path.py diff --git a/script/scenarios/demos/talos_flatGround_path.py b/script/scenarios/demos/talos_flatGround_path.py new file mode 100644 index 0000000..152c891 --- /dev/null +++ b/script/scenarios/demos/talos_flatGround_path.py @@ -0,0 +1,96 @@ +from hpp.corbaserver.rbprm.rbprmbuilder import Builder +from hpp.gepetto import Viewer +from hpp.corbaserver import Client +from hpp.corbaserver import ProblemSolver +import time + + + + +rootJointType = 'freeflyer' +packageName = 'talos-rbprm' +meshPackageName = 'talos-rbprm' +urdfName = 'talos_trunk' +urdfNameRom = ['talos_larm_rom','talos_rarm_rom','talos_lleg_rom','talos_rleg_rom'] +urdfSuffix = "" +srdfSuffix = "" +vMax = 0.3 +aMax = 0.1 +extraDof = 6 +mu=0.5 +# Creating an instance of the helper class, and loading the robot +rbprmBuilder = Builder () +rbprmBuilder.loadModel(urdfName, urdfNameRom, rootJointType, meshPackageName, packageName, urdfSuffix, srdfSuffix) +rbprmBuilder.setJointBounds ("root_joint", [-5,5, -1.5, 1.5, 0.95, 1.05]) + + +# The following lines set constraint on the valid configurations: +# a configuration is valid only if all limbs can create a contact ... +rbprmBuilder.setFilter(['talos_lleg_rom','talos_rleg_rom']) +rbprmBuilder.setAffordanceFilter('talos_lleg_rom', ['Support',]) +rbprmBuilder.setAffordanceFilter('talos_rleg_rom', ['Support']) +# We also bound the rotations of the torso. (z, y, x) +rbprmBuilder.boundSO3([-1.7,1.7,-0.1,0.1,-0.1,0.1]) +rbprmBuilder.client.robot.setDimensionExtraConfigSpace(extraDof) +rbprmBuilder.client.robot.setExtraConfigSpaceBounds([-vMax,vMax,-vMax,vMax,0,0,-aMax,aMax,-aMax,aMax,0,0]) +indexECS = rbprmBuilder.getConfigSize() - rbprmBuilder.client.robot.getDimensionExtraConfigSpace() + +# Creating an instance of HPP problem solver and the viewer + +ps = ProblemSolver( rbprmBuilder ) +ps.setParameter("Kinodynamic/velocityBound",vMax) +ps.setParameter("Kinodynamic/accelerationBound",aMax) +ps.setParameter("DynamicPlanner/sizeFootX",0.2) +ps.setParameter("DynamicPlanner/sizeFootY",0.12) +ps.setParameter("DynamicPlanner/friction",0.5) +ps.setParameter("ConfigurationShooter/sampleExtraDOF",False) + + +from hpp.gepetto import ViewerFactory +vf = ViewerFactory (ps) + +from hpp.corbaserver.affordance.affordance import AffordanceTool +afftool = AffordanceTool () +afftool.setAffordanceConfig('Support', [0.5, 0.03, 0.00005]) +afftool.loadObstacleModel ("hpp-rbprm-corba", "ground", "planning", vf) +v = vf.createViewer(displayArrows = True) +afftool.visualiseAffordances('Support', v, v.color.lightBrown) + +# Setting initial configuration +q_init = rbprmBuilder.getCurrentConfig (); +q_init[3:7] = [0,0,0,1] +q_init [0:3] = [0, 0, 1.] +v (q_init) + +# set goal config +rbprmBuilder.setCurrentConfig (q_init) +q_goal = q_init [::] +q_goal[0] = 1.5 +v(q_goal) + +ps.setInitialConfig (q_init) +ps.addGoalConfig (q_goal) + +# Choosing RBPRM shooter and path validation methods. +ps.selectConfigurationShooter("RbprmShooter") +ps.addPathOptimizer ("RandomShortcutDynamic") +ps.selectPathValidation("RbprmPathValidation",0.05) +# Choosing kinodynamic methods : +ps.selectSteeringMethod("RBPRMKinodynamic") +ps.selectDistance("Kinodynamic") +ps.selectPathPlanner("DynamicPlanner") + + +t = ps.solve () +print "Guide planning time : ",t + + +# display solution : +from hpp.gepetto import PathPlayer +pp = PathPlayer (v) +pp.dt=0.03 +pp.displayVelocityPath(0) +v.client.gui.setVisibility("path_0_root","ALWAYS_ON_TOP") +pp(0) + + -- GitLab