Newer
Older
import numpy as np
import example_robot_data as erd
import pinocchio as pin
def __init__(self, param, frozen_names=[]):
self.dt = param.dt_mpc # OCP dt
# self.init_steps = 10
# self.target_steps = param.gait.shape[0]
self.q0[:7] = np.array([0.0,
0.0,
0.2607495,
0,
0,
0,
1])
self.q0[7:] = param.q_init
self.model = self.robot.model
self.rdata = self.model.createData()
self.collision_model = self.robot.collision_model
self.visual_model = self.robot.visual_model
self.robot_weight = -sum([Y.mass for Y in self.model.inertias]) * self.model.gravity.linear[2]
self.frozen_idxs = [self.model.getJointId(
id) for id in frozen_names]
self.freeze()
self.nq = self.model.nq
self.nv = self.model.nv
self.nx = self.nq + self.nv
self.ndx = 2 * self.nv
self.nu = (
12 - len(frozen_names) + 1 if len(frozen_names) != 0 else 12
) # -1 to take into account the freeflyer
self.v0 = np.zeros(18)
self.x0 = np.concatenate([self.q0, self.v0])
self.u0 = np.zeros(self.nu)
self.lfFoot, self.rfFoot, self.lhFoot, self.rhFoot = (
"FL_FOOT",
"FR_FOOT",
"HL_FOOT",
"HR_FOOT",
)
self.cnames = [self.lfFoot, self.rfFoot, self.lhFoot, self.rhFoot]
self.allContactIds = [self.model.getFrameId(f) for f in self.cnames]
self.lfFootId = self.model.getFrameId(self.lfFoot)
self.rfFootId = self.model.getFrameId(self.rfFoot)
self.lhFootId = self.model.getFrameId(self.lhFoot)
self.rhFootId = self.model.getFrameId(self.rhFoot)
self.Rsurf = np.eye(3)
def freeze(self):
geom_models = [self.visual_model, self.collision_model]
self.model, geometric_models_reduced = pin.buildReducedModel(
self.model,
list_of_geom_models=geom_models,
list_of_joints_to_lock=self.frozen_idxs,
reference_configuration=self.q0,
)
self.rdata = self.model.createData()
self.visual_model = geometric_models_reduced[0]
self.collision_model = geometric_models_reduced[1]
class ProblemData(problemDataAbstract):
def __init__(self, param):
super().__init__(param)
self.impact_altitude_w= 1e3
self.impact_velocity_w = 1e3
class ProblemDataFull(problemDataAbstract):
def __init__(self, param):
self.useFixedBase = 1
# Cost function weights
self.mu = 0.7
self.terminal_velocity_w = np.array([0] * 12 + [1e3] * 12)
self.q0_reduced = self.q0[7:]
self.v0_reduced = np.zeros(self.nv)
self.x0_reduced = np.concatenate([self.q0_reduced, self.v0_reduced])