Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Guilhem Saurel
hpp-rbprm-corba
Commits
3585a319
Commit
3585a319
authored
Feb 10, 2017
by
Pierre Fernbach
Browse files
downSlope path work, interp fail during transition slope/flat ground
parent
f925f89d
Changes
9
Hide whitespace changes
Inline
Side-by-side
CMakeLists.txt
View file @
3585a319
...
...
@@ -211,6 +211,7 @@ install(FILES
data/meshes/hyq/hyq_trunk.stl
data/meshes/hyq/hyq_trunk_large.stl
data/meshes/hyq/hyq_trunk_large2.stl
data/meshes/hyq/hyq_trunk_large3.stl
data/meshes/hyq/hyq_rom.stl
data/meshes/hyq/hyq_rhleg_rom.stl
data/meshes/hyq/hyq_rfleg_rom.stl
...
...
data/meshes/hyq/hyq_trunk_large3.stl
0 → 100644
View file @
3585a319
File added
data/urdf/hrp2_trunk_flexible.urdf
View file @
3585a319
...
...
@@ -7,6 +7,10 @@
<origin rpy="0 0 0" xyz="0 0 0"/>
</joint>
<link name="BODY">
<inertial>
<mass value="58.0"/>
<inertia ixx="1." ixy="0.0" ixz="0.0" iyy="1." iyz="0.0" izz="1."/>
</inertial>
<visual>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
...
...
@@ -63,11 +67,6 @@
<limit effort="9.6" lower="-0.785398" upper="0.785398" velocity="6.87679"/>
</joint>
<link name="HEAD_LINK0">
<inertial>
<origin rpy="0 0 0" xyz="-0.00087533 0.00426199 -0.00802747"/>
<mass value="0.374766"/>
<inertia ixx="0.00039945" ixy="-0.00000099" ixz="0.00000226" iyy="0.00022558" iyz="-0.00001181" izz="0.00036246"/>
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
...
...
@@ -90,11 +89,6 @@
</joint>
<!-- VRML link name="HEAD_LINK1" -->
<link name="HEAD_LINK1">
<inertial>
<origin rpy="0 0 0" xyz="0.01298846 0.00008605 0.07876058"/>
<mass value="0.993355"/>
<inertia ixx="0.00539717" ixy="-0.00002165" ixz="0.00069330" iyy="0.00457493" iyz="-0.00006372" izz="0.00590682"/>
</inertial>
<visual>
<origin rpy="0 0 0" xyz="0 0 0"/>
<geometry>
...
...
data/urdf/hyq/hyq_trunk_large.urdf
View file @
3585a319
...
...
@@ -16,7 +16,7 @@
<collision>
<origin xyz="0 0 0" rpy="0 0 0" />
<geometry>
<mesh filename="package://hpp-rbprm-corba/meshes/hyq/hyq_trunk_large.stl"/>
<mesh filename="package://hpp-rbprm-corba/meshes/hyq/hyq_trunk_large
3
.stl"/>
</geometry>
</collision>
</link>
...
...
script/dynamic/downSlope_hrp2_interp.py
0 → 100644
View file @
3585a319
from
hpp.corbaserver.rbprm.rbprmbuilder
import
Builder
from
hpp.corbaserver.rbprm.rbprmfullbody
import
FullBody
from
hpp.gepetto
import
Viewer
import
downSlope_hrp2_pathKino
as
tp
import
time
packageName
=
"hrp2_14_description"
meshPackageName
=
"hrp2_14_description"
rootJointType
=
"freeflyer"
##
# Information to retrieve urdf and srdf files.
urdfName
=
"hrp2_14"
urdfSuffix
=
"_reduced"
srdfSuffix
=
""
pId
=
tp
.
ps
.
numberPaths
()
-
1
fullBody
=
FullBody
()
fullBody
.
loadFullBodyModel
(
urdfName
,
rootJointType
,
meshPackageName
,
packageName
,
urdfSuffix
,
srdfSuffix
)
fullBody
.
setJointBounds
(
"base_joint_xyz"
,
[
-
2
,
5
,
0
,
2
,
0.45
,
1.8
])
fullBody
.
client
.
basic
.
robot
.
setDimensionExtraConfigSpace
(
tp
.
extraDof
)
ps
=
tp
.
ProblemSolver
(
fullBody
)
ps
.
client
.
problem
.
setParameter
(
"aMax"
,
tp
.
aMax
)
ps
.
client
.
problem
.
setParameter
(
"vMax"
,
tp
.
vMax
)
r
=
tp
.
Viewer
(
ps
,
viewerClient
=
tp
.
r
.
client
)
#~ AFTER loading obstacles
rLegId
=
'hrp2_rleg_rom'
rLeg
=
'RLEG_JOINT0'
rLegOffset
=
[
0
,
0
,
-
0.105
]
rLegNormal
=
[
0
,
0
,
1
]
rLegx
=
0.09
;
rLegy
=
0.05
fullBody
.
addLimb
(
rLegId
,
rLeg
,
''
,
rLegOffset
,
rLegNormal
,
rLegx
,
rLegy
,
50000
,
"EFORT_Normal"
,
0.1
)
lLegId
=
'hrp2_lleg_rom'
lLeg
=
'LLEG_JOINT0'
lLegOffset
=
[
0
,
0
,
-
0.105
]
lLegNormal
=
[
0
,
0
,
1
]
lLegx
=
0.09
;
lLegy
=
0.05
fullBody
.
addLimb
(
lLegId
,
lLeg
,
''
,
lLegOffset
,
rLegNormal
,
lLegx
,
lLegy
,
50000
,
"EFORT_Normal"
,
0.1
)
q_0
=
fullBody
.
getCurrentConfig
();
#~ fullBody.createOctreeBoxes(r.client.gui, 1, rarmId, q_0,)
q_init
=
[
0.1
,
-
0.82
,
0.648702
,
1.0
,
0.0
,
0.0
,
0.0
,
0.0
,
0.0
,
0.0
,
0.0
,
0.261799388
,
0.174532925
,
0.0
,
-
0.523598776
,
0.0
,
0.0
,
0.17
,
0.261799388
,
-
0.174532925
,
0.0
,
-
0.523598776
,
0.0
,
0.0
,
0.17
,
0.0
,
0.0
,
-
0.453785606
,
0.872664626
,
-
0.41887902
,
0.0
,
0.0
,
0.0
,
-
0.453785606
,
0.872664626
,
-
0.41887902
,
0.0
,
0
,
0
,
0
,
0
,
0
,
0
];
r
(
q_init
)
fullBody
.
setCurrentConfig
(
q_init
)
configSize
=
fullBody
.
getConfigSize
()
-
fullBody
.
client
.
basic
.
robot
.
getDimensionExtraConfigSpace
()
q_init
=
fullBody
.
getCurrentConfig
();
q_init
[
0
:
7
]
=
tp
.
ps
.
configAtParam
(
pId
,
0.01
)[
0
:
7
]
# use this to get the correct orientation
q_goal
=
fullBody
.
getCurrentConfig
();
q_goal
[
0
:
7
]
=
tp
.
ps
.
configAtParam
(
pId
,
tp
.
ps
.
pathLength
(
pId
))[
0
:
7
]
dir_init
=
tp
.
ps
.
configAtParam
(
pId
,
0.01
)[
tp
.
indexECS
:
tp
.
indexECS
+
3
]
acc_init
=
tp
.
ps
.
configAtParam
(
pId
,
0.01
)[
tp
.
indexECS
+
3
:
tp
.
indexECS
+
6
]
dir_goal
=
tp
.
ps
.
configAtParam
(
pId
,
tp
.
ps
.
pathLength
(
pId
)
-
0.01
)[
tp
.
indexECS
:
tp
.
indexECS
+
3
]
acc_goal
=
tp
.
ps
.
configAtParam
(
pId
,
tp
.
ps
.
pathLength
(
pId
)
-
0.01
)[
tp
.
indexECS
+
3
:
tp
.
indexECS
+
6
]
robTreshold
=
1
# copy extraconfig for start and init configurations
q_init
[
configSize
:
configSize
+
3
]
=
dir_init
[::]
q_init
[
configSize
+
3
:
configSize
+
6
]
=
acc_init
[::]
q_goal
[
configSize
:
configSize
+
3
]
=
dir_goal
[::]
q_goal
[
configSize
+
3
:
configSize
+
6
]
=
acc_goal
[::]
fullBody
.
setStaticStability
(
False
)
# Randomly generating a contact configuration at q_init
fullBody
.
setCurrentConfig
(
q_init
)
r
(
q_init
)
q_init
=
fullBody
.
generateContacts
(
q_init
,
dir_init
,
acc_init
,
robTreshold
)
r
(
q_init
)
# Randomly generating a contact configuration at q_end
fullBody
.
setCurrentConfig
(
q_goal
)
q_goal
=
fullBody
.
generateContacts
(
q_goal
,
dir_goal
,
acc_goal
,
robTreshold
)
r
(
q_goal
)
# specifying the full body configurations as start and goal state of the problem
r
(
q_init
)
fullBody
.
setStartState
(
q_init
,[
rLegId
,
lLegId
])
fullBody
.
setEndState
(
q_goal
,[
rLegId
,
lLegId
])
configs
=
fullBody
.
interpolate
(
0.08
,
pathId
=
pId
,
robustnessTreshold
=
1
,
filterStates
=
True
)
print
"number of configs :"
,
len
(
configs
)
from
hpp.gepetto
import
PathPlayer
pp
=
PathPlayer
(
fullBody
.
client
.
basic
,
r
)
from
fullBodyPlayer
import
Player
player
=
Player
(
fullBody
,
pp
,
tp
,
configs
,
draw
=
False
,
optim_effector
=
False
,
use_velocity
=
True
,
pathId
=
pId
)
player
.
displayContactPlan
()
script/dynamic/downSlope_hrp2_pathKino.py
0 → 100644
View file @
3585a319
from
hpp.corbaserver.rbprm.rbprmbuilder
import
Builder
from
hpp.gepetto
import
Viewer
from
hpp.corbaserver
import
Client
from
hpp.corbaserver.robot
import
Robot
as
Parent
from
hpp.corbaserver.rbprm.problem_solver
import
ProblemSolver
class
Robot
(
Parent
):
rootJointType
=
'freeflyer'
packageName
=
'hpp-rbprm-corba'
meshPackageName
=
'hpp-rbprm-corba'
# URDF file describing the trunk of the robot HyQ
urdfName
=
'hrp2_trunk_flexible'
urdfSuffix
=
""
srdfSuffix
=
""
def
__init__
(
self
,
robotName
,
load
=
True
):
Parent
.
__init__
(
self
,
robotName
,
self
.
rootJointType
,
load
)
self
.
tf_root
=
"base_footprint"
self
.
client
.
basic
=
Client
()
self
.
load
=
load
rootJointType
=
'freeflyer'
packageName
=
'hpp-rbprm-corba'
meshPackageName
=
'hpp-rbprm-corba'
urdfName
=
'hrp2_trunk_flexible'
urdfNameRom
=
[
'hrp2_larm_rom'
,
'hrp2_rarm_rom'
,
'hrp2_lleg_rom'
,
'hrp2_rleg_rom'
]
urdfSuffix
=
""
srdfSuffix
=
""
vMax
=
4
;
aMax
=
6
;
extraDof
=
6
# Creating an instance of the helper class, and loading the robot
rbprmBuilder
=
Builder
()
rbprmBuilder
.
loadModel
(
urdfName
,
urdfNameRom
,
rootJointType
,
meshPackageName
,
packageName
,
urdfSuffix
,
srdfSuffix
)
#rbprmBuilder.setJointBounds ("base_joint_xyz", [-1.25,2, -0.5, 5.5, 0.6, 1.8])
rbprmBuilder
.
setJointBounds
(
"base_joint_xyz"
,
[
-
2
,
4
,
0
,
2
,
0.2
,
1.8
])
rbprmBuilder
.
setJointBounds
(
'CHEST_JOINT0'
,[
0
,
0
])
rbprmBuilder
.
setJointBounds
(
'CHEST_JOINT1'
,[
-
0.35
,
0.1
])
rbprmBuilder
.
setJointBounds
(
'HEAD_JOINT0'
,[
0
,
0
])
rbprmBuilder
.
setJointBounds
(
'HEAD_JOINT1'
,[
0
,
0
])
# The following lines set constraint on the valid configurations:
# a configuration is valid only if all limbs can create a contact ...
rbprmBuilder
.
setFilter
([
'hrp2_lleg_rom'
,
'hrp2_rleg_rom'
])
rbprmBuilder
.
setAffordanceFilter
(
'hrp2_lleg_rom'
,
[
'Support'
,])
rbprmBuilder
.
setAffordanceFilter
(
'hrp2_rleg_rom'
,
[
'Support'
])
# We also bound the rotations of the torso. (z, y, x)
rbprmBuilder
.
boundSO3
([
-
0.1
,
0.1
,
-
0.65
,
0.65
,
-
0.2
,
0.2
])
rbprmBuilder
.
client
.
basic
.
robot
.
setDimensionExtraConfigSpace
(
extraDof
)
rbprmBuilder
.
client
.
basic
.
robot
.
setExtraConfigSpaceBounds
([
-
4
,
4
,
-
1
,
1
,
-
2
,
2
,
0
,
0
,
0
,
0
,
0
,
0
])
indexECS
=
rbprmBuilder
.
getConfigSize
()
-
rbprmBuilder
.
client
.
basic
.
robot
.
getDimensionExtraConfigSpace
()
# Creating an instance of HPP problem solver and the viewer
ps
=
ProblemSolver
(
rbprmBuilder
)
ps
.
client
.
problem
.
setParameter
(
"aMax"
,
aMax
)
ps
.
client
.
problem
.
setParameter
(
"vMax"
,
vMax
)
ps
.
client
.
problem
.
setParameter
(
"sizeFootX"
,
0.24
)
ps
.
client
.
problem
.
setParameter
(
"sizeFootY"
,
0.14
)
r
=
Viewer
(
ps
)
from
hpp.corbaserver.affordance.affordance
import
AffordanceTool
afftool
=
AffordanceTool
()
afftool
.
setAffordanceConfig
(
'Support'
,
[
0.5
,
0.03
,
0.00005
])
afftool
.
loadObstacleModel
(
packageName
,
"downSlope"
,
"planning"
,
r
)
#r.loadObstacleModel (packageName, "ground", "planning")
afftool
.
visualiseAffordances
(
'Support'
,
r
,
[
0.25
,
0.5
,
0.5
])
r
.
addLandmark
(
r
.
sceneName
,
1
)
# Setting initial and goal configurations
q_init
=
rbprmBuilder
.
getCurrentConfig
();
q_init
[
3
:
7
]
=
[
1
,
0
,
0
,
0
]
q_init
[
8
]
=
-
0.2
q_init
[
0
:
3
]
=
[
-
1.6
,
1
,
1.75
];
r
(
q_init
)
#q_init[3:7] = [0.7071,0,0,0.7071]
#q_init [0:3] = [1, 1, 0.65]
rbprmBuilder
.
setCurrentConfig
(
q_init
)
q_goal
=
q_init
[::]
q_goal
[
3
:
7
]
=
[
1
,
0
,
0
,
0
]
q_goal
[
8
]
=
0
q_goal
[
0
:
3
]
=
[
3
,
1
,
0.55
];
r
(
q_goal
)
r
(
q_goal
)
#~ q_goal [0:3] = [-1.5, 0, 0.63]; r (q_goal)
# Choosing a path optimizer
ps
.
setInitialConfig
(
q_init
)
ps
.
addGoalConfig
(
q_goal
)
# Choosing RBPRM shooter and path validation methods.
ps
.
client
.
problem
.
selectConFigurationShooter
(
"RbprmShooter"
)
ps
.
client
.
problem
.
selectPathValidation
(
"RbprmPathValidation"
,
0.05
)
# Choosing kinodynamic methods :
ps
.
selectSteeringMethod
(
"RBPRMKinodynamic"
)
ps
.
selectDistance
(
"KinodynamicDistance"
)
ps
.
selectPathPlanner
(
"DynamicPlanner"
)
#solve the problem :
r
(
q_init
)
#r.solveAndDisplay("rm",1,0.01)
ps
.
solve
()
#ps.client.problem.prepareSolveStepByStep()
#ps.client.problem.finishSolveStepByStep()
q_far
=
q_init
[::]
q_far
[
2
]
=
-
3
r
(
q_far
)
"""
camera = [0.6293167471885681,
-9.560577392578125,
10.504343032836914,
0.9323806762695312,
0.36073973774909973,
0.008668755181133747,
0.02139890193939209]
r.client.gui.setCameraTransform(0,camera)
"""
"""
r.client.gui.removeFromGroup("rm",r.sceneName)
r.client.gui.removeFromGroup("rmstart",r.sceneName)
r.client.gui.removeFromGroup("rmgoal",r.sceneName)
for i in range(0,ps.numberNodes()):
r.client.gui.removeFromGroup("vecRM"+str(i),r.sceneName)
"""
# for seed 1486657707
ps
.
client
.
problem
.
extractPath
(
0
,
0
,
2.15
)
# Playing the computed path
from
hpp.gepetto
import
PathPlayer
pp
=
PathPlayer
(
rbprmBuilder
.
client
.
basic
,
r
)
pp
.
dt
=
0.03
pp
.
displayVelocityPath
(
1
)
r
.
client
.
gui
.
setVisibility
(
"path_1_root"
,
"ALWAYS_ON_TOP"
)
#display path
pp
.
speed
=
0.3
#pp (0)
#display path with post-optimisation
"""
q_far = q_init[::]
q_far[2] = -3
r(q_far)
"""
script/dynamic/downSlope_hyq_interpKino.py
View file @
3585a319
...
...
@@ -62,6 +62,13 @@ dir_goal = tp.ps.configAtParam(pathId,tp.ps.pathLength(pathId))[7:10]
acc_goal
=
tp
.
ps
.
configAtParam
(
pathId
,
tp
.
ps
.
pathLength
(
pathId
))[
10
:
13
]
configSize
=
fullBody
.
getConfigSize
()
-
fullBody
.
client
.
basic
.
robot
.
getDimensionExtraConfigSpace
()
# copy extraconfig for start and init configurations
q_init
[
configSize
:
configSize
+
3
]
=
dir_init
[::]
q_init
[
configSize
+
3
:
configSize
+
6
]
=
acc_init
[::]
q_goal
[
configSize
:
configSize
+
3
]
=
dir_goal
[::]
q_goal
[
configSize
+
3
:
configSize
+
6
]
=
acc_goal
[::]
fullBody
.
setStaticStability
(
False
)
# Randomly generating a contact configuration at q_init
fullBody
.
setCurrentConfig
(
q_init
)
...
...
@@ -71,11 +78,7 @@ q_init = fullBody.generateContacts(q_init,dir_init,acc_init)
fullBody
.
setCurrentConfig
(
q_goal
)
q_goal
=
fullBody
.
generateContacts
(
q_goal
,
dir_goal
,
acc_goal
)
# copy extraconfig for start and init configurations
q_init
[
configSize
:
configSize
+
3
]
=
dir_init
[::]
q_init
[
configSize
+
3
:
configSize
+
6
]
=
acc_init
[::]
q_goal
[
configSize
:
configSize
+
3
]
=
dir_goal
[::]
q_goal
[
configSize
+
3
:
configSize
+
6
]
=
acc_goal
[::]
# specifying the full body configurations as start and goal state of the problem
fullBody
.
setStartState
(
q_init
,[
larmId
,
rLegId
,
rarmId
,
lLegId
])
fullBody
.
setEndState
(
q_goal
,[
larmId
,
rLegId
,
rarmId
,
lLegId
])
...
...
script/dynamic/downSlope_hyq_pathKino.py
View file @
3585a319
...
...
@@ -9,7 +9,7 @@ rootJointType = 'freeflyer'
packageName
=
'hpp-rbprm-corba'
meshPackageName
=
'hpp-rbprm-corba'
# URDF file describing the trunk of the robot HyQ
urdfName
=
'hyq_trunk'
urdfName
=
'hyq_trunk
_large
'
# URDF files describing the reachable workspace of each limb of HyQ
urdfNameRom
=
[
'hyq_lhleg_rom'
,
'hyq_lfleg_rom'
,
'hyq_rfleg_rom'
,
'hyq_rhleg_rom'
]
urdfSuffix
=
""
...
...
script/tools/screenCap.py
View file @
3585a319
...
...
@@ -38,7 +38,7 @@ tp.r.stopCapture ()
"""
## avconv (bash) commands
avconv -i capture_0_%d.png -r 30 -vcodec mpeg4 -qscale 1 -mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -y
sideWall
_hyq_contact
s
Plan
2
.mp4
avconv -i capture_0_%d.png -r 30 -vcodec mpeg4 -qscale 1 -mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -y
downSlope
_hyq_contactPlan
1
.mp4
avconv -i capture_0_%d.png -r 30 -vcodec mpeg4 -qscale 1 -mbd rd -flags +mv4+aic -trellis 2 -cmp 2 -subcmp 2 -g 300 -pass 2 hyq_darpa.mp4
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment