|
19 | 19 | fknm_ = None
|
20 | 20 |
|
21 | 21 |
|
| 22 | +def vmatmul(mat1, mat2): |
| 23 | + # mat1: (N, a, b) |
| 24 | + # mat2: (N, b) |
| 25 | + # out: (N, a) |
| 26 | + return np.matmul(mat1, mat2[:, :, None]).squeeze(-1) |
| 27 | + |
| 28 | +def vrepeat(vec, N): |
| 29 | + # vec: (...) |
| 30 | + # out: (N, ...) |
| 31 | + return np.repeat(vec[None, :], N, axis=0) |
| 32 | + |
| 33 | + |
22 | 34 | def jacob0_loop(robot, link, pts, jacob_vec, qt=None):
|
23 | 35 | """
|
24 | 36 | Non-parallel, use for loop
|
@@ -47,18 +59,18 @@ def jacob0_vec(robot, link, pts, jacob_vec, qt=None, verbose=False):
|
47 | 59 | fknm_=np.ctypeslib.load_library('roboticstoolbox/cuda/fknm','.')
|
48 | 60 | # Parallel, use cuda
|
49 | 61 | num_pts = len(pts)
|
50 |
| - pts_tool = np.repeat(np.eye(4)[None, :], len(pts), axis=0) |
| 62 | + pts_tool = vrepeat(np.eye(4), len(pts)) |
51 | 63 | pts_tool[:, :3, 3] = pts
|
52 | 64 | link_base = robot.fkine(qt, end=link)
|
53 | 65 | # pts_mat = np.array((link_base @ se3_pts).A)
|
54 | 66 | # pts_mat = np.array(link_base.A.dot(pts_tool).swapaxes(0, 1), order='C')
|
55 | 67 | # pts_mat = np.einsum('ij,ljk->lik', link_base.A, pts_tool)
|
56 | 68 | # pts_mat = np.ascontiguousarray(link_base.A.dot(pts_tool).swapaxes(0, 1))
|
57 |
| - pts_mat = np.matmul(np.repeat(link_base.A[None, :], len(pts), axis=0), pts_tool) |
| 69 | + pts_mat = np.matmul(vrepeat(link_base.A, len(pts)), pts_tool) |
58 | 70 |
|
59 | 71 | # e_pts = np.zeros((num_pts, 3))
|
60 | 72 | # pts_etool = np.array(SE3(e_pts).A)
|
61 |
| - pts_etool = np.repeat(np.eye(4)[None, :], len(pts), axis=0) |
| 73 | + pts_etool = vrepeat(np.eye(4), len(pts)) |
62 | 74 | link_As = []
|
63 | 75 | link_axes = []
|
64 | 76 | link_isjoint = []
|
@@ -171,16 +183,6 @@ def chomp(seed=0):
|
171 | 183 | AA /= dt * dt * (nq + 1)
|
172 | 184 | Ainv = np.linalg.pinv(AA)
|
173 | 185 |
|
174 |
| - def vmatmul(mat1, mat2): |
175 |
| - # mat1: (N, a, b) |
176 |
| - # mat2: (N, b) |
177 |
| - # out: (N, a) |
178 |
| - return np.matmul(mat1, mat2[:, :, None]).squeeze(-1) |
179 |
| - |
180 |
| - def vrepeat(vec, N): |
181 |
| - # vec: (...) |
182 |
| - # out: (N, ...) |
183 |
| - return np.repeat(vec[None, :], N, axis=0) |
184 | 186 |
|
185 | 187 | for t in range(iters):
|
186 | 188 | nabla_smooth = AA.dot(xi) + bb
|
|
0 commit comments