YARP
Yet Another Robot Platform
 
Loading...
Searching...
No Matches
piddlg.cpp
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2006-2021 Istituto Italiano di Tecnologia (IIT)
3 * SPDX-FileCopyrightText: 2006-2010 RobotCub Consortium
4 * SPDX-License-Identifier: LGPL-2.1-or-later
5 */
6
7#include "piddlg.h"
8#include "ui_piddlg.h"
9#include <QDebug>
10#include <QPushButton>
11#include <yarp/os/Bottle.h>
12#include <yarp/os/Value.h>
13
14#define TAB_POSITION 0
15#define TAB_VELOCITY 1
16#define TAB_TORQUE 2
17#define TAB_STIFF 3
18#define TAB_PWM 4
19#define TAB_CURRENT 5
20#define TAB_VARIABLES 6
21
22#define POSITION_KP 0
23#define POSITION_KD 1
24#define POSITION_KI 2
25#define POSITION_SCALE 3
26#define POSITION_MAXOUTPUT 4
27#define POSITION_MAXINT 5
28#define POSITION_OFFSET 6
29#define POSITION_STICTIONUP 7
30#define POSITION_STICTIONDW 8
31
32#define VELOCITY_KP 0
33#define VELOCITY_KD 1
34#define VELOCITY_KI 2
35#define VELOCITY_SCALE 3
36#define VELOCITY_MAXOUTPUT 4
37#define VELOCITY_MAXINT 5
38#define VELOCITY_OFFSET 6
39#define VELOCITY_STICTIONUP 7
40#define VELOCITY_STICTIONDW 8
41
42#define TORQUE_KP 0
43#define TORQUE_KD 1
44#define TORQUE_KI 2
45#define TORQUE_SCALE 3
46#define TORQUE_MAXOUTPUT 4
47#define TORQUE_MAXINT 5
48#define TORQUE_OFFSET 6
49#define TORQUE_STITCTIONUP 7
50#define TORQUE_STICTIONDW 8
51#define TORQUE_KFF 9
52#define TORQUE_BEMFGAIN 10
53#define TORQUE_BEMFSCALE 11
54#define TORQUE_KTAUGAIN 12
55#define TORQUE_KTAUSCALE 13
56#define TORQUE_VISCOUSPOS 14
57#define TORQUE_VISCOUSNEG 15
58#define TORQUE_COULOMBPOS 16
59#define TORQUE_COULOMBNEG 17
60#define VELOCITY_THRESHOLD 18
61
62#define CURRENT_KP 0
63#define CURRENT_KD 1
64#define CURRENT_KI 2
65#define CURRENT_SCALE 3
66#define CURRENT_MAXOUTPUT 4
67#define CURRENT_MAXINT 5
68#define CURRENT_OFFSET 6
69
70PidDlg::PidDlg(QString partname, int jointIndex, QString jointName, QWidget *parent) :
71 QDialog(parent),
72 ui(new Ui::PidDlg)
73{
74 ui->setupUi(this);
75
76 this->jointIndex = jointIndex;
77
78 QString title = QString("Pid Control %1 JNT:%2 (%3)").arg(partname).arg(jointIndex).arg(jointName);
79 setWindowTitle(title);
80
81 connect(ui->btnRefresh, SIGNAL(clicked()), this, SLOT(onRefresh()));
82 connect(ui->btnSend,SIGNAL(clicked()),this,SLOT(onSend()));
83 connect(ui->btnCancel,SIGNAL(clicked()),this,SLOT(onCancel()));
84 connect(ui->btnDump, SIGNAL(clicked()), this, SLOT(onDumpRemoteVariables()));
85
86 ui->tablePosition->setItemDelegate(new TableDoubleDelegate);
87 ui->tableVelocity->setItemDelegate(new TableDoubleDelegate);
88 ui->tableTorque->setItemDelegate(new TableDoubleDelegate);
89 ui->tableStiffness->setItemDelegate(new TableDoubleDelegate);
90 ui->tablePWM->setItemDelegate(new TableDoubleDelegate);
91 ui->tableCurrent->setItemDelegate(new TableDoubleDelegate);
92 ui->tableCurrent->setItemDelegate(new TableGenericDelegate);
93}
94
95void PidDlg::onDumpRemoteVariables()
96{
98}
99
101{
102 for (auto& button : buttons)
103 {
104 delete button;
105 button = nullptr;
106 }
107 buttons.clear();
108 delete ui;
109}
110
112{
113 ui->tablePosition->item(POSITION_KP,0)->setText(QString("%1").arg((double)myPid.kp));
114 ui->tablePosition->item(POSITION_KP,1)->setText(QString("%1").arg((double)myPid.kp));
115
116 ui->tablePosition->item(POSITION_KD,0)->setText(QString("%1").arg((double)myPid.kd));
117 ui->tablePosition->item(POSITION_KD,1)->setText(QString("%1").arg((double)myPid.kd));
118
119 ui->tablePosition->item(POSITION_KI,0)->setText(QString("%1").arg((double)myPid.ki));
120 ui->tablePosition->item(POSITION_KI,1)->setText(QString("%1").arg((double)myPid.ki));
121
122 ui->tablePosition->item(POSITION_SCALE,0)->setText(QString("%1").arg((int)myPid.scale));
123 ui->tablePosition->item(POSITION_SCALE,1)->setText(QString("%1").arg((int)myPid.scale));
124
125 ui->tablePosition->item(POSITION_OFFSET,0)->setText(QString("%1").arg((int)myPid.offset));
126 ui->tablePosition->item(POSITION_OFFSET,1)->setText(QString("%1").arg((int)myPid.offset));
127
128 ui->tablePosition->item(POSITION_STICTIONUP,0)->setText(QString("%1").arg((double)myPid.stiction_up_val));
129 ui->tablePosition->item(POSITION_STICTIONUP,1)->setText(QString("%1").arg((double)myPid.stiction_up_val));
130
131 ui->tablePosition->item(POSITION_MAXOUTPUT,0)->setText(QString("%1").arg((int)myPid.max_output));
132 ui->tablePosition->item(POSITION_MAXOUTPUT,1)->setText(QString("%1").arg((int)myPid.max_output));
133
134 ui->tablePosition->item(POSITION_STICTIONDW,0)->setText(QString("%1").arg((double)myPid.stiction_down_val));
135 ui->tablePosition->item(POSITION_STICTIONDW,1)->setText(QString("%1").arg((double)myPid.stiction_down_val));
136
137 ui->tablePosition->item(POSITION_MAXINT,0)->setText(QString("%1").arg((int)myPid.max_int));
138 ui->tablePosition->item(POSITION_MAXINT,1)->setText(QString("%1").arg((int)myPid.max_int));
139}
140
142{
143 ui->tableVelocity->item(VELOCITY_KP, 0)->setText(QString("%1").arg((double)myPid.kp));
144 ui->tableVelocity->item(VELOCITY_KP, 1)->setText(QString("%1").arg((double)myPid.kp));
145
146 ui->tableVelocity->item(VELOCITY_KD, 0)->setText(QString("%1").arg((double)myPid.kd));
147 ui->tableVelocity->item(VELOCITY_KD, 1)->setText(QString("%1").arg((double)myPid.kd));
148
149 ui->tableVelocity->item(VELOCITY_KI, 0)->setText(QString("%1").arg((double)myPid.ki));
150 ui->tableVelocity->item(VELOCITY_KI, 1)->setText(QString("%1").arg((double)myPid.ki));
151
152 ui->tableVelocity->item(VELOCITY_SCALE, 0)->setText(QString("%1").arg((int)myPid.scale));
153 ui->tableVelocity->item(VELOCITY_SCALE, 1)->setText(QString("%1").arg((int)myPid.scale));
154
155 ui->tableVelocity->item(VELOCITY_OFFSET, 0)->setText(QString("%1").arg((int)myPid.offset));
156 ui->tableVelocity->item(VELOCITY_OFFSET, 1)->setText(QString("%1").arg((int)myPid.offset));
157
158 ui->tableVelocity->item(VELOCITY_STICTIONUP, 0)->setText(QString("%1").arg((double)myPid.stiction_up_val));
159 ui->tableVelocity->item(VELOCITY_STICTIONUP, 1)->setText(QString("%1").arg((double)myPid.stiction_up_val));
160
161 ui->tableVelocity->item(VELOCITY_MAXOUTPUT, 0)->setText(QString("%1").arg((int)myPid.max_output));
162 ui->tableVelocity->item(VELOCITY_MAXOUTPUT, 1)->setText(QString("%1").arg((int)myPid.max_output));
163
164 ui->tableVelocity->item(VELOCITY_STICTIONDW, 0)->setText(QString("%1").arg((double)myPid.stiction_down_val));
165 ui->tableVelocity->item(VELOCITY_STICTIONDW, 1)->setText(QString("%1").arg((double)myPid.stiction_down_val));
166
167 ui->tableVelocity->item(VELOCITY_MAXINT, 0)->setText(QString("%1").arg((int)myPid.max_int));
168 ui->tableVelocity->item(VELOCITY_MAXINT, 1)->setText(QString("%1").arg((int)myPid.max_int));
169}
170
172{
173 ui->tableTorque->item(TORQUE_KP,0)->setText(QString("%1").arg((double)myPid.kp));
174 ui->tableTorque->item(TORQUE_KP,1)->setText(QString("%1").arg((double)myPid.kp));
175
176 ui->tableTorque->item(TORQUE_KFF,0)->setText(QString("%1").arg((double)myPid.kff));
177 ui->tableTorque->item(TORQUE_KFF,1)->setText(QString("%1").arg((double)myPid.kff));
178
179 ui->tableTorque->item(TORQUE_KD,0)->setText(QString("%1").arg((double)myPid.kd));
180 ui->tableTorque->item(TORQUE_KD,1)->setText(QString("%1").arg((double)myPid.kd));
181
182 ui->tableTorque->item(TORQUE_BEMFGAIN,0)->setText(QString("%1").arg((double)TrqParam.bemf));
183 ui->tableTorque->item(TORQUE_BEMFGAIN,1)->setText(QString("%1").arg((double)TrqParam.bemf));
184
185 ui->tableTorque->item(TORQUE_BEMFSCALE,0)->setText(QString("%1").arg((int)TrqParam.bemf_scale));
186 ui->tableTorque->item(TORQUE_BEMFSCALE,1)->setText(QString("%1").arg((int)TrqParam.bemf_scale));
187
188 ui->tableTorque->item(TORQUE_KTAUGAIN,0)->setText(QString("%1").arg((double)TrqParam.ktau));
189 ui->tableTorque->item(TORQUE_KTAUGAIN,1)->setText(QString("%1").arg((double)TrqParam.ktau));
190
191 ui->tableTorque->item(TORQUE_KTAUSCALE,0)->setText(QString("%1").arg((int)TrqParam.ktau_scale));
192 ui->tableTorque->item(TORQUE_KTAUSCALE,1)->setText(QString("%1").arg((int)TrqParam.ktau_scale));
193
194 ui->tableTorque->item(TORQUE_VISCOUSPOS, 0)->setText(QString("%1").arg((double)TrqParam.viscousPos));
195 ui->tableTorque->item(TORQUE_VISCOUSPOS, 1)->setText(QString("%1").arg((double)TrqParam.viscousPos));
196 ui->tableTorque->item(TORQUE_VISCOUSNEG, 0)->setText(QString("%1").arg((double)TrqParam.viscousNeg));
197 ui->tableTorque->item(TORQUE_VISCOUSNEG, 1)->setText(QString("%1").arg((double)TrqParam.viscousNeg));
198
199 ui->tableTorque->item(TORQUE_COULOMBPOS, 0)->setText(QString("%1").arg((double)TrqParam.coulombPos));
200 ui->tableTorque->item(TORQUE_COULOMBPOS, 1)->setText(QString("%1").arg((double)TrqParam.coulombPos));
201 ui->tableTorque->item(TORQUE_COULOMBNEG, 0)->setText(QString("%1").arg((double)TrqParam.coulombNeg));
202 ui->tableTorque->item(TORQUE_COULOMBNEG, 1)->setText(QString("%1").arg((double)TrqParam.coulombNeg));
203
204 ui->tableTorque->item(VELOCITY_THRESHOLD, 0)->setText(QString("%1").arg((double)TrqParam.velocityThres));
205 ui->tableTorque->item(VELOCITY_THRESHOLD, 1)->setText(QString("%1").arg((double)TrqParam.velocityThres));
206
207 ui->tableTorque->item(TORQUE_KI,0)->setText(QString("%1").arg((double)myPid.ki));
208 ui->tableTorque->item(TORQUE_KI,1)->setText(QString("%1").arg((double)myPid.ki));
209
210 ui->tableTorque->item(TORQUE_SCALE,0)->setText(QString("%1").arg((int)myPid.scale));
211 ui->tableTorque->item(TORQUE_SCALE,1)->setText(QString("%1").arg((int)myPid.scale));
212
213 ui->tableTorque->item(TORQUE_OFFSET,0)->setText(QString("%1").arg((int)myPid.offset));
214 ui->tableTorque->item(TORQUE_OFFSET,1)->setText(QString("%1").arg((int)myPid.offset));
215
216 ui->tableTorque->item(TORQUE_STITCTIONUP,0)->setText(QString("%1").arg((double)myPid.stiction_up_val));
217 ui->tableTorque->item(TORQUE_STITCTIONUP,1)->setText(QString("%1").arg((double)myPid.stiction_up_val));
218
219 ui->tableTorque->item(TORQUE_MAXOUTPUT,0)->setText(QString("%1").arg((int)myPid.max_output));
220 ui->tableTorque->item(TORQUE_MAXOUTPUT,1)->setText(QString("%1").arg((int)myPid.max_output));
221
222 ui->tableTorque->item(TORQUE_STICTIONDW,0)->setText(QString("%1").arg((double)myPid.stiction_down_val));
223 ui->tableTorque->item(TORQUE_STICTIONDW,1)->setText(QString("%1").arg((double)myPid.stiction_down_val));
224
225 ui->tableTorque->item(TORQUE_MAXINT,0)->setText(QString("%1").arg((int)myPid.max_int));
226 ui->tableTorque->item(TORQUE_MAXINT,1)->setText(QString("%1").arg((int)myPid.max_int));
227}
228
229void PidDlg::onSendRemoteVariable()
230{
231 int i = -1;
232 for (size_t elem = 0; elem < buttons.size(); elem++)
233 {
234 if (sender() == buttons[elem])
235 {
236 i = elem;
237 break;
238 }
239 }
240 if (i == -1) {
241 return;
242 }
243
244 std::string key = ui->tableVariables->item(i, 0)->text().toStdString();
245 std::string val = ui->tableVariables->item(i, 1)->text().toStdString();
246 yarp::os::Bottle valb(val);
247 emit sendSingleRemoteVariable(key, valb);
249}
250
252{
253 // Remote Variables
254 if (iVar)
255 {
256 ui->tableVariables->clear();
257 ui->tableVariables->clearContents();
258 ui->tableVariables->setRowCount(0);
259 ui->tableVariables->setColumnCount(0);
260 ui->tableVariables->insertColumn(0);
261 ui->tableVariables->insertColumn(0);
262 ui->tableVariables->insertColumn(0);
263 ui->tableVariables->setMinimumWidth(500);
264 ui->tableVariables->setHorizontalHeaderItem(0, new QTableWidgetItem(QString("Key")));
265 ui->tableVariables->setHorizontalHeaderItem(1, new QTableWidgetItem(QString("Values")));
266 ui->tableVariables->setHorizontalHeaderItem(2, new QTableWidgetItem(QString("")));
267
268 yarp::os::Bottle keys;
269 if (iVar->getRemoteVariablesList(&keys))
270 {
271 std::string s = keys.toString();
272 int keys_size = keys.size();
273 for (auto& button : buttons)
274 {
275 delete button;
276 button = nullptr;
277 }
278 buttons.clear();
279 buttons.resize(keys_size);
280
281 for (int i = 0; i < keys_size; i++)
282 {
283 buttons[i] = new QPushButton("Send");
284 connect(buttons[i], SIGNAL(clicked()), this, SLOT(onSendRemoteVariable()));
285
286 std::string v;
287 if (keys.get(i).isString())
288 {
290 v = keys.get(i).asString();
291 iVar->getRemoteVariable(v, val);
292 ui->tableVariables->insertRow(i);
293 ui->tableVariables->setItem(i, 0, new QTableWidgetItem(QString(v.c_str())));
294 ui->tableVariables->item(i, 0)->setFlags(Qt::NoItemFlags);
295 ui->tableVariables->setItem(i, 1, new QTableWidgetItem(QString(val.toString().c_str())));
296 ui->tableVariables->item(i, 1)->setFlags(Qt::ItemIsEditable | Qt::ItemIsEnabled );
297 ui->tableVariables->setColumnWidth(1, 500);
298 ui->tableVariables->setCellWidget(i, 2, (QWidget*)buttons[i]);
299
300 /*yarp::os::Bottle val;
301 v = keys.get(i).asString();
302 iVar->getRemoteVariable(v, val);
303 int valsize = val.get(0).size();
304 ui->tableVariables->insertRow(i);
305 ui->tableVariables->setItem(i, 0, new QTableWidgetItem(QString(v.c_str())));
306 ui->tableVariables->item(i, 0)->setFlags(Qt::NoItemFlags);
307 for (int j = 0; j < valsize; j++)
308 {
309 ui->tableVariables->setItem(i, j+1, new QTableWidgetItem(QString(val.get(j).toString().c_str())));
310 }*/
311 }
312 }
313 }
314 }
315}
316
317void PidDlg::initStiffness(double curStiffVal, double minStiff, double maxStiff,
318 double curDampVal, double minDamp, double maxDamp,
319 double curForceVal, double minForce, double maxForce)
320{
321 ui->tableStiffness->item(0,0)->setText(QString("%L1").arg(curStiffVal,0,'f',3));
322 ui->tableStiffness->item(0,1)->setText(QString("%L1").arg(minStiff,0,'f',3));
323 ui->tableStiffness->item(0,2)->setText(QString("%L1").arg(maxStiff,0,'f',3));
324 ui->tableStiffness->item(0,3)->setText(QString("%L1").arg(curStiffVal,0,'f',3));
325
326 ui->tableStiffness->item(1,0)->setText(QString("%L1").arg(curDampVal,0,'f',3));
327 ui->tableStiffness->item(1,1)->setText(QString("%L1").arg(minDamp,0,'f',3));
328 ui->tableStiffness->item(1,2)->setText(QString("%L1").arg(maxDamp,0,'f',3));
329 ui->tableStiffness->item(1,3)->setText(QString("%L1").arg(curDampVal,0,'f',3));
330
331 ui->tableStiffness->item(2,0)->setText(QString("%L1").arg(curForceVal,0,'f',3));
332 ui->tableStiffness->item(2,1)->setText(QString("%L1").arg(minForce,0,'f',3));
333 ui->tableStiffness->item(2,2)->setText(QString("%L1").arg(maxForce,0,'f',3));
334 ui->tableStiffness->item(2,3)->setText(QString("%L1").arg(curForceVal,0,'f',3));
335}
336
337
338void PidDlg::initPWM(double PWMVal, double pwm)
339{
340 ui->tablePWM->item(0, 0)->setText(QString("%1").arg((double)PWMVal));
341 ui->tablePWM->item(0, 1)->setText(QString("%1").arg((double)PWMVal));
342
343 ui->tablePWM->item(1,0)->setText(QString("%1").arg(pwm));
344}
345
347{
348 ui->tableCurrent->item(CURRENT_KP, 0)->setText(QString("%1").arg((double)myPid.kp));
349 ui->tableCurrent->item(CURRENT_KP, 1)->setText(QString("%1").arg((double)myPid.kp));
350
351 ui->tableCurrent->item(CURRENT_KD, 0)->setText(QString("%1").arg((double)myPid.kd));
352 ui->tableCurrent->item(CURRENT_KD, 1)->setText(QString("%1").arg((double)myPid.kd));
353
354 ui->tableCurrent->item(CURRENT_KI, 0)->setText(QString("%1").arg((double)myPid.ki));
355 ui->tableCurrent->item(CURRENT_KI, 1)->setText(QString("%1").arg((double)myPid.ki));
356
357 ui->tableCurrent->item(CURRENT_SCALE, 0)->setText(QString("%1").arg((int)myPid.scale));
358 ui->tableCurrent->item(CURRENT_SCALE, 1)->setText(QString("%1").arg((int)myPid.scale));
359
360 ui->tableCurrent->item(CURRENT_OFFSET, 0)->setText(QString("%1").arg((int)myPid.offset));
361 ui->tableCurrent->item(CURRENT_OFFSET, 1)->setText(QString("%1").arg((int)myPid.offset));
362
363 ui->tableCurrent->item(CURRENT_MAXOUTPUT, 0)->setText(QString("%1").arg((int)myPid.max_output));
364 ui->tableCurrent->item(CURRENT_MAXOUTPUT, 1)->setText(QString("%1").arg((int)myPid.max_output));
365
366 ui->tableCurrent->item(CURRENT_MAXINT, 0)->setText(QString("%1").arg((int)myPid.max_int));
367 ui->tableCurrent->item(CURRENT_MAXINT, 1)->setText(QString("%1").arg((int)myPid.max_int));
368}
369
370void PidDlg::onRefresh()
371{
372 emit refreshPids(jointIndex);
373}
374
375void PidDlg::onSend()
376{
377 Pid newPid;
378 MotorTorqueParameters newMotorTorqueParams;
379
380 switch (ui->tabMain->currentIndex()) {
381 case TAB_POSITION:
382 newPid.kp = ui->tablePosition->item(POSITION_KP,1)->text().toDouble();
383 newPid.kd = ui->tablePosition->item(POSITION_KD,1)->text().toDouble();
384 newPid.ki = ui->tablePosition->item(POSITION_KI,1)->text().toDouble();
385 newPid.scale = ui->tablePosition->item(POSITION_SCALE,1)->text().toDouble();
386 newPid.offset = ui->tablePosition->item(POSITION_OFFSET,1)->text().toDouble();
387 newPid.stiction_up_val = ui->tablePosition->item(POSITION_STICTIONUP,1)->text().toDouble();
388 newPid.max_output = ui->tablePosition->item(POSITION_MAXOUTPUT,1)->text().toDouble();
389 newPid.stiction_down_val = ui->tablePosition->item(POSITION_STICTIONDW,1)->text().toDouble();
390 newPid.max_int = ui->tablePosition->item(POSITION_MAXINT,1)->text().toDouble();
391 emit sendPositionPid(jointIndex,newPid);
392 break;
393 case TAB_VELOCITY:
394 newPid.kp = ui->tableVelocity->item(VELOCITY_KP, 1)->text().toDouble();
395 newPid.kd = ui->tableVelocity->item(VELOCITY_KD, 1)->text().toDouble();
396 newPid.ki = ui->tableVelocity->item(VELOCITY_KI, 1)->text().toDouble();
397 newPid.scale = ui->tableVelocity->item(VELOCITY_SCALE, 1)->text().toDouble();
398 newPid.offset = ui->tableVelocity->item(VELOCITY_OFFSET, 1)->text().toDouble();
399 newPid.stiction_up_val = ui->tableVelocity->item(VELOCITY_STICTIONUP, 1)->text().toDouble();
400 newPid.max_output = ui->tableVelocity->item(VELOCITY_MAXOUTPUT, 1)->text().toDouble();
401 newPid.stiction_down_val = ui->tableVelocity->item(VELOCITY_STICTIONDW, 1)->text().toDouble();
402 newPid.max_int = ui->tableVelocity->item(VELOCITY_MAXINT, 1)->text().toDouble();
403 emit sendVelocityPid(jointIndex, newPid);
404 break;
405 case TAB_TORQUE:
406 newPid.kp = ui->tableTorque->item(TORQUE_KP,1)->text().toDouble();
407 newPid.kff = ui->tableTorque->item(TORQUE_KFF,1)->text().toDouble();
408 newPid.kd = ui->tableTorque->item(TORQUE_KD,1)->text().toDouble();
409 newMotorTorqueParams.bemf = ui->tableTorque->item(TORQUE_BEMFGAIN,1)->text().toDouble();
410 newMotorTorqueParams.bemf_scale = ui->tableTorque->item(TORQUE_BEMFSCALE,1)->text().toDouble();
411 newMotorTorqueParams.ktau = ui->tableTorque->item(TORQUE_KTAUGAIN,1)->text().toDouble();
412 newMotorTorqueParams.ktau_scale = ui->tableTorque->item(TORQUE_KTAUSCALE,1)->text().toDouble();
413 newMotorTorqueParams.viscousPos = ui->tableTorque->item(TORQUE_VISCOUSPOS,1)->text().toDouble();
414 newMotorTorqueParams.viscousNeg = ui->tableTorque->item(TORQUE_VISCOUSNEG,1)->text().toDouble();
415 newMotorTorqueParams.coulombPos = ui->tableTorque->item(TORQUE_COULOMBPOS,1)->text().toDouble();
416 newMotorTorqueParams.coulombNeg = ui->tableTorque->item(TORQUE_COULOMBNEG,1)->text().toDouble();
417 newMotorTorqueParams.velocityThres = ui->tableTorque->item(VELOCITY_THRESHOLD,1)->text().toDouble();
418 newPid.ki = ui->tableTorque->item(TORQUE_KI,1)->text().toDouble();
419 newPid.scale = ui->tableTorque->item(TORQUE_SCALE,1)->text().toDouble();
420 newPid.offset = ui->tableTorque->item(TORQUE_OFFSET,1)->text().toDouble();
421 newPid.stiction_up_val = ui->tableTorque->item(TORQUE_STITCTIONUP,1)->text().toDouble();
422 newPid.max_output = ui->tableTorque->item(TORQUE_MAXOUTPUT,1)->text().toDouble();
423 newPid.stiction_down_val = ui->tableTorque->item(TORQUE_STICTIONDW,1)->text().toDouble();
424 newPid.max_int = ui->tableTorque->item(TORQUE_MAXINT,1)->text().toDouble();
425 emit sendTorquePid(jointIndex,newPid,newMotorTorqueParams);
426 break;
427 case TAB_STIFF:{
428 double desiredStiff = ui->tableStiffness->item(0,3)->text().toDouble();
429 double desiredDamp = ui->tableStiffness->item(1,3)->text().toDouble();
430 double desiredForce = ui->tableStiffness->item(2,3)->text().toDouble();
431 emit sendStiffness(jointIndex,desiredStiff,desiredDamp,desiredForce);
432 break;
433 }
434 case TAB_PWM:{
435 int desiredDuty = ui->tablePWM->item(0,1)->text().toDouble();
436 emit sendPWM(jointIndex,desiredDuty);
437 break;
438 }
439 case TAB_CURRENT:{
440 newPid.kp = ui->tableCurrent->item(CURRENT_KP, 1)->text().toDouble();
441 newPid.kd = ui->tableCurrent->item(CURRENT_KD, 1)->text().toDouble();
442 newPid.ki = ui->tableCurrent->item(CURRENT_KI, 1)->text().toDouble();
443 newPid.scale = ui->tableCurrent->item(CURRENT_SCALE, 1)->text().toDouble();
444 newPid.offset = ui->tableCurrent->item(CURRENT_OFFSET, 1)->text().toDouble();
445 newPid.max_output = ui->tableCurrent->item(CURRENT_MAXOUTPUT, 1)->text().toDouble();
446 newPid.max_int = ui->tableCurrent->item(CURRENT_MAXINT, 1)->text().toDouble();
447 emit sendCurrentPid(jointIndex, newPid);
448 break;
449 }
450 case TAB_VARIABLES:{
451 // Remote Variables
452 int rows = ui->tableVariables->rowCount();
453 for (int i = 0; i < rows; i++)
454 {
455 std::string key = ui->tableVariables->item(i, 0)->text().toStdString();
456 std::string val = ui->tableVariables->item(i, 1)->text().toStdString();
457 yarp::os::Bottle valb(val);
458 emit sendSingleRemoteVariable(key, valb);
459 }
461 break;
462 }
463 default:
464 break;
465 }
466
467
468}
469
470void PidDlg::onCancel()
471{
472 reject();
473}
int SIGNAL(int pid, int signum)
void sendTorquePid(int jointIndex, Pid, MotorTorqueParameters newTorqueParam)
void initVelocity(Pid myPid)
Definition piddlg.cpp:141
~PidDlg()
Definition piddlg.cpp:100
void sendVelocityPid(int jointIndex, Pid pid)
void refreshPids(int jointIndex)
void initPosition(Pid myPid)
Definition piddlg.cpp:111
void sendSingleRemoteVariable(std::string key, yarp::os::Bottle val)
void sendPWM(int jointIndex, double dutyVal)
void updateAllRemoteVariables()
void initStiffness(double curStiffVal, double minStiff, double maxStiff, double curDampVal, double minDamp, double maxDamp, double curForceVal, double minForce, double maxForce)
Definition piddlg.cpp:317
void initTorque(Pid myPid, MotorTorqueParameters TorqueParam)
Definition piddlg.cpp:171
void sendStiffness(int, double, double, double)
void initCurrent(Pid myPid)
Definition piddlg.cpp:346
void initRemoteVariables(IRemoteVariables *iVar)
Definition piddlg.cpp:251
PidDlg(QString partname, int jointIndex, QString jointName, QWidget *parent=0)
Definition piddlg.cpp:70
void dumpRemoteVariables()
void initPWM(double pwmVal, double pwm)
Definition piddlg.cpp:338
void sendPositionPid(int jointIndex, Pid pid)
void sendCurrentPid(int jointIndex, Pid pid)
IRemoteVariables interface.
virtual bool getRemoteVariable(std::string key, yarp::os::Bottle &val)=0
virtual bool getRemoteVariablesList(yarp::os::Bottle *listOfKeys)=0
Contains the parameters for a PID.
double kd
derivative gain
double scale
scale for the pid output
double offset
pwm offset added to the pid output
double stiction_down_val
down stiction offset added to the pid output
double stiction_up_val
up stiction offset added to the pid output
double max_output
max output
double kff
feedforward gain
double ki
integrative gain
double max_int
saturation threshold for the integrator
double kp
proportional gain
A simple collection of objects that can be described and transmitted in a portable way.
Definition Bottle.h:64
size_type size() const
Gets the number of elements in the bottle.
Definition Bottle.cpp:251
Value & get(size_type index) const
Reads a Value v from a certain part of the list.
Definition Bottle.cpp:246
std::string toString() const override
Gives a human-readable textual representation of the bottle.
Definition Bottle.cpp:211
virtual bool isString() const
Checks if value is a string.
Definition Value.cpp:156
virtual std::string asString() const
Get string value.
Definition Value.cpp:234
Definition aboutdlg.h:11
#define POSITION_KP
Definition piddlg.cpp:22
#define TAB_POSITION
Definition piddlg.cpp:14
#define VELOCITY_STICTIONUP
Definition piddlg.cpp:39
#define TAB_TORQUE
Definition piddlg.cpp:16
#define TORQUE_STITCTIONUP
Definition piddlg.cpp:49
#define TORQUE_BEMFGAIN
Definition piddlg.cpp:52
#define TORQUE_KTAUSCALE
Definition piddlg.cpp:55
#define POSITION_KD
Definition piddlg.cpp:23
#define CURRENT_KD
Definition piddlg.cpp:63
#define TAB_CURRENT
Definition piddlg.cpp:19
#define CURRENT_KP
Definition piddlg.cpp:62
#define VELOCITY_KD
Definition piddlg.cpp:33
#define VELOCITY_MAXOUTPUT
Definition piddlg.cpp:36
#define VELOCITY_THRESHOLD
Definition piddlg.cpp:60
#define TAB_PWM
Definition piddlg.cpp:18
#define TORQUE_OFFSET
Definition piddlg.cpp:48
#define VELOCITY_OFFSET
Definition piddlg.cpp:38
#define TORQUE_KFF
Definition piddlg.cpp:51
#define VELOCITY_STICTIONDW
Definition piddlg.cpp:40
#define CURRENT_KI
Definition piddlg.cpp:64
#define TAB_VELOCITY
Definition piddlg.cpp:15
#define TAB_VARIABLES
Definition piddlg.cpp:20
#define CURRENT_MAXOUTPUT
Definition piddlg.cpp:66
#define VELOCITY_KP
Definition piddlg.cpp:32
#define CURRENT_MAXINT
Definition piddlg.cpp:67
#define POSITION_OFFSET
Definition piddlg.cpp:28
#define TORQUE_STICTIONDW
Definition piddlg.cpp:50
#define TORQUE_MAXINT
Definition piddlg.cpp:47
#define VELOCITY_SCALE
Definition piddlg.cpp:35
#define CURRENT_OFFSET
Definition piddlg.cpp:68
#define TAB_STIFF
Definition piddlg.cpp:17
#define TORQUE_BEMFSCALE
Definition piddlg.cpp:53
#define TORQUE_KD
Definition piddlg.cpp:43
#define TORQUE_KP
Definition piddlg.cpp:42
#define POSITION_STICTIONDW
Definition piddlg.cpp:30
#define TORQUE_KI
Definition piddlg.cpp:44
#define TORQUE_VISCOUSNEG
Definition piddlg.cpp:57
#define TORQUE_KTAUGAIN
Definition piddlg.cpp:54
#define POSITION_STICTIONUP
Definition piddlg.cpp:29
#define TORQUE_SCALE
Definition piddlg.cpp:45
#define VELOCITY_MAXINT
Definition piddlg.cpp:37
#define POSITION_SCALE
Definition piddlg.cpp:25
#define POSITION_MAXOUTPUT
Definition piddlg.cpp:26
#define TORQUE_COULOMBNEG
Definition piddlg.cpp:59
#define POSITION_KI
Definition piddlg.cpp:24
#define CURRENT_SCALE
Definition piddlg.cpp:65
#define POSITION_MAXINT
Definition piddlg.cpp:27
#define TORQUE_MAXOUTPUT
Definition piddlg.cpp:46
#define TORQUE_COULOMBPOS
Definition piddlg.cpp:58
#define VELOCITY_KI
Definition piddlg.cpp:34
#define TORQUE_VISCOUSPOS
Definition piddlg.cpp:56