mink 0.0.8__py3-none-any.whl → 0.0.9__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
mink/lie/se3.py
CHANGED
@@ -113,130 +113,131 @@ class SE3(MatrixLieGroup):
|
|
113
113
|
|
114
114
|
@classmethod
|
115
115
|
def exp(cls, tangent: np.ndarray) -> SE3:
|
116
|
-
assert tangent.shape == (
|
116
|
+
assert tangent.shape == (cls.tangent_dim,)
|
117
117
|
rotation = SO3.exp(tangent[3:])
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
skew_omega = skew(tangent[3:])
|
123
|
-
if use_taylor:
|
124
|
-
V = rotation.as_matrix()
|
118
|
+
theta = np.float64(mujoco.mju_norm3(tangent[3:]))
|
119
|
+
t2 = theta * theta
|
120
|
+
if t2 < get_epsilon(t2.dtype):
|
121
|
+
v_mat = rotation.as_matrix()
|
125
122
|
else:
|
126
|
-
|
123
|
+
skew_omega = skew(tangent[3:])
|
124
|
+
v_mat = (
|
127
125
|
np.eye(3, dtype=np.float64)
|
128
|
-
+ (1.0 - np.cos(
|
129
|
-
+ (
|
130
|
-
/ (theta_squared_safe * theta_safe)
|
131
|
-
* (skew_omega @ skew_omega)
|
126
|
+
+ (1.0 - np.cos(theta)) / t2 * skew_omega
|
127
|
+
+ (theta - np.sin(theta)) / (t2 * theta) * (skew_omega @ skew_omega)
|
132
128
|
)
|
133
|
-
return
|
129
|
+
return cls.from_rotation_and_translation(
|
134
130
|
rotation=rotation,
|
135
|
-
translation=
|
131
|
+
translation=v_mat @ tangent[:3],
|
136
132
|
)
|
137
133
|
|
138
134
|
def inverse(self) -> SE3:
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
135
|
+
inverse_wxyz_xyz = np.empty(SE3.parameters_dim, dtype=np.float64)
|
136
|
+
mujoco.mju_negQuat(inverse_wxyz_xyz[:4], self.wxyz_xyz[:4])
|
137
|
+
mujoco.mju_rotVecQuat(
|
138
|
+
inverse_wxyz_xyz[4:], -1.0 * self.wxyz_xyz[4:], inverse_wxyz_xyz[:4]
|
143
139
|
)
|
140
|
+
return SE3(wxyz_xyz=inverse_wxyz_xyz)
|
144
141
|
|
145
142
|
def normalize(self) -> SE3:
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
)
|
143
|
+
normalized_wxyz_xyz = np.array(self.wxyz_xyz)
|
144
|
+
mujoco.mju_normalize4(normalized_wxyz_xyz[:4])
|
145
|
+
return SE3(wxyz_xyz=normalized_wxyz_xyz)
|
150
146
|
|
151
147
|
def apply(self, target: np.ndarray) -> np.ndarray:
|
152
148
|
assert target.shape == (SE3.space_dim,)
|
153
|
-
|
149
|
+
rotated_target = np.empty(SE3.space_dim, dtype=np.float64)
|
150
|
+
mujoco.mju_rotVecQuat(rotated_target, target, self.wxyz_xyz[:4])
|
151
|
+
return rotated_target + self.wxyz_xyz[4:]
|
154
152
|
|
155
153
|
def multiply(self, other: SE3) -> SE3:
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
154
|
+
wxyz_xyz = np.empty(SE3.parameters_dim, dtype=np.float64)
|
155
|
+
mujoco.mju_mulQuat(wxyz_xyz[:4], self.wxyz_xyz[:4], other.wxyz_xyz[:4])
|
156
|
+
mujoco.mju_rotVecQuat(wxyz_xyz[4:], other.wxyz_xyz[4:], self.wxyz_xyz[:4])
|
157
|
+
wxyz_xyz[4:] += self.wxyz_xyz[4:]
|
158
|
+
return SE3(wxyz_xyz=wxyz_xyz)
|
160
159
|
|
161
160
|
def log(self) -> np.ndarray:
|
162
161
|
omega = self.rotation().log()
|
163
|
-
|
164
|
-
|
162
|
+
theta = np.float64(mujoco.mju_norm3(omega))
|
163
|
+
t2 = theta * theta
|
165
164
|
skew_omega = skew(omega)
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
if use_taylor:
|
171
|
-
V_inv = (
|
172
|
-
np.eye(3, dtype=np.float64) - 0.5 * skew_omega + skew_omega_norm / 12.0
|
165
|
+
skew_omega2 = skew_omega @ skew_omega
|
166
|
+
if t2 < get_epsilon(t2.dtype):
|
167
|
+
vinv_mat = (
|
168
|
+
np.eye(3, dtype=np.float64) - 0.5 * skew_omega + skew_omega2 / 12.0
|
173
169
|
)
|
174
170
|
else:
|
175
|
-
|
171
|
+
half_theta = 0.5 * theta
|
172
|
+
vinv_mat = (
|
176
173
|
np.eye(3, dtype=np.float64)
|
177
174
|
- 0.5 * skew_omega
|
178
|
-
+ (
|
179
|
-
|
180
|
-
|
181
|
-
* np.cos(half_theta_safe)
|
182
|
-
/ (2.0 * np.sin(half_theta_safe))
|
183
|
-
)
|
184
|
-
/ theta_squared_safe
|
185
|
-
* skew_omega_norm
|
175
|
+
+ (1.0 - 0.5 * theta * np.cos(half_theta) / np.sin(half_theta))
|
176
|
+
/ t2
|
177
|
+
* skew_omega2
|
186
178
|
)
|
187
|
-
|
179
|
+
tangent = np.empty(SE3.tangent_dim, dtype=np.float64)
|
180
|
+
tangent[:3] = vinv_mat @ self.translation()
|
181
|
+
tangent[3:] = omega
|
182
|
+
return tangent
|
188
183
|
|
189
184
|
def adjoint(self) -> np.ndarray:
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
185
|
+
rotation = self.rotation()
|
186
|
+
rotation_mat = rotation.as_matrix()
|
187
|
+
tangent_mat = skew(self.translation()) @ rotation_mat
|
188
|
+
adjoint_mat = np.zeros((SE3.tangent_dim, SE3.tangent_dim), dtype=np.float64)
|
189
|
+
adjoint_mat[:3, :3] = rotation_mat
|
190
|
+
adjoint_mat[:3, 3:] = tangent_mat
|
191
|
+
adjoint_mat[3:, 3:] = rotation_mat
|
192
|
+
return adjoint_mat
|
197
193
|
|
198
194
|
# Jacobians.
|
199
195
|
|
200
196
|
# Eqn 179 a)
|
201
197
|
@classmethod
|
202
198
|
def ljac(cls, other: np.ndarray) -> np.ndarray:
|
203
|
-
|
204
|
-
if
|
199
|
+
theta_squared = np.float64(mujoco.mju_dot3(other[3:], other[3:]))
|
200
|
+
if theta_squared < get_epsilon(theta_squared.dtype):
|
205
201
|
return np.eye(cls.tangent_dim)
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
202
|
+
ljac_se3 = np.zeros((cls.tangent_dim, cls.tangent_dim), dtype=np.float64)
|
203
|
+
ljac_translation = _getQ(other)
|
204
|
+
ljac_so3 = SO3.ljac(other[3:])
|
205
|
+
ljac_se3[:3, :3] = ljac_so3
|
206
|
+
ljac_se3[:3, 3:] = ljac_translation
|
207
|
+
ljac_se3[3:, 3:] = ljac_so3
|
208
|
+
return ljac_se3
|
210
209
|
|
211
210
|
# Eqn 179 b)
|
212
211
|
@classmethod
|
213
212
|
def ljacinv(cls, other: np.ndarray) -> np.ndarray:
|
214
|
-
|
215
|
-
if
|
213
|
+
theta_squared = np.float64(mujoco.mju_dot3(other[3:], other[3:]))
|
214
|
+
if theta_squared < get_epsilon(theta_squared.dtype):
|
216
215
|
return np.eye(cls.tangent_dim)
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
216
|
+
ljacinv_se3 = np.zeros((cls.tangent_dim, cls.tangent_dim), dtype=np.float64)
|
217
|
+
ljac_translation = _getQ(other)
|
218
|
+
ljacinv_so3 = SO3.ljacinv(other[3:])
|
219
|
+
ljacinv_se3[:3, :3] = ljacinv_so3
|
220
|
+
ljacinv_se3[:3, 3:] = -ljacinv_so3 @ ljac_translation @ ljacinv_so3
|
221
|
+
ljacinv_se3[3:, 3:] = ljacinv_so3
|
222
|
+
return ljacinv_se3
|
221
223
|
|
222
224
|
|
223
225
|
# Eqn 180.
|
224
226
|
def _getQ(c) -> np.ndarray:
|
225
|
-
|
227
|
+
theta = np.float64(mujoco.mju_norm3(c[3:]))
|
228
|
+
t2 = theta * theta
|
226
229
|
A = 0.5
|
227
|
-
if
|
228
|
-
B = (1.0 / 6.0) + (1.0 / 120.0) *
|
229
|
-
C = -(1.0 / 24.0) + (1.0 / 720.0) *
|
230
|
+
if t2 < get_epsilon(t2.dtype):
|
231
|
+
B = (1.0 / 6.0) + (1.0 / 120.0) * t2
|
232
|
+
C = -(1.0 / 24.0) + (1.0 / 720.0) * t2
|
230
233
|
D = -(1.0 / 60.0)
|
231
234
|
else:
|
232
|
-
|
235
|
+
t4 = t2 * t2
|
233
236
|
sin_theta = np.sin(theta)
|
234
237
|
cos_theta = np.cos(theta)
|
235
|
-
B = (theta - sin_theta) / (
|
236
|
-
C = (1.0 -
|
237
|
-
D = (
|
238
|
-
(2) * theta_sq * theta_sq * theta
|
239
|
-
)
|
238
|
+
B = (theta - sin_theta) / (t2 * theta)
|
239
|
+
C = (1.0 - 0.5 * t2 - cos_theta) / t4
|
240
|
+
D = (2.0 * theta - 3.0 * sin_theta + theta * cos_theta) / (2.0 * t4 * theta)
|
240
241
|
V = skew(c[:3])
|
241
242
|
W = skew(c[3:])
|
242
243
|
VW = V @ W
|
@@ -246,6 +247,6 @@ def _getQ(c) -> np.ndarray:
|
|
246
247
|
return (
|
247
248
|
+A * V
|
248
249
|
+ B * (WV + VW + WVW)
|
249
|
-
- C * (VWW - VWW.T - 3 * WVW)
|
250
|
+
- C * (VWW - VWW.T - 3.0 * WVW)
|
250
251
|
+ D * (WVW @ W + W @ WVW)
|
251
252
|
)
|
mink/lie/so3.py
CHANGED
@@ -7,10 +7,9 @@ import mujoco
|
|
7
7
|
import numpy as np
|
8
8
|
|
9
9
|
from .base import MatrixLieGroup
|
10
|
-
from .utils import get_epsilon
|
10
|
+
from .utils import get_epsilon
|
11
11
|
|
12
12
|
_IDENTITIY_WXYZ = np.array([1.0, 0.0, 0.0, 0.0], dtype=np.float64)
|
13
|
-
_INVERT_QUAT_SIGN = np.array([1.0, -1.0, -1.0, -1.0], dtype=np.float64)
|
14
13
|
|
15
14
|
|
16
15
|
class RollPitchYaw(NamedTuple):
|
@@ -137,63 +136,47 @@ class SO3(MatrixLieGroup):
|
|
137
136
|
yaw=self.compute_yaw_radians(),
|
138
137
|
)
|
139
138
|
|
140
|
-
# Paragraph above Appendix B.A.
|
141
139
|
def inverse(self) -> SO3:
|
142
|
-
|
140
|
+
conjugate_wxyz = np.empty(4)
|
141
|
+
mujoco.mju_negQuat(conjugate_wxyz, self.wxyz)
|
142
|
+
return SO3(wxyz=conjugate_wxyz)
|
143
143
|
|
144
144
|
def normalize(self) -> SO3:
|
145
|
-
|
145
|
+
normalized_wxyz = np.array(self.wxyz)
|
146
|
+
mujoco.mju_normalize4(normalized_wxyz)
|
147
|
+
return SO3(wxyz=normalized_wxyz)
|
146
148
|
|
147
149
|
# Eq. 136.
|
148
150
|
def apply(self, target: np.ndarray) -> np.ndarray:
|
149
151
|
assert target.shape == (SO3.space_dim,)
|
150
|
-
|
151
|
-
|
152
|
+
rotated_target = np.empty(SO3.space_dim, dtype=np.float64)
|
153
|
+
mujoco.mju_rotVecQuat(rotated_target, target, self.wxyz)
|
154
|
+
return rotated_target
|
152
155
|
|
153
156
|
def multiply(self, other: SO3) -> SO3:
|
154
157
|
res = np.empty(self.parameters_dim, dtype=np.float64)
|
155
158
|
mujoco.mju_mulQuat(res, self.wxyz, other.wxyz)
|
156
159
|
return SO3(wxyz=res)
|
157
160
|
|
158
|
-
##
|
159
|
-
#
|
160
|
-
##
|
161
|
-
|
162
161
|
# Eq. 132.
|
163
162
|
@classmethod
|
164
163
|
def exp(cls, tangent: np.ndarray) -> SO3:
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
safe_theta = 1.0 if use_taylor else np.sqrt(theta_squared)
|
170
|
-
safe_half_theta = 0.5 * safe_theta
|
171
|
-
if use_taylor:
|
172
|
-
real = 1.0 - theta_squared / 8.0 + theta_pow_4 / 384.0
|
173
|
-
imaginary = 0.5 - theta_squared / 48.0 + theta_pow_4 / 3840.0
|
174
|
-
else:
|
175
|
-
real = np.cos(safe_half_theta)
|
176
|
-
imaginary = np.sin(safe_half_theta) / safe_theta
|
177
|
-
wxyz = np.concatenate([np.array([real]), imaginary * tangent])
|
164
|
+
axis = np.array(tangent)
|
165
|
+
theta = mujoco.mju_normalize3(axis)
|
166
|
+
wxyz = np.zeros(4)
|
167
|
+
mujoco.mju_axisAngle2Quat(wxyz, axis, theta)
|
178
168
|
return SO3(wxyz=wxyz)
|
179
169
|
|
180
170
|
# Eq. 133.
|
181
171
|
def log(self) -> np.ndarray:
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
norm_safe = 1.0 if use_taylor else np.sqrt(norm_sq)
|
186
|
-
w_safe = w if use_taylor else 1.0
|
187
|
-
atan_n_over_w = np.arctan2(-norm_safe if w < 0 else norm_safe, abs(w))
|
188
|
-
if use_taylor:
|
189
|
-
atan_factor = 2.0 / w_safe - 2.0 / 3.0 * norm_sq / w_safe**3
|
172
|
+
if self.wxyz[0] < 0.0:
|
173
|
+
theta = 2.0 * np.arccos(-self.wxyz[0])
|
174
|
+
axis = -1.0 * np.array(self.wxyz[1:])
|
190
175
|
else:
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
atan_factor = 2.0 * atan_n_over_w / norm_safe
|
196
|
-
return atan_factor * self.wxyz[1:]
|
176
|
+
theta = 2.0 * np.arccos(self.wxyz[0])
|
177
|
+
axis = np.array(self.wxyz[1:])
|
178
|
+
mujoco.mju_normalize3(axis)
|
179
|
+
return theta * axis
|
197
180
|
|
198
181
|
# Eq. 139.
|
199
182
|
def adjoint(self) -> np.ndarray:
|
@@ -204,28 +187,73 @@ class SO3(MatrixLieGroup):
|
|
204
187
|
# Eqn. 145, 174.
|
205
188
|
@classmethod
|
206
189
|
def ljac(cls, other: np.ndarray) -> np.ndarray:
|
207
|
-
theta = np.
|
208
|
-
|
209
|
-
if
|
210
|
-
|
211
|
-
|
212
|
-
|
190
|
+
theta = np.float64(mujoco.mju_norm3(other))
|
191
|
+
t2 = theta * theta
|
192
|
+
if theta < get_epsilon(theta.dtype):
|
193
|
+
alpha = (1.0 / 2.0) * (
|
194
|
+
1.0 - t2 / 12.0 * (1.0 - t2 / 30.0 * (1.0 - t2 / 56.0))
|
195
|
+
)
|
196
|
+
beta = (1.0 / 6.0) * (
|
197
|
+
1.0 - t2 / 20.0 * (1.0 - t2 / 42.0 * (1.0 - t2 / 72.0))
|
198
|
+
)
|
213
199
|
else:
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
200
|
+
t3 = t2 * theta
|
201
|
+
alpha = (1 - np.cos(theta)) / t2
|
202
|
+
beta = (theta - np.sin(theta)) / t3
|
203
|
+
# ljac = eye(3) + alpha * skew_other + beta * (skew_other @ skew_other)
|
204
|
+
ljac = np.empty((3, 3))
|
205
|
+
# skew_other @ skew_other == outer(other) - inner(other) * eye(3)
|
206
|
+
mujoco.mju_mulMatMat(ljac, other.reshape(3, 1), other.reshape(1, 3))
|
207
|
+
inner_product = mujoco.mju_dot3(other, other)
|
208
|
+
ljac[0, 0] -= inner_product
|
209
|
+
ljac[1, 1] -= inner_product
|
210
|
+
ljac[2, 2] -= inner_product
|
211
|
+
ljac *= beta
|
212
|
+
# + alpha * skew_other
|
213
|
+
alpha_vec = alpha * other
|
214
|
+
ljac[0, 1] += -alpha_vec[2]
|
215
|
+
ljac[0, 2] += alpha_vec[1]
|
216
|
+
ljac[1, 0] += alpha_vec[2]
|
217
|
+
ljac[1, 2] += -alpha_vec[0]
|
218
|
+
ljac[2, 0] += -alpha_vec[1]
|
219
|
+
ljac[2, 1] += alpha_vec[0]
|
220
|
+
# + eye(3)
|
221
|
+
ljac[0, 0] += 1.0
|
222
|
+
ljac[1, 1] += 1.0
|
223
|
+
ljac[2, 2] += 1.0
|
224
|
+
return ljac
|
218
225
|
|
219
226
|
@classmethod
|
220
227
|
def ljacinv(cls, other: np.ndarray) -> np.ndarray:
|
221
|
-
theta = np.
|
222
|
-
|
223
|
-
if
|
224
|
-
|
225
|
-
|
228
|
+
theta = np.float64(mujoco.mju_norm3(other))
|
229
|
+
t2 = theta * theta
|
230
|
+
if theta < get_epsilon(theta.dtype):
|
231
|
+
beta = (1.0 / 12.0) * (
|
232
|
+
1.0 + t2 / 60.0 * (1.0 + t2 / 42.0 * (1.0 + t2 / 40.0))
|
233
|
+
)
|
226
234
|
else:
|
227
|
-
|
235
|
+
beta = (1.0 / t2) * (
|
228
236
|
1.0 - (theta * np.sin(theta) / (2.0 * (1.0 - np.cos(theta))))
|
229
237
|
)
|
230
|
-
|
231
|
-
|
238
|
+
# ljacinv = eye(3) - 0.5 * skew_other + beta * (skew_other @ skew_other)
|
239
|
+
ljacinv = np.empty((3, 3))
|
240
|
+
# skew_other @ skew_other == outer(other) - inner(other) * eye(3)
|
241
|
+
mujoco.mju_mulMatMat(ljacinv, other.reshape(3, 1), other.reshape(1, 3))
|
242
|
+
inner_product = mujoco.mju_dot3(other, other)
|
243
|
+
ljacinv[0, 0] -= inner_product
|
244
|
+
ljacinv[1, 1] -= inner_product
|
245
|
+
ljacinv[2, 2] -= inner_product
|
246
|
+
ljacinv *= beta
|
247
|
+
# - 0.5 * skew_other
|
248
|
+
alpha_vec = -0.5 * other
|
249
|
+
ljacinv[0, 1] += -alpha_vec[2]
|
250
|
+
ljacinv[0, 2] += alpha_vec[1]
|
251
|
+
ljacinv[1, 0] += alpha_vec[2]
|
252
|
+
ljacinv[1, 2] += -alpha_vec[0]
|
253
|
+
ljacinv[2, 0] += -alpha_vec[1]
|
254
|
+
ljacinv[2, 1] += alpha_vec[0]
|
255
|
+
# + eye(3)
|
256
|
+
ljacinv[0, 0] += 1.0
|
257
|
+
ljacinv[1, 1] += 1.0
|
258
|
+
ljacinv[2, 2] += 1.0
|
259
|
+
return ljacinv
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.4
|
2
2
|
Name: mink
|
3
|
-
Version: 0.0.
|
3
|
+
Version: 0.0.9
|
4
4
|
Summary: mink: MuJoCo inverse kinematics.
|
5
5
|
Keywords: inverse,kinematics,mujoco
|
6
6
|
Author-email: Kevin Zakka <zakka@berkeley.edu>
|
@@ -21,7 +21,7 @@ License-File: LICENSE
|
|
21
21
|
Requires-Dist: mujoco >= 3.1.6
|
22
22
|
Requires-Dist: qpsolvers[daqp] >= 4.3.1
|
23
23
|
Requires-Dist: typing_extensions
|
24
|
-
Requires-Dist: numpy
|
24
|
+
Requires-Dist: numpy
|
25
25
|
Requires-Dist: mink[examples, dev] ; extra == "all"
|
26
26
|
Requires-Dist: black ; extra == "dev"
|
27
27
|
Requires-Dist: mink[test] ; extra == "dev"
|
@@ -333,8 +333,8 @@ mink/contrib/keyboard_teleop/keycodes.py,sha256=1AN3bWpkw99ZjrkIQnu8QdHSz-_boWMY
|
|
333
333
|
mink/contrib/keyboard_teleop/teleop_mocap.py,sha256=2cuauiBHsQb6IVruRbGtCumdHQazEGvt9w2L50eKGzw,8095
|
334
334
|
mink/lie/__init__.py,sha256=7tm3ZFnF3o1SDd9MOFO1In13lHMQJHO0FB-ejI6tsgE,202
|
335
335
|
mink/lie/base.py,sha256=8TGWWEWRvmoBsJP-9y1YXQHkTC-TFfI8JDvBFKxxP-A,4865
|
336
|
-
mink/lie/se3.py,sha256=
|
337
|
-
mink/lie/so3.py,sha256=
|
336
|
+
mink/lie/se3.py,sha256=cEzAzKEfBAQcbHhbZbhW8QZA8WpfRRaeZ0YGdSmhOx8,8634
|
337
|
+
mink/lie/so3.py,sha256=0KgvflDlUJHd_Ruy2pDlgyR7ZC1HkJz4HVxWcCLo5EY,8182
|
338
338
|
mink/lie/utils.py,sha256=DuEl3pj84daLvMKN84-YBvkXnJfqvc5vpvJ9J-pJ11U,403
|
339
339
|
mink/limits/__init__.py,sha256=hX5Dgpri9AE6YtUCkW79AXMBuNAuBhniR9kQ6Rxwv3Y,416
|
340
340
|
mink/limits/collision_avoidance_limit.py,sha256=MJXesSjvm_2O6RUEz2e4D8uTVOHyTsH9j4UxkPemcn8,11918
|
@@ -351,7 +351,7 @@ mink/tasks/frame_task.py,sha256=DeNg-bEJxqnrRI0FaJK4UHyb8CyF4A7uPF9G-CdN0sg,5307
|
|
351
351
|
mink/tasks/posture_task.py,sha256=sVDZyalCh5DP8zmCuX5kYuZxiMxRut_mTZUjv5y3b5M,3998
|
352
352
|
mink/tasks/relative_frame_task.py,sha256=9rIiYocI1eEESt0bLZZpQR7K6ggVRZH8iEhdhzkfZa0,5119
|
353
353
|
mink/tasks/task.py,sha256=F16YZT1L9ueNOcKoOhbCyEnZw0DOgrmjqADl0jahVQI,4838
|
354
|
-
mink-0.0.
|
355
|
-
mink-0.0.
|
356
|
-
mink-0.0.
|
357
|
-
mink-0.0.
|
354
|
+
mink-0.0.9.dist-info/licenses/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
|
355
|
+
mink-0.0.9.dist-info/WHEEL,sha256=G2gURzTEtmeR8nrdXUJfNiB3VYVxigPQ-bEQujpNiNs,82
|
356
|
+
mink-0.0.9.dist-info/METADATA,sha256=PbX9fwluNc1-M5fB8cuJnPD33Flma45GzAU5yd6myfg,5606
|
357
|
+
mink-0.0.9.dist-info/RECORD,,
|
File without changes
|
File without changes
|