From 2e40ee3b17c9143010775b42954c705e58d070af Mon Sep 17 00:00:00 2001
From: Mansard <nmansard@laas.fr>
Date: Sun, 11 Sep 2011 12:10:07 +0200
Subject: [PATCH] Cleaned up version.

---
 python/mocap/planche.py | 66 ++------------------------------------
 python/viewer_helper.py | 71 +++++++++++++++++++++++++++++++++++++++++
 2 files changed, 74 insertions(+), 63 deletions(-)
 create mode 100644 python/viewer_helper.py

diff --git a/python/mocap/planche.py b/python/mocap/planche.py
index 5b92d2e..35f9a01 100644
--- a/python/mocap/planche.py
+++ b/python/mocap/planche.py
@@ -27,6 +27,7 @@ from robotSpecific import pkgDataRootDir,modelName,robotDimension,initialConfig,
 from matrix_util import matrixToTuple, vectorToTuple,rotate
 from history import History
 from zmp_estimator import ZmpEstimator
+from viewer_helper import addRobotViewer,VisualPinger
 
 #-----------------------------------------------------------------------------
 # --- ROBOT SIMU -------------------------------------------------------------
@@ -37,59 +38,12 @@ robotDim  = robotDimension[robotName]
 RobotClass = RobotDynSimu
 robot      = RobotClass("robot")
 robot.resize(robotDim)
+addRobotViewer(robot,small=True,verbose=False)
 dt = 5e-3
 
-
-
-#half sitting
-#qhs=matrix((0,0,0,0,0,0,  0,0,-26,50,-24,0,0,0,-26,50,-24,0,0,0,0,0,15,10,0,-30,0,0,10,15,-10,0,-30,0,0,10))
-#robot.set((0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, -0.4537856055185257, 0.87266462599716477, -0.41887902047863906, 0.0, 0.0, 0.0, -0.4537856055185257, 0.87266462599716477, -0.41887902047863906, 0.0, 0.0, 0.0, 0.0, 0.0, 0.26179938779914941, 0.17453292519943295, 0.0, -0.52359877559829882, 0.0, 0.0, 0.17453292519943295, 0.26179938779914941, -0.17453292519943295, 0.0, -0.52359877559829882, 0.0, 0.0, 0.17453292519943295))
-
 # Similar initial position with hand forward
 robot.set((-0.033328803958899381, -0.0019839923040723341, 0.62176527349722499, 2.379901541270165e-05, 0.037719492175904465, 0.00043085147714449579, -0.00028574496353126724, 0.0038294370786961648, -0.64798319906979551, 1.0552418879542016, -0.44497846451873851, -0.0038397195926379991, -0.00028578259876671871, 0.0038284398205732629, -0.64712828871069394, 1.0534202525984278, -0.4440117393779604, -0.0038387216246160054, 0.00014352031102944824, 0.013151503268540811, -0.00057411504064861592, -0.050871000025766742, 0.21782780288481224, -0.37965640592672439, -0.14072647716213352, -1.1942332339530364, 0.0055454863752273523, -0.66956710808008013, 0.1747981826611808, 0.21400703176352612, 0.38370527720078107, 0.14620204468509851, -1.1873407322935838, -0.0038746980026940735, -0.66430172366423146, 0.17500428384087438))
 
-# ------------------------------------------------------------------------------
-# --- VIEWER -------------------------------------------------------------------
-# ------------------------------------------------------------------------------
-
-try:
-    import robotviewer
-
-    def stateFullSize(robot):
-        return [float(val) for val in robot.state.value]+10*[0.0]
-    RobotClass.stateFullSize = stateFullSize
-    robot.viewer = robotviewer.client('XML-RPC')
-    #robot.viewer = robotviewer.client('CORBA')
-    # Check the connection
-    robot.viewer.updateElementConfig('hrp',robot.stateFullSize())
-
-    def refreshView( robot ):
-       robot.viewer.updateElementConfig('hrp',robot.stateFullSize())
-    RobotClass.refresh = refreshView
-
-    def incrementView(robot,dt):
-        robot.incrementNoView(dt)
-        robot.refresh()
-        #if zmp.zmp.time > 0:
-        #    robot.viewer.updateElementConfig('zmp',[zmp.zmp.value[0],zmp.zmp.value[1],0,0,0,0])
-    RobotClass.incrementNoView = RobotClass.increment
-    RobotClass.increment = incrementView
-
-    def setView( robot,*args ):
-        robot.setNoView(*args)
-        robot.refresh()
-    RobotClass.setNoView = RobotClass.set
-    RobotClass.set = setView
-    robot.refresh()
-
-except:
-    print "No robot viewer, sorry."
-    class RobotViewerFaked:
-        def update(*args): void
-        def updateElementConfig(*args): void
-    robot.viewer = RobotViewerFaked()
-
-
 #-------------------------------------------------------------------------------
 #----- MAIN LOOP ---------------------------------------------------------------
 #-------------------------------------------------------------------------------
@@ -123,7 +77,6 @@ def next(): inc()
 # --- shortcuts -------------------------------------------------
 @optionalparentheses
 def q():
-    if 'dyn' in globals(): print dyn.ffposition.__repr__()
     print robot.state.__repr__()
 @optionalparentheses
 def qdot(): print robot.control.__repr__()
@@ -141,20 +94,7 @@ def pr():         print  matlab(  matrixToTuple(zmp.righttSupport()) ).resstr
 def dump():
     history.dumpToOpenHRP('openhrp/planche')
 
-
-# Add a visual output when an event is called.
-class Ping:
-    def __init__(self):
-        self.pos = 1
-        self.refresh()
-    def refresh(self):
-        robot.viewer.updateElementConfig('pong',  [ 0, 0.9, self.pos*0.1, 0, 0, 0 ])  
-    def __call__(self):
-        self.pos += 1
-        self.refresh()
-ping=Ping()
-attime.addPing( ping )
-
+attime.addPing( VisualPinger(robot.viewer) )
 
 #-----------------------------------------------------------------------------
 #---- DYN --------------------------------------------------------------------
diff --git a/python/viewer_helper.py b/python/viewer_helper.py
new file mode 100644
index 0000000..fdd0b82
--- /dev/null
+++ b/python/viewer_helper.py
@@ -0,0 +1,71 @@
+class RobotViewerFaked:
+    def update(*args): None
+    def updateElementConfig(*args):  None
+
+def stateFullSize(robot,additionalData = () ):
+    return [float(val) for val in robot.state.value+additionalData]
+
+def refreshView( robot ):
+    robot.viewer.updateElementConfig('hrp',robot.stateFullSize())
+
+def incrementView(robot,dt):
+    '''Increment then refresh.'''
+    robot.incrementNoView(dt)
+    robot.refresh()
+
+def setView( robot,*args ):
+    '''Set robot config then refresh.'''
+    robot.setNoView(*args)
+    robot.refresh()
+
+def addRobotViewer(robot,**args):
+    '''
+    Arguments are:
+      * small=False
+      * server='XML-RPC' == { 'XML-RPC' | 'CORBA' }
+      * verbose=True
+    '''
+    verbose = args.get('verbose',True) 
+    small = args.get('small',False)
+    server = args.get('server','XML-RPC') 
+
+    try:
+        import robotviewer
+        RobotClass = robot.__class__
+
+        if small:
+            if verbose: print 'using a small robot'
+            RobotClass.stateFullSize = lambda x: stateFullSize(x,10*(0.0,))
+        else: RobotClass.stateFullSize = stateFullSize
+
+        robot.viewer = robotviewer.client(server)
+
+        # Check the connection
+        robot.viewer.updateElementConfig('hrp',robot.stateFullSize())
+
+        RobotClass.refresh = refreshView
+        RobotClass.incrementNoView = RobotClass.increment
+        RobotClass.increment = incrementView
+        RobotClass.setNoView = RobotClass.set
+        RobotClass.set = setView
+
+        robot.refresh()
+
+    except:
+        if verbose: print "No robot viewer, sorry."
+        robot.viewer = RobotViewerFaked()
+
+
+
+
+# Add a visual output when an event is called.
+class VisualPinger:
+    def __init__(self,viewer):
+        self.pos = 1
+        self.viewer=viewer
+        self.refresh()
+    def refresh(self):
+        self.viewer.updateElementConfig('pong',  [ 0, 0.9, self.pos*0.1, 0, 0, 0 ])  
+    def __call__(self):
+        self.pos += 1
+        self.refresh()
-- 
GitLab