12
12
#include <math.h>
13
13
#include "fknm.h"
14
14
#include <stdio.h>
15
+ // #include "findblas.h"
16
+ // #include <npy_cblas.h>
15
17
16
18
// forward defines
17
19
static PyObject * IK (PyObject * self , PyObject * args );
@@ -1284,25 +1286,43 @@ void _ETS_IK(PyObject *ets, int n, npy_float64 *q, npy_float64 *Tep, npy_float64
1284
1286
npy_float64 * e = (npy_float64 * )PyMem_RawCalloc (6 , sizeof (npy_float64 ));
1285
1287
1286
1288
npy_float64 * a = (npy_float64 * )PyMem_RawCalloc (6 , sizeof (npy_float64 ));
1289
+ // a[0] = 1.0;
1290
+ // a[1] = 4.0;
1291
+ // a[2] = 2.0;
1292
+ // a[3] = 5.0;
1293
+ // a[4] = 3.0;
1294
+ // a[5] = 6.0;
1287
1295
a [0 ] = 1.0 ;
1288
- a [1 ] = 4 .0 ;
1289
- a [2 ] = 2 .0 ;
1290
- a [3 ] = 5 .0 ;
1291
- a [4 ] = 3 .0 ;
1296
+ a [1 ] = 2 .0 ;
1297
+ a [2 ] = 3 .0 ;
1298
+ a [3 ] = 4 .0 ;
1299
+ a [4 ] = 5 .0 ;
1292
1300
a [5 ] = 6.0 ;
1293
1301
npy_float64 * b = (npy_float64 * )PyMem_RawCalloc (12 , sizeof (npy_float64 ));
1294
1302
b [0 ] = 11.0 ;
1295
- b [1 ] = 12 .0 ;
1296
- b [2 ] = 13 .0 ;
1297
- b [3 ] = 14 .0 ;
1298
- b [4 ] = 15 .0 ;
1299
- b [5 ] = 16 .0 ;
1300
- b [6 ] = 17 .0 ;
1301
- b [7 ] = 18 .0 ;
1302
- b [8 ] = 19 .0 ;
1303
- b [9 ] = 20 .0 ;
1304
- b [10 ] = 21 .0 ;
1303
+ b [1 ] = 15 .0 ;
1304
+ b [2 ] = 19 .0 ;
1305
+ b [3 ] = 12 .0 ;
1306
+ b [4 ] = 16 .0 ;
1307
+ b [5 ] = 20 .0 ;
1308
+ b [6 ] = 13 .0 ;
1309
+ b [7 ] = 17 .0 ;
1310
+ b [8 ] = 21 .0 ;
1311
+ b [9 ] = 14 .0 ;
1312
+ b [10 ] = 18 .0 ;
1305
1313
b [11 ] = 22.0 ;
1314
+ // b[0] = 11.0;
1315
+ // b[1] = 12.0;
1316
+ // b[2] = 13.0;
1317
+ // b[3] = 14.0;
1318
+ // b[4] = 15.0;
1319
+ // b[5] = 16.0;
1320
+ // b[6] = 17.0;
1321
+ // b[7] = 18.0;
1322
+ // b[8] = 19.0;
1323
+ // b[9] = 20.0;
1324
+ // b[10] = 21.0;
1325
+ // b[11] = 22.0;
1306
1326
1307
1327
// npy_float64 *U = (npy_float64 *)PyMem_RawCalloc(16, sizeof(npy_float64));
1308
1328
// npy_float64 *invU = (npy_float64 *)PyMem_RawCalloc(16, sizeof(npy_float64));
@@ -1311,22 +1331,33 @@ void _ETS_IK(PyObject *ets, int n, npy_float64 *q, npy_float64 *Tep, npy_float64
1311
1331
// Py_ssize_t m;
1312
1332
int arrived = 0 , iter = 0 ;
1313
1333
1314
- // while (arrived == 0 && iter < 500)
1315
- // {
1316
- // // Current pose Te
1317
- // _ETS_fkine(ets, q, (npy_float64 *)NULL, NULL, Te);
1334
+ while (arrived == 0 && iter < 500 )
1335
+ {
1336
+ // Current pose Te
1337
+ _ETS_fkine (ets , q , (npy_float64 * )NULL , NULL , Te );
1318
1338
1319
- // // Angle axis error e
1320
- // _angle_axis(Te, Tep, e);
1339
+ // Angle axis error e
1340
+ _angle_axis (Te , Tep , e );
1321
1341
1322
- // // Squared error E
1323
- // // E = 0.5 * e @ We @ e
1324
- // E = 0.5 * (e[0] * e[0] + e[1] * e[1] + e[2] * e[2] + e[3] * e[3] + e[4] * e[4] + e[5] * e[5]);
1325
- // }
1342
+ // Squared error E
1343
+ // E = 0.5 * e @ We @ e
1344
+ E = 0.5 * (e [0 ] * e [0 ] + e [1 ] * e [1 ] + e [2 ] * e [2 ] + e [3 ] * e [3 ] + e [4 ] * e [4 ] + e [5 ] * e [5 ]);
1345
+ }
1326
1346
1327
- _ETS_fkine (ets , q , (npy_float64 * )NULL , NULL , Te );
1347
+ // _ETS_fkine(ets, q, (npy_float64 *)NULL, NULL, Te);
1328
1348
1329
- _mult_T (3 , 2 , 1 , a , 3 , 4 , 0 , b , ret );
1349
+ // for (int i = 0; i < 2; i++)
1350
+ // {
1351
+ // for (int j = 0; j < 4; j++)
1352
+ // {
1353
+ // ret[i * 4 + j] = 0.0;
1354
+ // }
1355
+ // }
1356
+
1357
+ // _mult_T(2, 3, 0, a, 3, 4, 0, b, ret);
1358
+ // _mult_T(3, 2, 1, a, 3, 4, 0, b, ret);
1359
+ // _mult_T(3, 2, 1, a, 4, 3, 1, b, ret);
1360
+ // _mult_T(2, 3, 0, a, 4, 3, 1, b, ret);
1330
1361
1331
1362
int j = 0 ;
1332
1363
}
@@ -1608,7 +1639,8 @@ void _ETS_fkine(PyObject *ets, npy_float64 *q, npy_float64 *base, npy_float64 *t
1608
1639
return ;
1609
1640
1610
1641
_ET_T (et , ret , q [et -> jindex ]);
1611
- mult (current , ret , temp );
1642
+ // mult(current, ret, temp);
1643
+ // cblas_sgemm(CblasRowMajor, CblasNoTrans, CblasNoTrans, 4, 4, 4, 1.0, current, 4, ret, 4, 0.0, temp, 4);
1612
1644
copy (temp , current );
1613
1645
}
1614
1646
@@ -2283,17 +2315,17 @@ void _mult_T(int n, int m, int AT, npy_float64 *A, int p, int q, int BT, npy_flo
2283
2315
2284
2316
if (AT )
2285
2317
{
2286
- n = temp ;
2318
+ temp = n ;
2287
2319
n = m ;
2288
2320
m = temp ;
2289
2321
}
2290
2322
2291
- // if (BT)
2292
- // {
2293
- // p = temp ;
2294
- // p = q;
2295
- // q = temp;
2296
- // }
2323
+ if (BT )
2324
+ {
2325
+ temp = p ;
2326
+ p = q ;
2327
+ q = temp ;
2328
+ }
2297
2329
2298
2330
for (i = 0 ; i < n ; i ++ )
2299
2331
{
@@ -2304,21 +2336,21 @@ void _mult_T(int n, int m, int AT, npy_float64 *A, int p, int q, int BT, npy_flo
2304
2336
{
2305
2337
if (AT )
2306
2338
{
2307
- a = A [k * m + i ];
2339
+ a = A [k * n + i ];
2308
2340
}
2309
2341
else
2310
2342
{
2311
2343
a = A [i * m + k ];
2312
2344
}
2313
2345
2314
- // if (BT)
2315
- // {
2316
- // b = B[j * q + k];
2317
- // }
2318
- // else
2319
- // {
2320
- b = B [k * q + j ];
2321
- // }
2346
+ if (BT )
6F51
tr>
2347
+ {
2348
+ b = B [j * p + k ];
2349
+ }
2350
+ else
2351
+ {
2352
+ b = B [k * q + j ];
2353
+ }
2322
2354
2323
2355
num += a * b ;
2324
2356
}
0 commit comments