From 439ad4c4c3ddd525f69a80edb371829da45dfdc5 Mon Sep 17 00:00:00 2001 From: Florent Lamiraux <florent@laas.fr> Date: Wed, 19 Jan 2011 22:04:46 +0100 Subject: [PATCH] Make python scripts more compact, - by calling signals through Entity instance members instead of by signal('name'), - by replacing dynamicRobot member by dynamic, - by replacing simu flag by simulation, - by replacing robotSimu member by simu - by defining members for each operational point: AbstractHumanoidRobot.features['right-wrist'] can be accessed by AbstractHumanoidRobot.rightWrist for instance. --- src/dynamic_graph/sot/dynamics/hrp2.py.in | 12 +-- .../sot/dynamics/humanoid_robot.py | 82 ++++++++++--------- 2 files changed, 50 insertions(+), 44 deletions(-) diff --git a/src/dynamic_graph/sot/dynamics/hrp2.py.in b/src/dynamic_graph/sot/dynamics/hrp2.py.in index 63b1c31..784d9c4 100755 --- a/src/dynamic_graph/sot/dynamics/hrp2.py.in +++ b/src/dynamic_graph/sot/dynamics/hrp2.py.in @@ -62,20 +62,20 @@ class Hrp2(AbstractHumanoidRobot): return res def __init__(self, name, - simu, + simulation, modelDir = hrp2_14_pkgdatarootdir, xmlDir = hrp2_14_pkgdatarootdir): - AbstractHumanoidRobot.__init__ (self, name, simu) + AbstractHumanoidRobot.__init__ (self, name, simulation) modelName = 'HRP2JRLmainsmall.wrl' specificitiesPath = xmlDir + '/HRP2SpecificitiesSmall.xml' jointRankPath = xmlDir + '/HRP2LinkJointRankSmall.xml' - self.dynamicRobot = DynamicHrp2(self.name + '.dynamics') - self.dynamicRobot.setFiles(modelDir, modelName, + self.dynamic = DynamicHrp2(self.name + '.dynamics') + self.dynamic.setFiles(modelDir, modelName, specificitiesPath, jointRankPath) - self.dynamicRobot.parse() - self.dimension = self.dynamicRobot.getDimension() + self.dynamic.parse() + self.dimension = self.dynamic.getDimension() if self.dimension != len(self.halfSitting): raise "invalid half-sitting pose" self.initializeRobot() diff --git a/src/dynamic_graph/sot/dynamics/humanoid_robot.py b/src/dynamic_graph/sot/dynamics/humanoid_robot.py index eb03da5..84e4512 100755 --- a/src/dynamic_graph/sot/dynamics/humanoid_robot.py +++ b/src/dynamic_graph/sot/dynamics/humanoid_robot.py @@ -59,7 +59,7 @@ class AbstractHumanoidRobot (object): """Entity name (internal use)""" #FIXME: it should be some kind of global flag instead. - simu = False + simulation = False """Are we in simulation or not?""" halfSitting = None @@ -68,7 +68,7 @@ class AbstractHumanoidRobot (object): This attribute *must* be defined in subclasses. """ - dynamicRobot = None + dynamic = None """ The robot dynamic model. """ @@ -152,66 +152,72 @@ class AbstractHumanoidRobot (object): - the center of mass task used to keep the robot stability - one task per operational point to ease robot control """ - if not self.dynamicRobot: + if not self.dynamic: raise "robots models have to be initialized first" - if self.simu: - self.robotSimu = RobotSimu(self.name + '.robotSimu') + if self.simulation: + self.simu = RobotSimu(self.name + '.simu') # Freeflyer reference frame should be the same as global # frame so that operational point positions correspond to # position in freeflyer frame. - self.robotSimu.set(self.halfSitting) + self.simu.set(self.halfSitting) - self.dynamicRobot.signal('position').value = self.halfSitting - self.dynamicRobot.signal('velocity').value = self.dimension*(0.,) - self.dynamicRobot.signal('acceleration').value = self.dimension*(0.,) + self.dynamic.position.value = self.halfSitting + self.dynamic.velocity.value = self.dimension*(0.,) + self.dynamic.acceleration.value = self.dimension*(0.,) - self.initializeOpPoints(self.dynamicRobot, + self.initializeOpPoints(self.dynamic, self.name + '.dynamics') # --- center of mass ------------ self.featureCom = FeatureGeneric(self.name + '.feature.com') - plug(self.dynamicRobot.signal('com'), self.featureCom.signal('errorIN')) - plug(self.dynamicRobot.signal('Jcom'), - self.featureCom.signal('jacobianIN')) - self.featureCom.signal('selec').value = '011' + plug(self.dynamic.com, self.featureCom.errorIN) + plug(self.dynamic.Jcom, + self.featureCom.jacobianIN) + self.featureCom.selec.value = '011' self.featureComDes = FeatureGeneric(self.name + '.feature.ref.com') - self.featureComDes.signal('errorIN').value = (.0, .0, 0.) - self.featureCom.signal('sdes').value = self.featureComDes + self.featureComDes.errorIN.value = (.0, .0, 0.) + self.featureCom.sdes.value = self.featureComDes self.comTask = Task(self.name + '.task.com') self.comTask.add(self.name + '.feature.com') - self.comTask.signal('controlGain').value = 1. + self.comTask.controlGain.value = 1. # --- operational points tasks ----- self.features = dict() self.tasks = dict() for op in self.OperationalPoints: - self.dynamicRobot.signal(op).recompute(0) + self.dynamic.signal(op).recompute(0) self.features[op] = \ FeaturePosition(self.name + '.feature.' + op, - self.dynamicRobot.signal(op), - self.dynamicRobot.signal('J' + op), - self.dynamicRobot.signal(op).value) + self.dynamic.signal(op), + self.dynamic.signal('J' + op), + self.dynamic.signal(op).value) self.tasks[op] = Task(self.name + '.task.' + op) self.tasks[op].add(self.name + '.feature.' + op) - self.tasks[op].signal('controlGain').value = .2 + self.tasks[op].controlGain.value = .2 + # define a member for each operational point + w = op.split('-') + memberName = w[0] + for i in w[1:]: + memberName += i.capitalize() + setattr(self, memberName, self.features[op]) - def __init__(self, name, simu): + def __init__(self, name, simulation): self.name = name - if simu: - self.simu = True + if simulation: + self.simulation = True else: - self.simu = False + self.simulation = False def restart(self): - if self.robotSimu: - self.robotSimu.set(self.halfSitting) - self.dynamicRobot.signal('position').value = self.halfSitting - self.dynamicRobot.signal('velocity').value = self.dimension * (0.,) - self.dynamicRobot.signal('acceleration').value = self.dimension * (0.,) - if self.robotSimu: - self.robotSimu.increment(.001) + if self.simu: + self.simu.set(self.halfSitting) + self.dynamic.position.value = self.halfSitting + self.dynamic.velocity.value = self.dimension * (0.,) + self.dynamic.acceleration.value = self.dimension * (0.,) + if self.simu: + self.simu.increment(.001) @@ -221,14 +227,14 @@ class HumanoidRobot(AbstractHumanoidRobot): halfSitting = [] #FIXME name = None - simu = None + simulation = None filename = None - def __init__(self, name, simu, filename): - AbstractHumanoidRobot.__init__(self, name, simu) + def __init__(self, name, simulation, filename): + AbstractHumanoidRobot.__init__(self, name, simulation) self.filename = filename - self.dynamicRobot = \ + self.dynamic = \ self.loadModelFromKxml (self.name + '.dynamics', self.filename) - self.dimension = self.dynamicRobot.getDimension() + self.dimension = self.dynamic.getDimension() self.halfSitting = self.dimension*(0.,) self.initializeRobot() -- GitLab