diff --git a/src/dynamic_graph/sot/dynamics/__init__.py b/src/dynamic_graph/sot/dynamics/__init__.py index 0637534c072d51d78f6c7e3e574886f19c784227..804d285683cd349b4c1a84f5479840d37cad4948 100755 --- a/src/dynamic_graph/sot/dynamics/__init__.py +++ b/src/dynamic_graph/sot/dynamics/__init__.py @@ -1,19 +1,25 @@ -from dynamic import Dynamic +from dynamic import Dynamic as DynamicOld from angle_estimator import AngleEstimator from zmp_from_forces import ZmpFromForces import numpy as np from numpy import arctan2, arcsin, sin, cos, sqrt -DynamicOld = Dynamic +#DynamicOld = Dynamic class Dynamic (DynamicOld): + def __init__(self, name): + DynamicOld.__init__(self, name) + self.model = None + self.data = None def setData(self, pinocchio_data): dynamic.wrap.set_pinocchio_data(self.obj,pinocchio_data) + self.data = pinocchio_data return def setModel(self, pinocchio_model): dynamic.wrap.set_pinocchio_model(self.obj,pinocchio_model) + self.model = pinocchio_model return def fromSotToPinocchio(q_sot, freeflyer=True): diff --git a/src/dynamic_graph/sot/dynamics/humanoid_robot.py b/src/dynamic_graph/sot/dynamics/humanoid_robot.py index a565072b1c28d214319b1c05c1be529f357ae0a8..fd72aa67de3c62b073ff18f1acdc3c45c70a6c91 100755 --- a/src/dynamic_graph/sot/dynamics/humanoid_robot.py +++ b/src/dynamic_graph/sot/dynamics/humanoid_robot.py @@ -207,9 +207,9 @@ class AbstractHumanoidRobot (object): # model.setProperty('ComputeMomentum', 'true') - def initializeOpPoints(self, model): + def initializeOpPoints(self): for op in self.OperationalPoints: - model.createOpPoint(self.OperationalPointsMap[op], self.OperationalPointsMap[op]) + self.dynamic.createOpPoint(self.OperationalPointsMap[op], self.OperationalPointsMap[op]) def createFrame(self, frameName, transformation, operationalPoint): frame = OpPointModifier(frameName) @@ -263,7 +263,7 @@ class AbstractHumanoidRobot (object): else: self.dynamic.acceleration.value = self.dimension*(0.,) - self.initializeOpPoints(self.dynamic) + self.initializeOpPoints() #TODO: hand parameters through srdf --- additional frames --- #self.frames = dict() @@ -376,22 +376,43 @@ class AbstractHumanoidRobot (object): self.dynamic.signal(self.OperationalPointsMap[op]).recompute(self.device.state.time+1) self.dynamic.signal('J'+self.OperationalPointsMap[op]).recompute(self.device.state.time+1) +from dynamic_graph.sot.dynamics import Dynamic class HumanoidRobot(AbstractHumanoidRobot): + def __init__(self, name, pinocchio_model, pinocchio_data, initialConfig, OperationalPointsMap = None, tracer = None): + AbstractHumanoidRobot.__init__(self, name, tracer) - halfSitting = [] #FIXME - - name = None - filename = None + self.OperationalPoints.append('waist') + self.OperationalPoints.append('chest') + self.OperationalPointsMap = OperationalPointsMap - def __init__(self, name, filename, tracer = None): - AbstractHumanoidRobot.__init__(self, name, tracer) - self.filename = filename - self.OperationalPointsMap ={'left-wrist' : 'left-wrist', - 'right-wrist' : 'right-wrist', - 'left-ankle' : 'left-ankle', - 'right-ankle' : 'right-ankle', - 'gaze' : 'gaze'} - self.dynamic = self.loadModelFromKxml (self.name + '_dynamics', self.filename) + self.dynamic = Dynamic(self.name + "_dynamic") + self.dynamic.setModel(pinocchio_model) + self.dynamic.setData(pinocchio_data) self.dimension = self.dynamic.getDimension() - self.halfSitting = self.dimension*(0.,) - self.initializeRobot() + + self.device = RobotSimu(self.name + "_device") + + self.device.resize(self.dynamic.getDimension()) + self.halfSitting = initialConfig + self.device.set(self.halfSitting) + plug(self.device.state, self.dynamic.position) + + if self.enableVelocityDerivator: + self.velocityDerivator = Derivator_of_Vector('velocityDerivator') + self.velocityDerivator.dt.value = self.timeStep + plug(self.device.state, self.velocityDerivator.sin) + plug(self.velocityDerivator.sout, self.dynamic.velocity) + else: + self.dynamic.velocity.value = self.dimension*(0.,) + + if self.enableAccelerationDerivator: + self.accelerationDerivator = \ + Derivator_of_Vector('accelerationDerivator') + self.accelerationDerivator.dt.value = self.timeStep + plug(self.velocityDerivator.sout, + self.accelerationDerivator.sin) + plug(self.accelerationDerivator.sout, self.dynamic.acceleration) + else: + self.dynamic.acceleration.value = self.dimension*(0.,) + if self.OperationalPointsMap is not None: + self.initializeOpPoints()