GCC Code Coverage Report
Directory: ./ Exec Total Coverage
File: src/talos-common.cpp Lines: 0 138 0.0 %
Date: 2022-09-09 06:27:03 Branches: 0 178 0.0 %

Line Branch Exec Source
1
/*
2
 * Copyright 2014, Oscar E. Ramos Ponce, LAAS-CNRS
3
 *
4
 */
5
6
#include <dynamic-graph/factory.h>
7
8
#include <sot/core/debug.hh>
9
#include <sot/torque-control/talos-common.hh>
10
11
namespace dynamicgraph {
12
namespace sot {
13
namespace torque_control {
14
namespace dg = ::dynamicgraph;
15
using namespace dg;
16
using namespace dg::command;
17
18
bool base_se3_to_sot(dg::sot::ConstRefVector pos, dg::sot::ConstRefMatrix R,
19
                     dg::sot::RefVector q_sot) {
20
  assert(q_sot.size() == 6);
21
  assert(pos.size() == 3);
22
  assert(R.rows() == 3);
23
  assert(R.cols() == 3);
24
  // ********* Quat to RPY *********
25
  double r, p, y, m;
26
  m = sqrt(R(2, 1) * R(2, 1) + R(2, 2) * R(2, 2));
27
  p = atan2(-R(2, 0), m);
28
  if (abs(abs(p) - M_PI / 2) < 0.001) {
29
    r = 0.0;
30
    y = -atan2(R(0, 1), R(1, 1));
31
  } else {
32
    y = atan2(R(1, 0), R(0, 0));
33
    r = atan2(R(2, 1), R(2, 2));
34
  }
35
  // *********************************
36
  q_sot[0] = pos[0];
37
  q_sot[1] = pos[1];
38
  q_sot[2] = pos[2];
39
  q_sot[3] = r;
40
  q_sot[4] = p;
41
  q_sot[5] = y;
42
  return true;
43
}
44
45
bool base_urdf_to_sot(dg::sot::ConstRefVector q_urdf,
46
                      dg::sot::RefVector q_sot) {
47
  assert(q_urdf.size() == 7);
48
  assert(q_sot.size() == 6);
49
  // ********* Quat to RPY *********
50
  const double W = q_urdf[6];
51
  const double X = q_urdf[3];
52
  const double Y = q_urdf[4];
53
  const double Z = q_urdf[5];
54
  const Eigen::Matrix3d R = Eigen::Quaterniond(W, X, Y, Z).toRotationMatrix();
55
  return base_se3_to_sot(q_urdf.head<3>(), R, q_sot);
56
}
57
58
bool base_sot_to_urdf(dg::sot::ConstRefVector q_sot,
59
                      dg::sot::RefVector q_urdf) {
60
  assert(q_urdf.size() == 7);
61
  assert(q_sot.size() == 6);
62
  // *********  RPY to Quat *********
63
  const double r = q_sot[3];
64
  const double p = q_sot[4];
65
  const double y = q_sot[5];
66
  const Eigen::AngleAxisd rollAngle(r, Eigen::Vector3d::UnitX());
67
  const Eigen::AngleAxisd pitchAngle(p, Eigen::Vector3d::UnitY());
68
  const Eigen::AngleAxisd yawAngle(y, Eigen::Vector3d::UnitZ());
69
  const Eigen::Quaternion<double> quat = yawAngle * pitchAngle * rollAngle;
70
71
  q_urdf[0] = q_sot[0];  // BASE
72
  q_urdf[1] = q_sot[1];
73
  q_urdf[2] = q_sot[2];
74
  q_urdf[3] = quat.x();
75
  q_urdf[4] = quat.y();
76
  q_urdf[5] = quat.z();
77
  q_urdf[6] = quat.w();
78
79
  return true;
80
}
81
82
bool config_urdf_to_sot(dg::sot::ConstRefVector q_urdf,
83
                        dg::sot::RefVector q_sot) {
84
  assert(q_urdf.size() == N_JOINTS + 7);
85
  assert(q_sot.size() == N_JOINTS + 6);
86
  // ********* Quat to RPY *********
87
  //        const double W = q_urdf[6];
88
  //        const double X = q_urdf[3];
89
  //        const double Y = q_urdf[4];
90
  //        const double Z = q_urdf[5];
91
  //        const Eigen::Matrix3d M = Eigen::Quaterniond(W, X, Y,
92
  //        Z).toRotationMatrix(); double r,p,y,m; m = sqrt(M(2, 1) *M(2, 1) +
93
  //        M(2, 2) * M(2, 2)); p = atan2(-M(2, 0), m); if (abs(abs(p) - M_PI /
94
  //        2) < 0.001 )
95
  //        {
96
  //          r = 0;
97
  //          y = -atan2(M(0, 1), M(1, 1));
98
  //        }
99
  //        else
100
  //        {
101
  //          y = atan2(M(1, 0), M(0, 0)) ;
102
  //          r = atan2(M(2, 1), M(2, 2)) ;
103
  //        }
104
  //        // *********************************
105
  //        q_sot[0 ]=q_urdf[0 ]; //BASE
106
  //        q_sot[1 ]=q_urdf[1 ];
107
  //        q_sot[2 ]=q_urdf[2 ];
108
  //        q_sot[3 ]=r;
109
  //        q_sot[4 ]=p;
110
  //        q_sot[5 ]=y;
111
  base_urdf_to_sot(q_urdf.head<7>(), q_sot.head<6>());
112
  joints_urdf_to_sot(q_urdf.tail<N_JOINTS>(), q_sot.tail<N_JOINTS>());
113
  //        q_sot[18]=q_urdf[7 ]; //HEAD
114
  //        q_sot[19]=q_urdf[8 ];
115
116
  //        q_sot[20]=q_urdf[9 ]; //CHEST
117
  //        q_sot[21]=q_urdf[10];
118
119
  //        q_sot[29]=q_urdf[11]; //LARM
120
  //        q_sot[30]=q_urdf[12];
121
  //        q_sot[31]=q_urdf[13];
122
  //        q_sot[32]=q_urdf[14];
123
  //        q_sot[33]=q_urdf[15];
124
  //        q_sot[34]=q_urdf[16];
125
  //        q_sot[35]=q_urdf[17];
126
127
  //        q_sot[22]=q_urdf[18]; //RARM
128
  //        q_sot[23]=q_urdf[19];
129
  //        q_sot[24]=q_urdf[20];
130
  //        q_sot[25]=q_urdf[21];
131
  //        q_sot[26]=q_urdf[22];
132
  //        q_sot[27]=q_urdf[23];
133
  //        q_sot[28]=q_urdf[24];
134
135
  //        q_sot[12]=q_urdf[25]; //LLEG
136
  //        q_sot[13]=q_urdf[26];
137
  //        q_sot[14]=q_urdf[27];
138
  //        q_sot[15]=q_urdf[28];
139
  //        q_sot[16]=q_urdf[29];
140
  //        q_sot[17]=q_urdf[30];
141
142
  //        q_sot[6 ]=q_urdf[31]; //RLEG
143
  //        q_sot[7 ]=q_urdf[32];
144
  //        q_sot[8 ]=q_urdf[33];
145
  //        q_sot[9 ]=q_urdf[34];
146
  //        q_sot[10]=q_urdf[35];
147
  //        q_sot[11]=q_urdf[36];
148
  return true;
149
}
150
151
bool config_sot_to_urdf(dg::sot::ConstRefVector q_sot,
152
                        dg::sot::RefVector q_urdf) {
153
  assert(q_urdf.size() == N_JOINTS + 7);
154
  assert(q_sot.size() == N_JOINTS + 6);
155
  // *********  RPY to Quat *********
156
  //        const double r = q_sot[3];
157
  //        const double p = q_sot[4];
158
  //        const double y = q_sot[5];
159
  //        const Eigen::AngleAxisd  rollAngle(r, Eigen::Vector3d::UnitX());
160
  //        const Eigen::AngleAxisd pitchAngle(p, Eigen::Vector3d::UnitY());
161
  //        const Eigen::AngleAxisd   yawAngle(y, Eigen::Vector3d::UnitZ());
162
  //        const Eigen::Quaternion<double> quat = yawAngle * pitchAngle *
163
  //        rollAngle;
164
165
  //        q_urdf[0 ]=q_sot[0 ]; //BASE
166
  //        q_urdf[1 ]=q_sot[1 ];
167
  //        q_urdf[2 ]=q_sot[2 ];
168
  //        q_urdf[3 ]=quat.x();
169
  //        q_urdf[4 ]=quat.y();
170
  //        q_urdf[5 ]=quat.z();
171
  //        q_urdf[6 ]=quat.w();
172
173
  base_sot_to_urdf(q_sot.head<6>(), q_urdf.head<7>());
174
  joints_sot_to_urdf(q_sot.tail<N_JOINTS>(), q_urdf.tail<N_JOINTS>());
175
176
  //        q_urdf[7 ]=q_sot[18]; //HEAD
177
  //        q_urdf[8 ]=q_sot[19];
178
179
  //        q_urdf[9 ]=q_sot[20]; //CHEST
180
  //        q_urdf[10]=q_sot[21];
181
182
  //        q_urdf[11]=q_sot[29]; //LARM
183
  //        q_urdf[12]=q_sot[30];
184
  //        q_urdf[13]=q_sot[31];
185
  //        q_urdf[14]=q_sot[32];
186
  //        q_urdf[15]=q_sot[33];
187
  //        q_urdf[16]=q_sot[34];
188
  //        q_urdf[17]=q_sot[35];
189
190
  //        q_urdf[18]=q_sot[22]; //RARM
191
  //        q_urdf[19]=q_sot[23];
192
  //        q_urdf[20]=q_sot[24];
193
  //        q_urdf[21]=q_sot[25];
194
  //        q_urdf[22]=q_sot[26];
195
  //        q_urdf[23]=q_sot[27];
196
  //        q_urdf[24]=q_sot[28];
197
198
  //        q_urdf[25]=q_sot[12]; //LLEG
199
  //        q_urdf[26]=q_sot[13];
200
  //        q_urdf[27]=q_sot[14];
201
  //        q_urdf[28]=q_sot[15];
202
  //        q_urdf[29]=q_sot[16];
203
  //        q_urdf[30]=q_sot[17];
204
205
  //        q_urdf[31]=q_sot[6 ]; //RLEG
206
  //        q_urdf[32]=q_sot[7 ];
207
  //        q_urdf[33]=q_sot[8 ];
208
  //        q_urdf[34]=q_sot[9 ];
209
  //        q_urdf[35]=q_sot[10];
210
  //        q_urdf[36]=q_sot[11];
211
  return true;
212
}
213
214
bool velocity_urdf_to_sot(dg::sot::ConstRefVector v_urdf,
215
                          dg::sot::RefVector v_sot) {
216
  assert(v_urdf.size() == N_JOINTS + 6);
217
  assert(v_sot.size() == N_JOINTS + 6);
218
  v_sot.head<6>() = v_urdf.head<6>();
219
  joints_urdf_to_sot(v_urdf.tail<N_JOINTS>(), v_sot.tail<N_JOINTS>());
220
221
  //        v_sot[0 ]=v_urdf[0 ]; //BASE
222
  //        v_sot[1 ]=v_urdf[1 ];
223
  //        v_sot[2 ]=v_urdf[2 ];
224
  //        v_sot[3 ]=v_urdf[3 ];
225
  //        v_sot[4 ]=v_urdf[4 ];
226
  //        v_sot[5 ]=v_urdf[5 ];
227
228
  //        v_sot[18]=v_urdf[6 ]; //HEAD
229
  //        v_sot[19]=v_urdf[7 ];
230
231
  //        v_sot[20]=v_urdf[8 ]; //CHEST
232
  //        v_sot[21]=v_urdf[9];
233
234
  //        v_sot[29]=v_urdf[10]; //LARM
235
  //        v_sot[30]=v_urdf[11];
236
  //        v_sot[31]=v_urdf[12];
237
  //        v_sot[32]=v_urdf[13];
238
  //        v_sot[33]=v_urdf[14];
239
  //        v_sot[34]=v_urdf[15];
240
  //        v_sot[35]=v_urdf[16];
241
242
  //        v_sot[22]=v_urdf[17]; //RARM
243
  //        v_sot[23]=v_urdf[18];
244
  //        v_sot[24]=v_urdf[19];
245
  //        v_sot[25]=v_urdf[20];
246
  //        v_sot[26]=v_urdf[21];
247
  //        v_sot[27]=v_urdf[22];
248
  //        v_sot[28]=v_urdf[23];
249
250
  //        v_sot[12]=v_urdf[24]; //LLEG
251
  //        v_sot[13]=v_urdf[25];
252
  //        v_sot[14]=v_urdf[26];
253
  //        v_sot[15]=v_urdf[27];
254
  //        v_sot[16]=v_urdf[28];
255
  //        v_sot[17]=v_urdf[29];
256
257
  //        v_sot[6 ]=v_urdf[30]; //RLEG
258
  //        v_sot[7 ]=v_urdf[31];
259
  //        v_sot[8 ]=v_urdf[32];
260
  //        v_sot[9 ]=v_urdf[33];
261
  //        v_sot[10]=v_urdf[34];
262
  //        v_sot[11]=v_urdf[35];
263
  return true;
264
}
265
266
bool velocity_sot_to_urdf(dg::sot::ConstRefVector v_sot,
267
                          dg::sot::RefVector v_urdf) {
268
  assert(v_urdf.size() == N_JOINTS + 6);
269
  assert(v_sot.size() == N_JOINTS + 6);
270
  v_urdf.head<6>() = v_sot.head<6>();
271
  joints_sot_to_urdf(v_sot.tail<N_JOINTS>(), v_urdf.tail<N_JOINTS>());
272
273
  //        v_urdf[0 ]=v_sot[0 ]; //BASE
274
  //        v_urdf[1 ]=v_sot[1 ];
275
  //        v_urdf[2 ]=v_sot[2 ];
276
  //        v_urdf[3 ]=v_sot[3 ];
277
  //        v_urdf[4 ]=v_sot[4 ];
278
  //        v_urdf[5 ]=v_sot[5 ];
279
280
  //        v_urdf[6 ]=v_sot[18]; //HEAD
281
  //        v_urdf[7 ]=v_sot[19];
282
283
  //        v_urdf[8 ]=v_sot[20]; //CHEST
284
  //        v_urdf[9 ]=v_sot[21];
285
286
  //        v_urdf[10]=v_sot[29]; //LARM
287
  //        v_urdf[11]=v_sot[30];
288
  //        v_urdf[12]=v_sot[31];
289
  //        v_urdf[13]=v_sot[32];
290
  //        v_urdf[14]=v_sot[33];
291
  //        v_urdf[15]=v_sot[34];
292
  //        v_urdf[16]=v_sot[35];
293
294
  //        v_urdf[17]=v_sot[22]; //RARM
295
  //        v_urdf[18]=v_sot[23];
296
  //        v_urdf[19]=v_sot[24];
297
  //        v_urdf[20]=v_sot[25];
298
  //        v_urdf[21]=v_sot[26];
299
  //        v_urdf[22]=v_sot[27];
300
  //        v_urdf[23]=v_sot[28];
301
302
  //        v_urdf[24]=v_sot[12]; //LLEG
303
  //        v_urdf[25]=v_sot[13];
304
  //        v_urdf[26]=v_sot[14];
305
  //        v_urdf[27]=v_sot[15];
306
  //        v_urdf[28]=v_sot[16];
307
  //        v_urdf[29]=v_sot[17];
308
309
  //        v_urdf[30]=v_sot[6 ]; //RLEG
310
  //        v_urdf[31]=v_sot[7 ];
311
  //        v_urdf[32]=v_sot[8 ];
312
  //        v_urdf[33]=v_sot[9 ];
313
  //        v_urdf[34]=v_sot[10];
314
  //        v_urdf[35]=v_sot[11];
315
  return true;
316
}
317
318
bool joints_urdf_to_sot(dg::sot::ConstRefVector q_urdf,
319
                        dg::sot::RefVector q_sot) {
320
  assert(q_urdf.size() == N_JOINTS);
321
  assert(q_sot.size() == N_JOINTS);
322
323
  q_sot[12] = q_urdf[0];  // HEAD
324
  q_sot[13] = q_urdf[1];
325
326
  q_sot[14] = q_urdf[2];  // CHEST
327
  q_sot[15] = q_urdf[3];
328
329
  q_sot[23] = q_urdf[4];  // LARM
330
  q_sot[24] = q_urdf[5];
331
  q_sot[25] = q_urdf[6];
332
  q_sot[26] = q_urdf[7];
333
  q_sot[27] = q_urdf[8];
334
  q_sot[28] = q_urdf[9];
335
  q_sot[29] = q_urdf[10];
336
337
  q_sot[16] = q_urdf[11];  // RARM
338
  q_sot[17] = q_urdf[12];
339
  q_sot[18] = q_urdf[13];
340
  q_sot[19] = q_urdf[14];
341
  q_sot[20] = q_urdf[15];
342
  q_sot[21] = q_urdf[16];
343
  q_sot[22] = q_urdf[17];
344
345
  q_sot[6] = q_urdf[18];  // LLEG
346
  q_sot[7] = q_urdf[19];
347
  q_sot[8] = q_urdf[20];
348
  q_sot[9] = q_urdf[21];
349
  q_sot[10] = q_urdf[22];
350
  q_sot[11] = q_urdf[23];
351
352
  q_sot[0] = q_urdf[24];  // RLEG
353
  q_sot[1] = q_urdf[25];
354
  q_sot[2] = q_urdf[26];
355
  q_sot[3] = q_urdf[27];
356
  q_sot[4] = q_urdf[28];
357
  q_sot[5] = q_urdf[29];
358
  return true;
359
}
360
361
bool joints_sot_to_urdf(dg::sot::ConstRefVector q_sot,
362
                        dg::sot::RefVector q_urdf) {
363
  assert(q_urdf.size() == N_JOINTS);
364
  assert(q_sot.size() == N_JOINTS);
365
366
  q_urdf[0] = q_sot[12];  // HEAD
367
  q_urdf[1] = q_sot[13];
368
369
  q_urdf[2] = q_sot[24];  // CHEST
370
  q_urdf[3] = q_sot[25];
371
372
  q_urdf[4] = q_sot[23];  // LARM
373
  q_urdf[5] = q_sot[24];
374
  q_urdf[6] = q_sot[25];
375
  q_urdf[7] = q_sot[26];
376
  q_urdf[8] = q_sot[27];
377
  q_urdf[9] = q_sot[28];
378
  q_urdf[10] = q_sot[29];
379
380
  q_urdf[11] = q_sot[16];  // RARM
381
  q_urdf[12] = q_sot[17];
382
  q_urdf[13] = q_sot[18];
383
  q_urdf[14] = q_sot[19];
384
  q_urdf[15] = q_sot[20];
385
  q_urdf[16] = q_sot[21];
386
  q_urdf[17] = q_sot[22];
387
388
  q_urdf[18] = q_sot[6];  // LLEG
389
  q_urdf[19] = q_sot[7];
390
  q_urdf[20] = q_sot[8];
391
  q_urdf[21] = q_sot[9];
392
  q_urdf[22] = q_sot[10];
393
  q_urdf[23] = q_sot[11];
394
395
  q_urdf[24] = q_sot[0];  // RLEG
396
  q_urdf[25] = q_sot[1];
397
  q_urdf[26] = q_sot[2];
398
  q_urdf[27] = q_sot[3];
399
  q_urdf[28] = q_sot[4];
400
  q_urdf[29] = q_sot[5];
401
  return true;
402
}
403
404
}  // namespace torque_control
405
}  // namespace sot
406
}  // namespace dynamicgraph