From 442befc9fef2428d2612fcd83281890423dbf62d Mon Sep 17 00:00:00 2001
From: Mansard <nmansard@laas.fr>
Date: Wed, 9 Mar 2011 19:05:18 +0100
Subject: [PATCH] IVIGIT.

---
 python/kinedebug.py | 238 ++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 238 insertions(+)
 create mode 100644 python/kinedebug.py

diff --git a/python/kinedebug.py b/python/kinedebug.py
new file mode 100644
index 0000000..ba6f00e
--- /dev/null
+++ b/python/kinedebug.py
@@ -0,0 +1,238 @@
+from dynamic_graph import plug
+from dynamic_graph.sot.core import *
+from dynamic_graph.sot.core.math_small_entities import Derivator_of_Matrix
+from dynamic_graph.sot.dynamics import *
+from dynamic_graph.sot.dyninv import *
+import dynamic_graph.script_shortcuts
+from dynamic_graph.script_shortcuts import optionalparentheses
+from dynamic_graph.matlab import matlab
+from MetaTask6d import MetaTask6d
+
+# --- Dynamic parameters ---
+hrp2_14_pkgdatarootdir = "/home/nmansard/compil/devgiri/hpp2/share/hrp2_14"
+modelDir = hrp2_14_pkgdatarootdir
+xmlDir = hrp2_14_pkgdatarootdir
+modelName = 'HRP2JRLmainsmall.wrl'
+specificitiesPath = xmlDir + '/HRP2SpecificitiesSmall.xml'
+jointRankPath = xmlDir + '/HRP2LinkJointRankSmall.xml'
+robotDim=36
+
+from numpy import *
+def totuple( a ):
+    al=a.tolist()
+    res=[]
+    for i in range(a.shape[0]):
+        res.append( tuple(al[i]) )
+    return tuple(res)
+
+
+
+# --- ROBOT SIMU ---------------------------------------------------------------
+# --- ROBOT SIMU ---------------------------------------------------------------
+# --- ROBOT SIMU ---------------------------------------------------------------
+
+robot = RobotSimu("robot")
+robot.resize(robotDim)
+#robot.set( (0,0,0,0,0,0, -0.0091163033083694940822,-0.091409963793829082657,-0.47197874328281280709,0.84038019261713603481,-0.47023279905304871118,0.089662407859063653071,0.0095078180225693850747,0.091110286804129178573,-0.4694503518480188653,0.83530799538565336793,-0.46768619090392338222,-0.093802946636709280681,-8.7564658296357018321e-05,0.0032643187737393364843,-7.8338082008638037324e-06,0.00019474257801330629915,0.25837025731361307201,-0.17509910214200960499,-6.1173425555032122825e-05,-0.52495354876847799552,3.1825099712999219606e-06,-0.00025760004742291479777,-3.4121048192112107608e-06,0.25836727162795458668,0.17432209754621175168,-8.8902395499734237117e-05,-0.52498369084585783106,-3.4610294148795152394e-07,-0.00026540143977199129972,1.004984814529256132e-06) )
+robot.set( ( 0.0274106623863, 0.143843868989, 0.646921914726, 0.00221064938462, 0.101393756965, 1.36729741242e-05, -0.00911630330837, -0.0914099637938, -0.471978743283, 0.840380192617, -0.470232799053, 0.0896624078591, 0.00950781802257, 0.0911102868041, -0.469450351848, 0.835307995386, -0.467686190904, -0.0938029466367, -8.75646582964e-05, 0.00326431877374, -7.83380820086e-06, 0.000194742578013, 0.258370257314, -0.175099102142, -6.1173425555e-05, -0.524953548768, 3.1825099713e-06, -0.000257600047423, -3.41210481921e-06, 0.258367271628, 0.174322097546, -8.89023954997e-05, -0.524983690846, -3.46102941488e-07, -0.000265401439772, 1.00498481453e-06 ) )
+
+dt=5e-3
+
+# --- VIEWER -------------------------------------------------------------------
+# --- VIEWER -------------------------------------------------------------------
+# --- VIEWER -------------------------------------------------------------------
+try:
+    import robotviewer
+
+    def stateFullSize(robot):
+        simulation_angles = [float(val) for val in robot.state.value]
+        simulation_angles += 10*[0.0]
+        return simulation_angles
+    RobotSimu.stateFullSize = stateFullSize
+
+    robot.viewer = robotviewer.client('XML-RPC')
+    robot.viewer.updateElementConfig('hrp',robot.stateFullSize())
+
+    def incrementView( robot,dt ):
+        robot.incrementNoView(dt)
+        robot.viewer.updateElementConfig('hrp',robot.stateFullSize())
+    RobotSimu.incrementNoView = RobotSimu.increment
+    RobotSimu.increment = incrementView
+except:
+    print "No robot viewer, sorry."
+    robot.viewer = None
+
+# --- MAIN LOOP ------------------------------------------
+def inc():
+    robot.increment(dt)
+    tr.triger.recompute( robot.control.time )
+from ThreadInterruptibleLoop import *
+@loopInThread
+def loop():
+    inc()
+runner=loop()
+
+@optionalparentheses
+def go(): runner.play()
+@optionalparentheses
+def stop(): runner.pause()
+@optionalparentheses
+def next(): runner.once()
+
+# --- DYN ----------------------------------------------------------------------
+# --- DYN ----------------------------------------------------------------------
+# --- DYN ----------------------------------------------------------------------
+
+dyn = Dynamic("dyn")
+dyn.setFiles(modelDir, modelName,specificitiesPath,jointRankPath)
+dyn.parse()
+
+dyn.inertiaRotor.value = (0,0,0,0,0,0,1.01e-4,6.96e-4,1.34e-4,1.34e-4,6.96e-4,6.96e-4,1.01e-4,6.96e-4,1.34e-4,1.34e-4,6.96e-4,6.96e-4,6.96e-4,6.96e-4,1.10e-4,1.10e-4,6.96e-4,6.60e-4,1.00e-4,6.60e-4,1.10e-4,1.00e-4,1.00e-4,6.96e-4,6.60e-4,1.00e-4,6.60e-4,1.10e-4,1.00e-4,1.00e-4)
+dyn.gearRatio.value = (0,0,0,0,0,0,384.0,240.0,180.0,200.0,180.0,100.0,384.0,240.0,180.0,200.0,180.0,100.0,207.69,381.54,100.0,100.0,219.23,231.25,266.67,250.0,145.45,350.0,200.0,219.23,231.25,266.67,250.0,145.45,350.0,200.0)
+
+plug(robot.state,dyn.position)
+dyn.velocity.value = robotDim*(0.,)
+dyn.acceleration.value = robotDim*(0.,)
+
+dyn.ffposition.unplug()
+dyn.ffvelocity.unplug()
+dyn.ffacceleration.unplug()
+
+#dyn.setProperty('ComputeBackwardDynamics','true')
+#dyn.setProperty('ComputeAccelerationCoM','true')
+
+robot.control.unplug()
+
+# --- Task Dyn -----------------------------------------
+class MetaTaskKine6d( MetaTask6d ):
+    def createTask(self):
+        self.task = Task('task'+self.name)
+
+    def createGain(self):
+        self.gain = GainAdaptive('gain'+self.name)
+        self.gain.set(0.1,0.1,125e3)
+    def plugEverything(self):
+        self.feature.sdes.value = self.featureDes.name
+        plug(self.dyn.signal(self.opPoint),self.feature.signal('position'))
+        plug(self.dyn.signal('J'+self.opPoint),self.feature.signal('Jq'))
+        self.task.add(self.feature.name)
+        plug(self.task.error,self.gain.error)
+        plug(self.gain.gain,self.task.controlGain)
+    def keep(self):
+        self.feature.position.recompute(self.dyn.position.time)
+        self.feature.keep()
+
+# Task right hand
+taskRH=MetaTaskKine6d('rh',dyn,'rh','right-wrist')
+task.ref = ((0,0,-1,0.22),(0,1,0,-0.37),(1,0,0,.74),(0,0,0,1))
+taskLH=MetaTaskKine6d('lh',dyn,'lh','left-wrist')
+task.ref = ((0,0,-1,0.22),(0,1,0,0.37),(1,0,0,.74),(0,0,0,1))
+
+# Task LFoot: Move the right foot up.
+taskRF=MetaTaskKine6d('rf',dyn,'rf','right-ankle')
+taskLF=MetaTaskKine6d('lf',dyn,'lf','left-ankle')
+
+# --- TASK COM ------------------------------------------------------
+dyn.setProperty('ComputeCoM','true')
+
+featureCom    = FeatureGeneric('featureCom')
+featureComDes = FeatureGeneric('featureComDes')
+plug(dyn.com,featureCom.errorIN)
+plug(dyn.Jcom,featureCom.jacobianIN)
+featureCom.sdes.value = 'featureComDes'
+featureComDes.errorIN.value = (0.0478408688115,-0.0620357207995,0.684865189311)
+
+taskCom = Task('taskCom')
+taskCom.add('featureCom')
+
+gCom = GainAdaptive('gCom')
+plug(taskCom.error,gCom.error)
+plug(gCom.gain,taskCom.controlGain)
+gCom.set(1,1,1)
+
+# --- TASK POSTURE --------------------------------------------------
+featurePosture    = FeatureGeneric('featurePosture')
+featurePostureDes = FeatureGeneric('featurePostureDes')
+plug(dyn.position,featurePosture.errorIN)
+featurePosture.sdes.value = 'featurePostureDes'
+featurePosture.jacobianIN.value = totuple( identity(robotDim) )
+featurePostureDes.errorIN.value = dyn.position.value
+
+taskPosture = Task('taskPosture')
+taskPosture.add('featurePosture')
+
+gPosture = GainAdaptive('gPosture')
+plug(taskPosture.error,gPosture.error)
+plug(gPosture.gain,taskPosture.controlGain)
+gPosture.set(1,1,1)
+
+featurePosture.selec.value = 0
+featurePosture.selec.value = '|0:3'     # right leg
+featurePosture.selec.value = '|6:9'     # left leg
+featurePosture.selec.value = '|12:15'   # chest+head
+featurePosture.selec.value = '|16:19'   # right arm
+featurePosture.selec.value = '|23:26'   # left arm
+
+# --- TASK JL ------------------------------------------------------
+taskJL = TaskJointLimits('taskJL')
+plug(dyn.position,taskJL.position)
+plug(dyn.lowerJl,taskJL.referenceInf)
+plug(dyn.upperJl,taskJL.referenceSup)
+taskJL.dt.value = dt
+taskJL.selec.value = '|6:'
+
+# --- SOT Dyn OpSpaceH --------------------------------------
+# SOT controller.
+sot = SolverKine('sot')
+sot.setSize(36)
+#sot.damping.value = 2e-2
+
+plug(sot.control,robot.control)
+
+def sot_addContact( sot,metaTask ):
+    metaTask.keep()
+    sot.push(metaTask.task.name)
+import new
+sot.addContact = new.instancemethod(sot_addContact, sot, sot.__class__)
+
+
+# --- TRACE ----------------------------------------------
+
+from dynamic_graph.tracer import *
+from dynamic_graph.tracer_real_time import *
+tr = TracerRealTime('tr')
+tr.setBufferSize(10485760)
+tr.open('/tmp/','dyn_','.dat')
+tr.start()
+
+#robot.periodicCall addSignal tr.triger
+
+#tr.add('p6.error','position')
+tr.add('featureCom.error','comerror')
+tr.add('dyn.com','com')
+tr.add('dyn.position','state')
+# tr.add('gCom.gain','')
+# tr.add('gCom.error','gerror')
+
+tr.add('sot.control','')
+
+# --- RUN ------------------------------------------------
+featureComDes.errorIN.value = (0.06,0,0.8)
+sot.push(taskJL.name)
+sot.addContact(taskLF)
+sot.addContact(taskRF)
+sot.push(taskCom.name)
+
+#inc()
+tr.add('taskJL.normalizedPosition','qn')
+
+
+robot.after.addSignal('taskJL.normalizedPosition')
+
+qn=taskJL.normalizedPosition
+q=taskJL.position
+comref=featureComDes.errorIN
+
+sot.damping.value=.1
+
+comref.value=(0,0,0.45)
-- 
GitLab