14#include <ArmarXGui/interface/RemoteGuiInterface.h>
35 if (runningTask->isRunning())
42 LocalizationRemoteGui::createRemoteGuiTab()
49 guiTab.localizationCorrection.group.
setLabel(
"Localization correction");
51 const float posMax = 10'000;
52 guiTab.localizationCorrection.x.
setName(
"x");
53 guiTab.localizationCorrection.x.
setRange(-posMax, posMax);
55 guiTab.localizationCorrection.x.
setSteps(
int(posMax / 10));
56 guiTab.localizationCorrection.x.
setValue(0.F);
58 guiTab.localizationCorrection.y.
setName(
"y");
59 guiTab.localizationCorrection.y.
setRange(-posMax, posMax);
61 guiTab.localizationCorrection.y.
setSteps(
int(posMax / 10));
62 guiTab.localizationCorrection.y.
setValue(0.F);
64 const float angleMax = M_PIf32;
66 guiTab.localizationCorrection.yaw.
setName(
"yaw");
67 guiTab.localizationCorrection.yaw.
setRange(-angleMax, angleMax);
69 guiTab.localizationCorrection.yaw.
setSteps(360);
70 guiTab.localizationCorrection.yaw.
setValue(0.F);
72 guiTab.controlGroup.applyButton.
setLabel(
"Apply");
78 grid.
add(guiTab.localizationCorrection.x, {row, 1});
81 grid.
add(guiTab.localizationCorrection.y, {row, 1});
84 grid.
add(guiTab.localizationCorrection.yaw, {row, 1});
87 grid.
add(guiTab.controlGroup.applyButton, {row, 1});
93 guiTab.localizationCorrection.group.
addChild(root);
96 guiTab.hbox.
addChild(guiTab.localizationCorrection.group);
98 guiTab.
create(REMOTE_GUI_TAB_MAME, remoteGui, guiTab.hbox);
105 LocalizationRemoteGui::run()
107 constexpr int kCycleDurationMs = 100;
109 CycleUtil
c(kCycleDurationMs);
110 while (!runningTask->isStopped())
115 std::lock_guard g{mtx};
118 tab.receiveUpdates();
119 guiTab.receiveUpdates();
126 std::lock_guard g{mtx};
130 guiTab.sendUpdates();
134 c.waitForCycleDuration();
139 LocalizationRemoteGui::handleEvents(RemoteGui::TabProxy& tab)
143 std::lock_guard g{handleEventsMtx};
145 const Eigen::Vector3f correction{guiTab.localizationCorrection.x.getValue(),
146 guiTab.localizationCorrection.y.getValue(),
147 guiTab.localizationCorrection.yaw.getValue()};
150 const Eigen::Vector3f diff = correction - localizationCorrection;
153 if ((diff.cwiseAbs().array() > 0.01F).any())
155 localizationCorrection = correction;
157 const Eigen::Isometry3f trafo =
158 Eigen::Translation3f(Eigen::Vector3f{correction.x(), correction.y(), 0.F}) *
159 Eigen::Isometry3f(Eigen::AngleAxisf(correction.z(), Eigen::Vector3f::UnitZ()));
161 callee.onLocalizationCorrection(trafo);
164 bool wasButtonClicked =
false;
169 wasButtonClicked = guiTab.controlGroup.applyButton.wasClicked();
171 catch (armarx::LocalException& e)
176 if (wasButtonClicked)
179 callee.onApplyLocalizationCorrection();
188 if (!runningTask->isStopped())
193 ARMARX_DEBUG <<
"Removing tab: " << REMOTE_GUI_TAB_MAME;
194 remoteGui->removeTab(REMOTE_GUI_TAB_MAME);
203 tab.internalSetDisabled(guiTab.controlGroup.applyButton.getName(),
false);
217 tab.internalSetDisabled(guiTab.controlGroup.applyButton.getName(),
true);
227 guiTab.localizationCorrection.x.setValue(0.F);
228 guiTab.localizationCorrection.y.setValue(0.F);
229 guiTab.localizationCorrection.yaw.setValue(0.F);
232 guiTab.sendUpdates();
LocalizationRemoteGui(const RemoteGuiInterfacePrx &remoteGui, LocalizationRemoteGuiCallee &callee)
#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...
#define ARMARX_INFO
The normal logging level.
#define ARMARX_DEBUG
The logging level for output that is only interesting while debugging.
std::string GetHandledExceptionString()
void setRange(float min, float max)
void setValue(float newValue)
void setDecimals(int decimals)
void setRange(float min, float max)
void setValue(float newValue)
GridLayout & add(Widget const &child, Pos pos, Span span=Span{1, 1})
void setLabel(std::string const &text)
void create(std::string const &name, Ice::ObjectPrx const &remoteGuiObject, Widget const &rootWidget)