CartesianImpedanceControllerConfigWidget.cpp
Go to the documentation of this file.
2 
3 #include <VirtualRobot/RobotNodeSet.h>
4 
5 namespace armarx
6 {
7  void
8  clearLayout(QLayout* layout)
9  {
10  QLayoutItem* item;
11  while ((item = layout->takeAt(0)))
12  {
13  if (item->layout())
14  {
15  clearLayout(item->layout());
16  delete item->layout();
17  }
18  if (item->widget())
19  {
20  delete item->widget();
21  }
22  delete item;
23  }
24  }
25 
27  QWidget* parent) :
28  QWidget(parent)
29  {
30  ui.setupUi(this);
31 
32  kxyz.addWidget(ui.doubleSpinBoxKTX);
33  kxyz.addWidget(ui.doubleSpinBoxKTY);
34  kxyz.addWidget(ui.doubleSpinBoxKTZ);
35  kxyz.setMinMax(0, 5000);
36  kxyz.set(1000);
37 
38  krpy.addWidget(ui.doubleSpinBoxKRX);
39  krpy.addWidget(ui.doubleSpinBoxKRY);
40  krpy.addWidget(ui.doubleSpinBoxKRZ);
41  krpy.setMinMax(0, 5000);
42  krpy.set(500);
43 
44  dxyz.addWidget(ui.doubleSpinBoxDTX);
45  dxyz.addWidget(ui.doubleSpinBoxDTY);
46  dxyz.addWidget(ui.doubleSpinBoxDTZ);
47  dxyz.setMinMax(0, 5000);
48  dxyz.set(250);
49 
50  drpy.addWidget(ui.doubleSpinBoxDRX);
51  drpy.addWidget(ui.doubleSpinBoxDRY);
52  drpy.addWidget(ui.doubleSpinBoxDRZ);
53  drpy.setMinMax(0, 5000);
54  drpy.set(100);
55 
57  connect(ui.pushButtonNullspaceUpdateJoints,
58  &QPushButton::clicked,
59  this,
60  &T::on_pushButtonNullspaceUpdateJoints_clicked);
61  connect(ui.pushButtonNullspaceSend,
62  &QPushButton::clicked,
63  this,
64  &T::on_pushButtonNullspaceSend_clicked);
65  connect(ui.pushButtonSettingsSend,
66  &QPushButton::clicked,
67  this,
68  &T::on_pushButtonSettingsSend_clicked);
69  }
70 
71  void
73  const QString& prefix)
74  {
75  if (prefix.size())
76  {
77  settings->beginGroup(prefix);
78  }
79  ///TODO
80  if (prefix.size())
81  {
82  settings->endGroup();
83  }
84  }
85 
86  void
88  const QString& prefix)
89  {
90  if (prefix.size())
91  {
92  settings->beginGroup("layer");
93  }
94  ///TODO
95  if (prefix.size())
96  {
97  settings->endGroup();
98  }
99  }
100 
101  NJointTaskSpaceImpedanceControlConfigPtr
103  const Eigen::Quaternionf& targOri) const
104  {
105  ARMARX_TRACE;
106  ARMARX_CHECK_NOT_NULL(_rns);
107  NJointTaskSpaceImpedanceControlConfigPtr cfg = new NJointTaskSpaceImpedanceControlConfig;
108  cfg->nodeSetName = _rns->getName();
109 
110  cfg->desiredPosition = targPos;
111  cfg->desiredOrientation = targOri;
112 
113  kxyz.get(cfg->Kpos);
114  krpy.get(cfg->Kori);
115  dxyz.get(cfg->Dpos);
116  drpy.get(cfg->Dori);
117 
118  auto [joint, knull, dnull] = readNullspaceCFG();
119  cfg->desiredJointPositions = joint;
120  cfg->Knull = knull;
121  cfg->Dnull = dnull;
122 
123  cfg->torqueLimit = ui.doubleSpinBoxTorqueLim->value();
124  return cfg;
125  }
126 
127  NJointTaskSpaceImpedanceControlRuntimeConfig
129  {
130  ARMARX_TRACE;
131  ARMARX_CHECK_NOT_NULL(_rns);
132  NJointTaskSpaceImpedanceControlRuntimeConfig cfg;
133 
134  kxyz.get(cfg.Kpos);
135  krpy.get(cfg.Kori);
136  dxyz.get(cfg.Dpos);
137  drpy.get(cfg.Dori);
138 
139  auto [joint, knull, dnull] = readNullspaceCFG();
140  cfg.desiredJointPositions = joint;
141  cfg.Knull = knull;
142  cfg.Dnull = dnull;
143 
144  cfg.torqueLimit = ui.doubleSpinBoxTorqueLim->value();
145  return cfg;
146  }
147 
148  std::tuple<Eigen::VectorXf, Eigen::VectorXf, Eigen::VectorXf>
150  {
151  ARMARX_TRACE;
152  return {jointValues.get<Eigen::VectorXf>(),
153  jointKnull.get<Eigen::VectorXf>(),
154  jointDnull.get<Eigen::VectorXf>()};
155  }
156 
157  void
159  {
160  ARMARX_TRACE;
161  if (!_controller)
162  {
163  return;
164  }
165  auto [joint, knull, dnull] = readNullspaceCFG();
166  _controller->setNullspaceConfig(joint, knull, dnull);
167  }
168 
169  void
171  {
172  ARMARX_TRACE;
173  if (!_rns)
174  {
175  return;
176  }
177  jointValues.set(_rns);
178  }
179 
180  void
182  {
183  ARMARX_TRACE;
184  if (!_controller)
185  {
186  return;
187  }
188  _controller->setConfig(readRuntimeCFG());
189  }
190 
191  void
193  const NJointTaskSpaceImpedanceControlInterfacePrx& prx)
194  {
195  _controller = prx;
196  }
197 
198  void
199  CartesianImpedanceControllerConfigWidget::setRNS(const VirtualRobot::RobotNodeSetPtr& rns)
200  {
201  ARMARX_TRACE;
202  _rns = rns;
203  auto lay = ui.gridLayoutNullspace;
204  clearLayout(lay);
205  lay->addWidget(new QLabel{"Joint"}, 0, 0);
206  lay->addWidget(new QLabel{"Target"}, 0, 1);
207  lay->addWidget(new QLabel{"Knull"}, 0, 2);
208  lay->addWidget(new QLabel{"Dnull"}, 0, 3);
209  jointValues.clear();
210  jointKnull.clear();
211  jointDnull.clear();
212 
213  if (!_rns)
214  {
215  return;
216  }
217 
218  int i = 1;
219  for (const auto& rn : _rns->getAllRobotNodes())
220  {
221  ARMARX_TRACE;
222  const auto&& n = rn->getName();
223  lay->addWidget(new QLabel{QString::fromStdString(n)}, i, 0);
224  {
225  auto b = new QDoubleSpinBox;
227  lay->addWidget(b, i, 1);
228  const auto lo = rn->getJointLimitLow();
229  const auto hi = rn->getJointLimitHigh();
230  b->setMinimum(lo);
231  b->setMaximum(hi);
232  b->setValue((lo + hi) / 2);
233  }
234  {
235  auto b = new QDoubleSpinBox;
237  lay->addWidget(b, i, 2);
238  b->setMinimum(0);
239  b->setMaximum(1000);
240  b->setValue(2);
241  }
242  {
243  auto b = new QDoubleSpinBox;
245  lay->addWidget(b, i, 3);
246  b->setMinimum(0);
247  b->setMaximum(1000);
248  b->setValue(1);
249  }
250  ++i;
251  }
252  jointKnull.set(2);
253  jointDnull.set(1);
254 
256  }
257 } // namespace armarx
armarx::SpinBoxToVector::clear
void clear()
Definition: SpinBoxToVector.h:170
armarx::CartesianImpedanceControllerConfigWidget::jointDnull
SpinBoxToVector< QDoubleSpinBox > jointDnull
Definition: CartesianImpedanceControllerConfigWidget.h:45
armarx::CartesianImpedanceControllerConfigWidget::setController
void setController(const NJointTaskSpaceImpedanceControlInterfacePrx &prx)
if null -> send buttons deactivated
Definition: CartesianImpedanceControllerConfigWidget.cpp:192
ARMARX_CHECK_NOT_NULL
#define ARMARX_CHECK_NOT_NULL(ptr)
This macro evaluates whether ptr is not null and if it turns out to be false it will throw an Express...
Definition: ExpressionException.h:206
armarx::CartesianImpedanceControllerConfigWidget::CartesianImpedanceControllerConfigWidget
CartesianImpedanceControllerConfigWidget(QWidget *parent=nullptr)
Definition: CartesianImpedanceControllerConfigWidget.cpp:26
armarx::SpinBoxToVector::get
void get(Eigen::Matrix< Scalar, Rows, Cols > &m) const
Definition: SpinBoxToVector.h:46
lo
#define lo(x)
Definition: AbstractInterface.h:47
armarx::CartesianImpedanceControllerConfigWidget::dxyz
SpinBoxToVector< QDoubleSpinBox, 3 > dxyz
Definition: CartesianImpedanceControllerConfigWidget.h:41
armarx::CartesianImpedanceControllerConfigWidget::saveSettings
void saveSettings(QSettings *settings, const QString &prefix="")
Definition: CartesianImpedanceControllerConfigWidget.cpp:87
armarx::CartesianImpedanceControllerConfigWidget::jointValues
SpinBoxToVector< QDoubleSpinBox > jointValues
Definition: CartesianImpedanceControllerConfigWidget.h:43
armarx::CartesianImpedanceControllerConfigWidget::loadSettings
void loadSettings(QSettings *settings, const QString &prefix="")
Definition: CartesianImpedanceControllerConfigWidget.cpp:72
armarx::CartesianImpedanceControllerConfigWidget::drpy
SpinBoxToVector< QDoubleSpinBox, 3 > drpy
Definition: CartesianImpedanceControllerConfigWidget.h:42
CartesianImpedanceControllerConfigWidget.h
armarx::CartesianImpedanceControllerConfigWidget::readNullspaceCFG
std::tuple< Eigen::VectorXf, Eigen::VectorXf, Eigen::VectorXf > readNullspaceCFG() const
Definition: CartesianImpedanceControllerConfigWidget.cpp:149
ARMARX_TRACE
#define ARMARX_TRACE
Definition: trace.h:77
armarx::CartesianImpedanceControllerConfigWidget::on_pushButtonNullspaceSend_clicked
void on_pushButtonNullspaceSend_clicked()
Definition: CartesianImpedanceControllerConfigWidget.cpp:158
armarx::SpinBoxToVector::addWidget
void addWidget(Qwid *s)
Definition: SpinBoxToVector.h:153
armarx::CartesianImpedanceControllerConfigWidget::on_pushButtonNullspaceUpdateJoints_clicked
void on_pushButtonNullspaceUpdateJoints_clicked()
Definition: CartesianImpedanceControllerConfigWidget.cpp:170
armarx::SpinBoxToVector::setMinMax
void setMinMax(auto min, auto max)
Definition: SpinBoxToVector.h:208
armarx::CartesianImpedanceControllerConfigWidget::jointKnull
SpinBoxToVector< QDoubleSpinBox > jointKnull
Definition: CartesianImpedanceControllerConfigWidget.h:44
armarx::Quaternion< float, 0 >
hi
#define hi(x)
Definition: AbstractInterface.h:46
armarx::CartesianImpedanceControllerConfigWidget::kxyz
SpinBoxToVector< QDoubleSpinBox, 3 > kxyz
Definition: CartesianImpedanceControllerConfigWidget.h:39
armarx::SpinBoxToVector::set
void set(const Eigen::Matrix< Scalar, Rows, Cols > &m)
Definition: SpinBoxToVector.h:115
armarx::CartesianImpedanceControllerConfigWidget::on_pushButtonSettingsSend_clicked
void on_pushButtonSettingsSend_clicked()
Definition: CartesianImpedanceControllerConfigWidget.cpp:181
T
float T
Definition: UnscentedKalmanFilterTest.cpp:38
armarx::CartesianImpedanceControllerConfigWidget::setRNS
void setRNS(const VirtualRobot::RobotNodeSetPtr &rns)
Definition: CartesianImpedanceControllerConfigWidget.cpp:199
armarx::CartesianImpedanceControllerConfigWidget::readFullCFG
NJointTaskSpaceImpedanceControlConfigPtr readFullCFG(const Eigen::Vector3f &targPos, const Eigen::Quaternionf &targOri) const
Definition: CartesianImpedanceControllerConfigWidget.cpp:102
armarx::CartesianImpedanceControllerConfigWidget::ui
Ui::CartesianImpedanceControllerConfigWidget ui
Definition: CartesianImpedanceControllerConfigWidget.h:38
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:27
armarx::CartesianImpedanceControllerConfigWidget::krpy
SpinBoxToVector< QDoubleSpinBox, 3 > krpy
Definition: CartesianImpedanceControllerConfigWidget.h:40
armarx::clearLayout
void clearLayout(QLayout *layout)
Clear a layout.
Definition: RemoteGuiWidgetController.cpp:39
armarx::CartesianImpedanceControllerConfigWidget::readRuntimeCFG
NJointTaskSpaceImpedanceControlRuntimeConfig readRuntimeCFG() const
Definition: CartesianImpedanceControllerConfigWidget.cpp:128