9 #include "mainwindow.h"
10 #include "ui_mainwindow.h"
14 #include <QHBoxLayout>
15 #include <QScrollArea>
17 #include <QFontMetrics>
18 #include <QMessageBox>
20 #include <QFileDialog>
22 #include "robot_interfaces.h"
23 #include <yarp/os/LogStream.h>
24 #include <yarp/dev/all.h>
27 using namespace yarp::dev;
29 MainWindow::MainWindow(QWidget *parent) :
30 QMainWindow(parent), ui(new Ui::MainWindow)
35 connect(ui->radioButton, SIGNAL(clicked()),
this, SLOT(Radio1Selected()));
36 connect(ui->radioButton_2, SIGNAL(clicked()),
this, SLOT(Radio2Selected()));
37 connect(ui->radioButton_3, SIGNAL(clicked()),
this, SLOT(Radio3Selected()));
38 connect(ui->radioButton_4, SIGNAL(clicked()),
this, SLOT(Radio4Selected()));
39 connect(ui->radioButton_5, SIGNAL(clicked()),
this, SLOT(Radio5Selected()));
40 connect(ui->radioButton_6, SIGNAL(clicked()),
this, SLOT(Radio6Selected()));
41 connect(ui->radioButton_7, SIGNAL(clicked()),
this, SLOT(Radio7Selected()));
42 connect(ui->radioButton_8, SIGNAL(clicked()),
this, SLOT(Radio8Selected()));
43 connect(ui->radioButton_9, SIGNAL(clicked()),
this, SLOT(Radio9Selected()));
44 connect(ui->radioButton_10, SIGNAL(clicked()),
this, SLOT(Radio10Selected()));
45 connect(ui->radioButton_11, SIGNAL(clicked()),
this, SLOT(Radio11Selected()));
46 connect(ui->radioButton_12, SIGNAL(clicked()),
this, SLOT(Radio12Selected()));
47 connect(ui->radioButton_13, SIGNAL(clicked()),
this, SLOT(Radio13Selected()));
48 connect(ui->radioButton_14, SIGNAL(clicked()),
this, SLOT(Radio14Selected()));
49 connect(ui->radioButton_15, SIGNAL(clicked()),
this, SLOT(Radio15Selected()));
50 connect(ui->radioButton_16, SIGNAL(clicked()),
this, SLOT(Radio16Selected()));
51 connect(ui->radioButton_17, SIGNAL(clicked()),
this, SLOT(Radio17Selected()));
52 connect(ui->radioButton_18, SIGNAL(clicked()),
this, SLOT(Radio18Selected()));
53 connect(ui->radioButton_19, SIGNAL(clicked()),
this, SLOT(Radio19Selected()));
54 connect(ui->radioButton_20, SIGNAL(clicked()),
this, SLOT(Radio20Selected()));
55 connect(ui->radioButton_21, SIGNAL(clicked()),
this, SLOT(Radio21Selected()));
56 connect(ui->radioButton_22, SIGNAL(clicked()),
this, SLOT(Radio22Selected()));
57 connect(ui->radioButton_23, SIGNAL(clicked()),
this, SLOT(Radio23Selected()));
58 connect(ui->radioButton_24, SIGNAL(clicked()),
this, SLOT(Radio24Selected()));
59 connect(ui->radioButton_25, SIGNAL(clicked()),
this, SLOT(Radio25Selected()));
61 QLocale::setDefault(QLocale::C);
62 setWindowTitle(
"demoForceControl");
65 MainWindow::~MainWindow()
70 void MainWindow::disable_left_arm()
72 ui->radioButton->setDisabled(
true);
73 ui->radioButton_2->setDisabled(
true);
74 ui->radioButton_3->setDisabled(
true);
75 ui->radioButton_4->setDisabled(
true);
76 ui->radioButton_5->setDisabled(
true);
79 void MainWindow::disable_right_arm()
81 ui->radioButton_6->setDisabled(
true);
82 ui->radioButton_7->setDisabled(
true);
83 ui->radioButton_8->setDisabled(
true);
84 ui->radioButton_9->setDisabled(
true);
85 ui->radioButton_10->setDisabled(
true);
88 void MainWindow::disable_left_leg()
90 ui->radioButton_11->setDisabled(
true);
91 ui->radioButton_12->setDisabled(
true);
92 ui->radioButton_13->setDisabled(
true);
93 ui->radioButton_14->setDisabled(
true);
94 ui->radioButton_15->setDisabled(
true);
97 void MainWindow::disable_right_leg()
99 ui->radioButton_16->setDisabled(
true);
100 ui->radioButton_17->setDisabled(
true);
101 ui->radioButton_18->setDisabled(
true);
102 ui->radioButton_19->setDisabled(
true);
103 ui->radioButton_20->setDisabled(
true);
106 void MainWindow::disable_torso()
108 ui->radioButton_21->setDisabled(
true);
109 ui->radioButton_22->setDisabled(
true);
110 ui->radioButton_23->setDisabled(
true);
111 ui->radioButton_24->setDisabled(
true);
112 ui->radioButton_25->setDisabled(
true);
115 bool MainWindow::slot_changed_trq(
int kk)
117 if (kk<0 || kk >= 5 || !m_robot->icmd[kk])
119 yError() <<
"Critical fail";
127 m_robot->iimp[kk]->setImpedance(0, 0.0, 0.0);
128 m_robot->iimp[kk]->setImpedance(1, 0.0, 0.0);
129 m_robot->iimp[kk]->setImpedance(2, 0.0, 0.0);
130 m_robot->iimp[kk]->setImpedance(3, 0.0, 0.0);
131 m_robot->iimp[kk]->setImpedance(4, 0.0, 0.0);
132 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_TORQUE);
133 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_TORQUE);
134 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_TORQUE);
135 m_robot->icmd[kk]->setControlMode(3,VOCAB_CM_TORQUE);
136 m_robot->icmd[kk]->setControlMode(4,VOCAB_CM_TORQUE);
140 m_robot->iimp[kk]->setImpedance(0, 0.0, 0.0);
141 m_robot->iimp[kk]->setImpedance(1, 0.0, 0.0);
142 m_robot->iimp[kk]->setImpedance(2, 0.0, 0.0);
143 m_robot->iimp[kk]->setImpedance(3, 0.0, 0.0);
144 m_robot->iimp[kk]->setImpedance(4, 0.0, 0.0);
145 m_robot->iimp[kk]->setImpedance(5, 0.0, 0.0);
146 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_TORQUE);
147 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_TORQUE);
148 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_TORQUE);
149 m_robot->icmd[kk]->setControlMode(3,VOCAB_CM_TORQUE);
150 m_robot->icmd[kk]->setControlMode(4,VOCAB_CM_TORQUE);
151 m_robot->icmd[kk]->setControlMode(5,VOCAB_CM_TORQUE);
154 m_robot->iimp[kk]->setImpedance(0, 0.0, 0.0);
155 m_robot->iimp[kk]->setImpedance(1, 0.0, 0.0);
156 m_robot->iimp[kk]->setImpedance(2, 0.1, 0.0);
157 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_TORQUE);
158 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_TORQUE);
159 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
160 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_COMPLIANT);
167 bool MainWindow::slot_changed_imp_soft(
int kk)
169 if (kk<0 || kk >= 5 || !m_robot->icmd[kk])
171 yError() <<
"Critical fail";
179 m_robot->iimp[kk]->setImpedance(0,0.2,0.0);
180 m_robot->iimp[kk]->setImpedance(1,0.2,0.0);
181 m_robot->iimp[kk]->setImpedance(2,0.2,0.0);
182 m_robot->iimp[kk]->setImpedance(3,0.2,0.0);
183 m_robot->iimp[kk]->setImpedance(4,0.1,0.0);
184 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
185 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
186 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
187 m_robot->icmd[kk]->setControlMode(3,VOCAB_CM_POSITION);
188 m_robot->icmd[kk]->setControlMode(4,VOCAB_CM_POSITION);
189 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_COMPLIANT);
190 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_COMPLIANT);
191 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_COMPLIANT);
192 m_robot->iint[kk]->setInteractionMode(3, VOCAB_IM_COMPLIANT);
193 m_robot->iint[kk]->setInteractionMode(4, VOCAB_IM_COMPLIANT);
197 m_robot->iimp[kk]->setImpedance(0,0.3,0.0);
198 m_robot->iimp[kk]->setImpedance(1,0.3,0.0);
199 m_robot->iimp[kk]->setImpedance(2,0.2,0.0);
200 m_robot->iimp[kk]->setImpedance(3,0.2,0.0);
201 m_robot->iimp[kk]->setImpedance(4,0.2,0.0);
202 m_robot->iimp[kk]->setImpedance(5,0.2,0.0);
203 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
204 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
205 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
206 m_robot->icmd[kk]->setControlMode(3,VOCAB_CM_POSITION);
207 m_robot->icmd[kk]->setControlMode(4,VOCAB_CM_POSITION);
208 m_robot->icmd[kk]->setControlMode(5,VOCAB_CM_POSITION);
209 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_COMPLIANT);
210 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_COMPLIANT);
211 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_COMPLIANT);
212 m_robot->iint[kk]->setInteractionMode(3, VOCAB_IM_COMPLIANT);
213 m_robot->iint[kk]->setInteractionMode(4, VOCAB_IM_COMPLIANT);
214 m_robot->iint[kk]->setInteractionMode(5, VOCAB_IM_COMPLIANT);
217 m_robot->iimp[kk]->setImpedance(0,0.1,0.0);
218 m_robot->iimp[kk]->setImpedance(1,0.1,0.0);
219 m_robot->iimp[kk]->setImpedance(2,0.1,0.0);
220 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
221 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
222 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
223 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_COMPLIANT);
224 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_COMPLIANT);
225 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_COMPLIANT);
234 bool MainWindow::slot_changed_imp_medium(
int kk)
236 if (kk<0 || kk >= 5 || !m_robot->icmd[kk])
238 yError() <<
"Critical fail";
246 m_robot->iimp[kk]->setImpedance(0,0.4,0.03);
247 m_robot->iimp[kk]->setImpedance(1,0.4,0.03);
248 m_robot->iimp[kk]->setImpedance(2,0.4,0.03);
249 m_robot->iimp[kk]->setImpedance(3,0.2,0.01);
250 m_robot->iimp[kk]->setImpedance(4,0.2,0.00);
251 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
252 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
253 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
254 m_robot->icmd[kk]->setControlMode(3,VOCAB_CM_POSITION);
255 m_robot->icmd[kk]->setControlMode(4,VOCAB_CM_POSITION);
256 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_COMPLIANT);
257 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_COMPLIANT);
258 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_COMPLIANT);
259 m_robot->iint[kk]->setInteractionMode(3, VOCAB_IM_COMPLIANT);
260 m_robot->iint[kk]->setInteractionMode(4, VOCAB_IM_COMPLIANT);
264 m_robot->iimp[kk]->setImpedance(0,0.6,0.01);
265 m_robot->iimp[kk]->setImpedance(1,0.6,0.01);
266 m_robot->iimp[kk]->setImpedance(2,0.4,0.01);
267 m_robot->iimp[kk]->setImpedance(3,0.4,0.01);
268 m_robot->iimp[kk]->setImpedance(4,0.4,0.01);
269 m_robot->iimp[kk]->setImpedance(5,0.4,0.01);
270 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
271 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
272 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
273 m_robot->icmd[kk]->setControlMode(3,VOCAB_CM_POSITION);
274 m_robot->icmd[kk]->setControlMode(4,VOCAB_CM_POSITION);
275 m_robot->icmd[kk]->setControlMode(5,VOCAB_CM_POSITION);
276 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_COMPLIANT);
277 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_COMPLIANT);
278 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_COMPLIANT);
279 m_robot->iint[kk]->setInteractionMode(3, VOCAB_IM_COMPLIANT);
280 m_robot->iint[kk]->setInteractionMode(4, VOCAB_IM_COMPLIANT);
281 m_robot->iint[kk]->setInteractionMode(5, VOCAB_IM_COMPLIANT);
284 m_robot->iimp[kk]->setImpedance(0,0.3,0.0);
285 m_robot->iimp[kk]->setImpedance(1,0.3,0.0);
286 m_robot->iimp[kk]->setImpedance(2,0.3,0.0);
287 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
288 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
289 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
290 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_COMPLIANT);
291 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_COMPLIANT);
292 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_COMPLIANT);
302 bool MainWindow::slot_changed_imp_hard(
int kk)
304 if (kk<0 || kk >= 5 || !m_robot->icmd[kk])
306 yError() <<
"Critical fail";
314 m_robot->iimp[kk]->setImpedance(0,0.6,0.06);
315 m_robot->iimp[kk]->setImpedance(1,0.6,0.06);
316 m_robot->iimp[kk]->setImpedance(2,0.6,0.06);
317 m_robot->iimp[kk]->setImpedance(3,0.3,0.02);
318 m_robot->iimp[kk]->setImpedance(4,0.2,0.00);
319 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
320 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
321 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
322 m_robot->icmd[kk]->setControlMode(3,VOCAB_CM_POSITION);
323 m_robot->icmd[kk]->setControlMode(4,VOCAB_CM_POSITION);
324 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_COMPLIANT);
325 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_COMPLIANT);
326 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_COMPLIANT);
327 m_robot->iint[kk]->setInteractionMode(3, VOCAB_IM_COMPLIANT);
328 m_robot->iint[kk]->setInteractionMode(4, VOCAB_IM_COMPLIANT);
332 m_robot->iimp[kk]->setImpedance(0,1.0,0.02);
333 m_robot->iimp[kk]->setImpedance(1,1.0,0.02);
334 m_robot->iimp[kk]->setImpedance(2,0.7,0.02);
335 m_robot->iimp[kk]->setImpedance(3,0.6,0.02);
336 m_robot->iimp[kk]->setImpedance(4,0.6,0.02);
337 m_robot->iimp[kk]->setImpedance(5,0.6,0.02);
338 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
339 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
340 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
341 m_robot->icmd[kk]->setControlMode(3,VOCAB_CM_POSITION);
342 m_robot->icmd[kk]->setControlMode(4,VOCAB_CM_POSITION);
343 m_robot->icmd[kk]->setControlMode(5,VOCAB_CM_POSITION);
344 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_COMPLIANT);
345 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_COMPLIANT);
346 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_COMPLIANT);
347 m_robot->iint[kk]->setInteractionMode(3, VOCAB_IM_COMPLIANT);
348 m_robot->iint[kk]->setInteractionMode(4, VOCAB_IM_COMPLIANT);
349 m_robot->iint[kk]->setInteractionMode(5, VOCAB_IM_COMPLIANT);
352 m_robot->iimp[kk]->setImpedance(0,0.7,0.015);
353 m_robot->iimp[kk]->setImpedance(1,0.7,0.015);
354 m_robot->iimp[kk]->setImpedance(2,0.7,0.015);
355 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
356 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
357 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
358 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_COMPLIANT);
359 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_COMPLIANT);
360 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_COMPLIANT);
368 bool MainWindow::slot_changed_pos(
int kk)
370 if (kk<0 || kk>=5 || !m_robot->icmd[kk])
372 yError() <<
"Critical fail";
380 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
381 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
382 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
383 m_robot->icmd[kk]->setControlMode(3,VOCAB_CM_POSITION);
384 m_robot->icmd[kk]->setControlMode(4,VOCAB_CM_POSITION);
385 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_STIFF);
386 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_STIFF);
387 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_STIFF);
388 m_robot->iint[kk]->setInteractionMode(3, VOCAB_IM_STIFF);
389 m_robot->iint[kk]->setInteractionMode(4, VOCAB_IM_STIFF);
393 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
394 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
395 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
396 m_robot->icmd[kk]->setControlMode(3,VOCAB_CM_POSITION);
397 m_robot->icmd[kk]->setControlMode(4,VOCAB_CM_POSITION);
398 m_robot->icmd[kk]->setControlMode(5,VOCAB_CM_POSITION);
399 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_STIFF);
400 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_STIFF);
401 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_STIFF);
402 m_robot->iint[kk]->setInteractionMode(3, VOCAB_IM_STIFF);
403 m_robot->iint[kk]->setInteractionMode(4, VOCAB_IM_STIFF);
404 m_robot->iint[kk]->setInteractionMode(5, VOCAB_IM_STIFF);
407 m_robot->icmd[kk]->setControlMode(0,VOCAB_CM_POSITION);
408 m_robot->icmd[kk]->setControlMode(1,VOCAB_CM_POSITION);
409 m_robot->icmd[kk]->setControlMode(2,VOCAB_CM_POSITION);
410 m_robot->iint[kk]->setInteractionMode(0, VOCAB_IM_STIFF);
411 m_robot->iint[kk]->setInteractionMode(1, VOCAB_IM_STIFF);
412 m_robot->iint[kk]->setInteractionMode(2, VOCAB_IM_STIFF);
415 yError() <<
"Critical error";
424 bool MainWindow::init(QString robotName, ResourceFinder *finder, robot_interfaces *robot)
428 if (m_robot->dd[LEFT_ARM] == 0)
434 ui->radioButton->setChecked(
true);
435 slot_changed_pos(LEFT_ARM);
438 if (m_robot->dd[RIGHT_ARM] == 0)
444 ui->radioButton_6->setChecked(
true);
445 slot_changed_pos(RIGHT_ARM);
448 if (m_robot->dd[LEFT_LEG] == 0)
454 ui->radioButton_11->setChecked(
true);
455 slot_changed_pos(LEFT_LEG);
458 if (m_robot->dd[RIGHT_LEG] == 0)
464 ui->radioButton_16->setChecked(
true);
465 slot_changed_pos(RIGHT_LEG);
468 if (m_robot->dd[TORSO] == 0)
474 ui->radioButton_21->setChecked(
true);
475 slot_changed_pos(TORSO);
481 void MainWindow::closeEvent(QCloseEvent *event)
483 this->setVisible(
false);
484 QMainWindow::closeEvent(event);
487 void MainWindow::update_labels()
497 for (
int i = 0; i<5; i++)
515 for (
int j = 0; j<jmax; j++)
519 sprintf(buff,
"\n \nJ%d:\n", j); txt += std::string(buff);
520 if (m_robot->iimp[i]) m_robot->iimp[i]->getImpedance(j, &stiff, &damp);
521 sprintf(buff,
"stiff: %3.3f Nm/deg \n", stiff); txt += std::string(buff);
522 sprintf(buff,
"damp: %3.3f Nm/(deg/s) \n", damp); txt += std::string(buff);
524 ql[i]->setText(QString(txt.c_str()));