in differentiable_robot_model/data_utils.py [0:0]
def generate_random_inverse_dynamics_data(robot_model, n_data):
device = robot_model._device
limits_per_joint = robot_model.get_joint_limits()
joint_lower_bounds = np.asarray([joint["lower"] for joint in limits_per_joint])
joint_upper_bounds = np.asarray([joint["upper"] for joint in limits_per_joint])
joint_velocity_limits = 0.2 * np.asarray(
[joint["velocity"] for joint in limits_per_joint]
)
q = torch.tensor(
np.random.uniform(
low=joint_lower_bounds, high=joint_upper_bounds, size=(n_data, 7)
),
dtype=torch.float32,
)
qd = torch.tensor(
np.random.uniform(
low=-joint_velocity_limits, high=joint_velocity_limits, size=(n_data, 7)
),
dtype=torch.float32,
)
qdd_des = torch.tensor(
np.random.uniform(
low=-joint_velocity_limits * 2.0,
high=joint_velocity_limits * 2.0,
size=(n_data, 7),
),
dtype=torch.float32,
)
q = q.to(device)
qd = qd.to(device)
qdd_des = qdd_des.to(device)
torques = robot_model.compute_inverse_dynamics(
q=q, qd=qd, qdd_des=qdd_des, include_gravity=True
)
return InverseDynamicsDataset(
data={"q": q, "qd": qd, "qdd_des": qdd_des, "tau": torques}
)