27 #include <SimoxUtility/math/convert/mat4f_to_pos.h>
28 #include <SimoxUtility/math/convert/mat4f_to_rpy.h>
29 #include <SimoxUtility/math/convert/rpy_to_quat.h>
40 _ui.pushButtonActivate,
41 _ui.pushButtonDeactivate,
42 _ui.pushButtonDelete);
44 _ui.gridLayoutSettings->addWidget(_settings);
47 _ui.doubleSpinBoxTargTX, _ui.doubleSpinBoxTargTY, _ui.doubleSpinBoxTargTZ);
50 _ui.doubleSpinBoxTargRX, _ui.doubleSpinBoxTargRY, _ui.doubleSpinBoxTargRZ);
53 _timer = startTimer(10);
71 for (
const auto& rnsName :
_robot->getRobotNodeSetNames())
73 _ui.comboBoxRNS->addItem(QString::fromStdString(rnsName));
76 for (
const auto& nodeName :
_robot->getRobotNodeNames())
78 _ui.comboBoxLockY->addItem(QString::fromStdString(nodeName));
79 _ui.comboBoxLockZ->addItem(QString::fromStdString(nodeName));
84 _ui.pushButtonTargGet, &QPushButton::clicked,
this, &T::on_pushButtonTargGet_clicked);
86 _ui.pushButtonTargAdd, &QPushButton::clicked,
this, &T::on_pushButtonTargAdd_clicked);
88 _ui.pushButtonTargSet, &QPushButton::clicked,
this, &T::on_pushButtonTargSet_clicked);
89 connect(_ui.comboBoxRNS,
90 SIGNAL(currentIndexChanged(
const QString&)),
92 SLOT(on_comboBoxRNS_currentIndexChanged(
const QString&)));
93 connect(_ui.radioButtonSelectLeft,
94 &QRadioButton::clicked,
96 &T::on_radioButtonSelect_clicked);
97 connect(_ui.radioButtonSelectRight,
98 &QRadioButton::clicked,
100 &T::on_radioButtonSelect_clicked);
101 connect(_ui.radioButtonSelectRNS,
102 &QRadioButton::clicked,
104 &T::on_radioButtonSelect_clicked);
106 _ui.groupBoxAdvanced->setChecked(
false);
107 _ui.radioButtonSelectLeft->setChecked(
true);
128 if (_ui.checkBoxAutoUpdatePose->isChecked())
131 on_pushButtonTargSet_clicked();
133 const bool lockY = _ui.checkBoxLockY->isChecked();
134 const bool lockZ = _ui.checkBoxLockZ->isChecked();
135 bool anyTracking = lockY || lockZ;
136 _ui.widgetTarget->setEnabled(!anyTracking);
137 if (_rns && (lockY || lockZ))
143 pose(1, 3) =
_robot->getRobotNode(_ui.comboBoxLockY->currentText().toStdString())
144 ->getPositionInRootFrame()(1);
148 pose(2, 3) =
_robot->getRobotNode(_ui.comboBoxLockZ->currentText().toStdString())
149 ->getPositionInRootFrame()(2);
153 _controller->setPosition(pose.topRightCorner<3, 1>());
158 else if (!(lockY || lockZ))
161 _ui.radioButtonVisuSet ? _targ.
getMat4()
162 : _rns->getTCP()->getPoseInRootFrame() * _targ.
getMat4();
172 if (_visuHandRobotFile.empty() || !
_robot || !
arviz.topic())
183 .
file(_visuHandRobotProject, _visuHandRobotFile)
185 .pose(
_robot->getGlobalPose() * tcpInRoot * _tcpToBase)
193 NJointControllerConfigPtr
194 CartesianImpedanceControllerWidgetController::readFullCFG()
const
197 auto [pos, quat] = readTargetCFG();
198 return NJointControllerConfigPtr::dynamicCast(_settings->
readFullCFG(pos, quat));
201 std::tuple<Eigen::Vector3f, Eigen::Quaternionf>
202 CartesianImpedanceControllerWidgetController::readTargetCFG()
const
213 CartesianImpedanceControllerWidgetController::createController()
217 _ui.widgetRNSSelect->setEnabled(
false);
222 CartesianImpedanceControllerWidgetController::deleteController()
226 _ui.widgetRNSSelect->setEnabled(
true);
231 CartesianImpedanceControllerWidgetController::on_pushButtonTargSet_clicked()
245 CartesianImpedanceControllerWidgetController::on_pushButtonTargAdd_clicked()
259 CartesianImpedanceControllerWidgetController::on_pushButtonTargGet_clicked()
268 const Eigen::Vector3f pos = simox::math::mat4f_to_pos(pose);
269 const Eigen::Vector3f rpy = simox::math::mat4f_to_rpy(pose);
271 _ui.doubleSpinBoxTargTX->setValue(pos(0));
272 _ui.doubleSpinBoxTargTY->setValue(pos(1));
273 _ui.doubleSpinBoxTargTZ->setValue(pos(2));
275 _ui.doubleSpinBoxTargRX->setValue(rpy(0));
276 _ui.doubleSpinBoxTargRY->setValue(rpy(1));
277 _ui.doubleSpinBoxTargRZ->setValue(rpy(2));
281 CartesianImpedanceControllerWidgetController::on_comboBoxRNS_currentIndexChanged(
290 const std::string rnsName = arg1.toStdString();
291 _rns =
_robot->getRobotNodeSet(rnsName);
295 if (!_rns->getTCP() || side.getTCP() != _rns->getTCP()->getName() ||
296 !side.getRobotNameHelper())
300 const auto arm = side.addRobot(
_robot);
301 _tcpToBase = arm.getTcp2HandRootTransform();
302 _visuHandRobotFile = side.getHandModelPath();
303 _visuHandRobotProject = side.getHandModelPackage();
314 on_pushButtonTargGet_clicked();
318 CartesianImpedanceControllerWidgetController::on_radioButtonSelect_clicked()
322 if (_ui.radioButtonSelectLeft->isChecked())
324 on_comboBoxRNS_currentIndexChanged(QString::fromStdString(_left.
getKinematicChain()));
326 else if (_ui.radioButtonSelectRight->isChecked())
328 on_comboBoxRNS_currentIndexChanged(QString::fromStdString(_right.
getKinematicChain()));
332 on_comboBoxRNS_currentIndexChanged(_ui.comboBoxRNS->currentText());