13 #include <ArmarXGui/interface/RemoteGuiInterface.h>
34 if (runningTask->isRunning())
41 LocalizationRemoteGui::createRemoteGuiTab()
48 guiTab.localizationCorrection.group.setLabel(
"Localization correction");
50 const float posMax = 10
'000;
51 guiTab.localizationCorrection.x.setName("x");
52 guiTab.localizationCorrection.x.setRange(-posMax, posMax);
53 guiTab.localizationCorrection.x.setDecimals(0);
54 guiTab.localizationCorrection.x.setSteps(int(posMax / 10));
55 guiTab.localizationCorrection.x.setValue(0.F);
57 guiTab.localizationCorrection.y.setName("y");
58 guiTab.localizationCorrection.y.setRange(-posMax, posMax);
59 guiTab.localizationCorrection.y.setDecimals(0);
60 guiTab.localizationCorrection.y.setSteps(int(posMax / 10));
61 guiTab.localizationCorrection.y.setValue(0.F);
63 const float angleMax = M_PIf32;
65 guiTab.localizationCorrection.yaw.setName("yaw");
66 guiTab.localizationCorrection.yaw.setRange(-angleMax, angleMax);
67 // guiTab.localizationCorrection.yaw.setDecimals(2);
68 guiTab.localizationCorrection.yaw.setSteps(360);
69 guiTab.localizationCorrection.yaw.setValue(0.F);
71 guiTab.controlGroup.applyButton.setLabel("Apply");
73 armarx::RemoteGui::Client::GridLayout grid;
77 grid.add(guiTab.localizationCorrection.x, {row, 1});
80 grid.add(guiTab.localizationCorrection.y, {row, 1});
83 grid.add(guiTab.localizationCorrection.yaw, {row, 1});
86 grid.add(guiTab.controlGroup.applyButton, {row, 1});
90 armarx::RemoteGui::Client::VBoxLayout root = {grid,
91 armarx::RemoteGui::Client::VSpacer()};
92 guiTab.localizationCorrection.group.addChild(root);
95 guiTab.hbox.addChild(guiTab.localizationCorrection.group);
97 guiTab.create(REMOTE_GUI_TAB_MAME, remoteGui, guiTab.hbox);
99 // boxLayout.addChild(line);
100 // remoteGui->createTab(REMOTE_GUI_TAB_MAME, guiTab.hbox);
104 LocalizationRemoteGui::run()
106 constexpr int kCycleDurationMs = 100;
108 CycleUtil c(kCycleDurationMs);
109 while (!runningTask->isStopped())
114 std::lock_guard g{mtx};
117 tab.receiveUpdates();
118 guiTab.receiveUpdates();
125 std::lock_guard g{mtx};
129 guiTab.sendUpdates();
133 c.waitForCycleDuration();
138 LocalizationRemoteGui::handleEvents(RemoteGui::TabProxy& tab)
142 std::lock_guard g{handleEventsMtx};
144 const Eigen::Vector3f correction{guiTab.localizationCorrection.x.getValue(),
145 guiTab.localizationCorrection.y.getValue(),
146 guiTab.localizationCorrection.yaw.getValue()};
147 // ARMARX_INFO << correction;
149 const Eigen::Vector3f diff = correction - localizationCorrection;
151 // check if values have changed
152 if ((diff.cwiseAbs().array() > 0.01F).any())
154 localizationCorrection = correction;
156 const Eigen::Isometry3f trafo =
157 Eigen::Translation3f(Eigen::Vector3f{correction.x(), correction.y(), 0.F}) *
158 Eigen::Isometry3f(Eigen::AngleAxisf(correction.z(), Eigen::Vector3f::UnitZ()));
159 // ARMARX_INFO << "Localization correction";
160 callee.onLocalizationCorrection(trafo);
163 if (guiTab.controlGroup.applyButton.wasClicked())
166 callee.onApplyLocalizationCorrection();
171 LocalizationRemoteGui::shutdown()
173 // std::lock_guard g{mtx};
175 if (!runningTask->isStopped())
180 ARMARX_DEBUG << "Removing tab: " << REMOTE_GUI_TAB_MAME;
181 remoteGui->removeTab(REMOTE_GUI_TAB_MAME);
185 LocalizationRemoteGui::enable()
189 // std::lock_guard g{mtx};
190 tab.internalSetDisabled(guiTab.controlGroup.applyButton.getName(), false);
194 LocalizationRemoteGui::disable()
198 // std::unique_lock g{mtx};
200 // it might happen, that this function is triggered from handleEvents
201 // std::unique_lock ul{handleEventsMtx};
204 tab.internalSetDisabled(guiTab.controlGroup.applyButton.getName(), true);
208 LocalizationRemoteGui::reset()
212 // std::lock_guard g{mtx};
214 guiTab.localizationCorrection.x.setValue(0.F);
215 guiTab.localizationCorrection.y.setValue(0.F);
216 guiTab.localizationCorrection.yaw.setValue(0.F);
219 guiTab.sendUpdates();
222 } // namespace armarx::localization_and_mapping::components::cartographer_localization_and_mapping