CyberGloveProsthesisControl.cpp
Go to the documentation of this file.
1 /*
2  * This file is part of ArmarX.
3  *
4  * ArmarX is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License version 2 as
6  * published by the Free Software Foundation.
7  *
8  * ArmarX is distributed in the hope that it will be useful, but
9  * WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11  * GNU General Public License for more details.
12  *
13  * You should have received a copy of the GNU General Public License
14  * along with this program. If not, see <http://www.gnu.org/licenses/>.
15  *
16  * @package RobotAPI::ProsthesisKinestheticTeachIn
17  * @author Julia Starke ( julia dot starke at kit dot edu )
18  * @date 2020
19  * @copyright http://www.gnu.org/licenses/gpl-2.0.txt
20  * GNU General Public License
21  */
22 
24 
26 
29 
30 #include <VirtualRobot/math/Helpers.h>
34 
35 #include <chrono>
36 #include <iostream>
37 #include <fstream>
38 #include <filesystem>
39 
40 using namespace armarx;
41 using namespace ProsthesisKinestheticTeachIn;
42 
43 // DO NOT EDIT NEXT LINE
44 CyberGloveProsthesisControl::SubClassRegistry CyberGloveProsthesisControl::Registry(CyberGloveProsthesisControl::GetName(), &CyberGloveProsthesisControl::CreateInstance);
45 
46 
47 
49 {
50  // put your user code for the enter-point here
51  // execution time should be short (<100ms)
52  ARMARX_IMPORTANT << "onEnter";
53 }
54 
55 void CyberGloveProsthesisControl::shapeHand(float fingers, float thumb)
56 {
57  getHandUnit()->setJointAngles({{"Fingers", fingers}, {"Thumb", thumb}});
58 }
59 
60 // possibly add debug observer code here
61 //class ProsthesisPositionHelper;
62 //typedef boost::shared_ptr<ProsthesisPositionHelper> ProsthesisPositionHelperPtr;
63 //class ProsthesisPositionHelper
64 //{
65 //public:
66 
67 // ProsthesisPositionHelper(ObserverInterfacePrx robotUnitObserver)
68 // : robotUnitObserver(robotUnitObserver)
69 // {
70 // thumbDF = DatafieldRefPtr::dynamicCast(robotUnitObserver->getDatafieldRefByName("SensorDevices", "RightHandThumb_position"));
71 // fingersDF = DatafieldRefPtr::dynamicCast(robotUnitObserver->getDatafieldRefByName("SensorDevices", "RightHandFingers_position"));
72 // }
73 
74 // ~ProsthesisPositionHelper()
75 // {
76 // }
77 
78 // float getThumbPosition()
79 // {
80 // return thumbDF->getDataField()->getFloat();
81 // }
82 
83 // float getFingersPosition()
84 // {
85 // return fingersDF->getDataField()->getFloat();
86 // }
87 
88 // ObserverInterfacePrx robotUnitObserver;
89 // DatafieldRefPtr thumbDF;
90 // DatafieldRefPtr fingersDF;
91 //};
92 
93 
95 {
96  // put your user code for the execution-phase here
97  // runs in seperate thread, thus can do complex operations
98  // should check constantly whether isRunningTaskStopped() returns true
99 
100  // get a private kinematic instance for this state of the robot (tick "Robot State Component" proxy checkbox in statechart group)
101  // VirtualRobot::RobotPtr robot = getLocalRobot();
102 
103  // DebugDrawerHelper debugDrawerHelper(getDebugDrawerTopic(), "RemoteTeachIn", robot);
104  // ProsthesisPositionHelperPtr prosthesisPositionHelper;
105 
107  rootLayoutBuilder
108  .addChild(RemoteGui::makeLabel("message"))
109  .addChild(RemoteGui::makeLabel("status").value("status"))
110  .addChild(RemoteGui::makeLabel("instruction"))
112  .addChild(RemoteGui::makeButton("calibrate_cyber_glove").label("Calibrate Cyber Glove"))
113  .addChild(RemoteGui::makeButton("start_recording").label("Start Recording"))
114  .addChild(RemoteGui::makeButton("stop_recording").label("Stop Recording"))
115  .addChild(RemoteGui::makeButton("set_latest_timestamp").label("Set Latest Timestamp")))
116  .addChild(RemoteGui::makeLineEdit("file_name").value("Set file name"))
117  //.addChild(RemoteGui::makeLabel("longMessage").value("test"))
118  .addChild(new RemoteGui::VSpacer());
119 
120  getRemoteGui()->createTab("CyberGloveProsthesisControl", rootLayoutBuilder);
121  RemoteGui::TabProxy guiTab = RemoteGui::TabProxy(getRemoteGui(), "CyberGloveProsthesisControl");
122 
123  //std::string packageName = "ProsthesisKinestheticTeachIn";
124  //armarx::CMakePackageFinder finder(packageName);
125  //std::string dataDir = finder.getDataDir() + "/" + packageName + "/recordings/";
126  std::filesystem::path myPath = std::filesystem::current_path();
127  std::string dataDir = myPath.string() + "/prosthesisKinestheticTeaching/recordings/";
128  ARMARX_IMPORTANT << "Data recording directory: " << dataDir;
129  //SimpleJsonLoggerPtr logger;
130  std::ofstream logger;
131  std::string timestamp = "";
132  std::string latest_timestamp = "";
133 
134  PhaseType currentPhase = PhaseType::CalibOpen;
135 
136  int lastClickCountCalibrateCyberGlove = guiTab.getValue<int>("calibrate_cyber_glove").get();
137  int lastClickCountRecordOn = guiTab.getValue<int>("start_recording").get();
138  int lastClickCountRecordOff = guiTab.getValue<int>("stop_recording").get();
139  int lastClickCountLatestTimestamp = guiTab.getValue<int>("set_latest_timestamp").get();
140 
141  bool record = false;
142 
143  CyberGloveValues openValues;
144  CyberGloveValues closedValues;
145  bool storeCalibrationValuesForCyberGlove = false;
146 
147  std::chrono::time_point<std::chrono::system_clock> start, end;
148 
149 
150  // uncomment this if you need a continous run function. Make sure to use sleep or use blocking wait to reduce cpu load.
151  while (!isRunningTaskStopped()) // stop run function if returning true
152  {
153  // do your calculations
154  // synchronize robot clone to most recent state
155  //RemoteRobot::synchronizeLocalClone(robot, getRobotStateComponent());
156  PhaseType nextPhase = currentPhase;
157 
158  guiTab.receiveUpdates();
159  int calibrateCyberGloveClickCount = guiTab.getValue<int>("calibrate_cyber_glove").get();
160  bool calibrateCyberGloveButtonWasClicked = calibrateCyberGloveClickCount > lastClickCountCalibrateCyberGlove;
161  lastClickCountCalibrateCyberGlove = calibrateCyberGloveClickCount;
162 
163  int startRecordingClickCount = guiTab.getValue<int>("start_recording").get();
164  bool startRecordingButtonClicked = startRecordingClickCount > lastClickCountRecordOn;
165  lastClickCountRecordOn = startRecordingClickCount;
166 
167  int stopRecordingClickCount = guiTab.getValue<int>("stop_recording").get();
168  bool stopRecordingButtonClicked = stopRecordingClickCount > lastClickCountRecordOff;
169  lastClickCountRecordOff = stopRecordingClickCount;
170 
171  int setLatestTimestampClickCount = guiTab.getValue<int>("set_latest_timestamp").get();
172  bool setLatestTimeStampButtonClicked = setLatestTimestampClickCount > lastClickCountLatestTimestamp;
173  lastClickCountLatestTimestamp = setLatestTimestampClickCount;
174  ARMARX_IMPORTANT << "Timestamp click count: " << setLatestTimestampClickCount;
175 
176  CyberGloveValues currentValues = getCyberGloveObserver()->getLatestValues();
177 
178  float thumbValue = 0;
179  float indexValue = 0;
180 
181  auto calcThumbSum = [](const CyberGloveValues & v)
182  {
183  return v.thumbAbd + v.thumbCMC + v.thumbIP + v.thumbMCP;
184  };
185  auto calcIndexSum = [](const CyberGloveValues & v)
186  {
187  return v.indexDIP + v.indexMCP + v.indexPIP;
188  };
189 
190  if (setLatestTimeStampButtonClicked)
191  {
192  if (!latest_timestamp.empty())
193  {
194  timestamp = latest_timestamp;
195  //guiTab.getValue<std::string>("longMessage").set("Resume latest timestamp. Latest timestamp is " + latest_timestamp);
196  getMessageDisplay()->setMessage("Resume latest timestamp", "Latest timestamp is " + latest_timestamp);
197  }
198  else
199  {
200  //guiTab.getValue<std::string>("longMessage").set("No timestamp stored.");
201  getMessageDisplay()->setMessage("No timestamp stored.", "Take a point cloud to generate a timestamp.");
202  }
203  }
204 
205  if (startRecordingButtonClicked)
206  {
207  if (timestamp.empty())
208  {
209  IceUtil::Time now = IceUtil::Time::now();
210  time_t timer = now.toSeconds();
211  struct tm* ts;
212  char buffer[80];
213  ts = localtime(&timer);
214  strftime(buffer, 80, "%Y-%m-%d-%H-%M-%S", ts);
215  std::string str(buffer);
216  timestamp = str;
217  latest_timestamp = timestamp;
218  }
219  std::string fileName = guiTab.getValue<std::string>("file_name").get();
220  //logger.reset(new SimpleJsonLogger(dataDir + fileName + "-temp-" + timestamp + ".json", false));
221  logger.open(dataDir + fileName + "-temp-" + timestamp + ".csv");
222  start = std::chrono::system_clock::now();
223  logger << "Timestamp, indexTarget, thumbTarget, indexActual, thumbActual" << std::endl;
224  record = true;
225  storeCalibrationValuesForCyberGlove = true;
226  getMessageDisplay()->setMessage("Start Recording Trajectory", "");
227  }
228 
229  if (stopRecordingButtonClicked)
230  {
231  timestamp = "";
232  //logger->close();
233  logger.close();
234  record = false;
235 
236  getMessageDisplay()->setMessage("Stop Recording Trajectory", "");
237  }
238 
239  if (currentPhase == PhaseType::CalibOpen)
240  {
241  getMessageDisplay()->setMessage("Calibrating open hand", "");
242  guiTab.getValue<std::string>("message").set("Put your hand flat on the table!");
243  if (calibrateCyberGloveButtonWasClicked)
244  {
245  openValues = currentValues;
246  nextPhase = PhaseType::CalibClose;
247  }
248  }
249  if (currentPhase == PhaseType::CalibClose)
250  {
251  getMessageDisplay()->setMessage("Calibrating closed hand", "");
252  guiTab.getValue<std::string>("message").set("Make a fist!");
253  if (calibrateCyberGloveButtonWasClicked)
254  {
255  closedValues = currentValues;
256  nextPhase = PhaseType::TeachIn;
257  }
258  }
259  if (currentPhase == PhaseType::TeachIn)
260  {
261  guiTab.getValue<std::string>("message").set("Teach-In!");
262  thumbValue = math::Helpers::Clamp(0, 1, math::Helpers::ILerp(calcThumbSum(openValues), calcThumbSum(closedValues), calcThumbSum(currentValues)));
263  indexValue = math::Helpers::Clamp(0, 1, math::Helpers::ILerp(calcIndexSum(openValues), calcIndexSum(closedValues), calcIndexSum(currentValues)));
264 
265  if (!std::isfinite(thumbValue))
266  {
267  thumbValue = 0;
268  }
269  if (!std::isfinite(indexValue))
270  {
271  indexValue = 0;
272  }
273 
274  //SimpleJsonLoggerEntry e;
275  shapeHand(indexValue, thumbValue);
276 
277  // e.AddTimestamp();
278  NameValueMap handMotorValues = getHandUnit()->getCurrentJointValues();
279  // e.Add("indexValueTarget", indexValue);
280  // e.Add("thumbValueTarget", thumbValue);
281  // e.Add("indexValueActual", handMotorValues["Fingers"]);
282  // e.Add("thumbValueActual", handMotorValues["Thumb"]);
283 
284  if (record)
285  {
286 
287  end = std::chrono::system_clock::now();
288  double elapsed_milliseconds = std::chrono::duration_cast<std::chrono::milliseconds>
289  (end - start).count();
290  logger << elapsed_milliseconds << "," << indexValue << "," << thumbValue << "," << handMotorValues["Fingers"] << "," << handMotorValues["Thumb"] << std::endl;
291 
292  // if (storeCalibrationValuesForCyberGlove)
293  // {
294  // ARMARX_IMPORTANT << "Recording raw joint values for calibration.";
295  // e = getRawJointValuesForCalibration(openValues, closedValues);
296  // storeCalibrationValuesForCyberGlove = false;
297  // }
298  // else
299  // {
300  // addCurrentRawJointValues(currentValues, e);
301  // }
302  // logger->log(e);
303  }
304  }
305 
306  {
307  std::stringstream ss;
308  ss << "index: " << currentValues.indexMCP << " " << currentValues.indexPIP << " " << currentValues.indexDIP << "\n";
309  ss << "thumb: " << currentValues.thumbMCP << " " << currentValues.thumbIP << " " << currentValues.thumbCMC << " " << currentValues.thumbAbd << "\n";
310  ss << std::floor(indexValue * 100) << "% " << std::floor(thumbValue * 100) << "%\n";
311  guiTab.getValue<std::string>("status").set(ss.str());
312  }
313  //ARMARX_IMPORTANT << "index: " << getCyberGloveObserver()->getLatestValues().indexMCP << " thumb: " << getCyberGloveObserver()->getLatestValues().thumbMCP;
314 
315  guiTab.sendUpdates();
316 
317  currentPhase = nextPhase;
318 
319  TimeUtil::SleepMS(10);
320  }
321 
322  shapeHand(0, 0);
323  //logger->close();
324  logger.close();
325 }
326 
327 //void CyberGloveProsthesisControl::onBreak()
328 //{
329 // // put your user code for the breaking point here
330 // // execution time should be short (<100ms)
331 //}
332 
334 {
335  // put your user code for the exit point here
336  // execution time should be short (<100ms)
337 }
338 
339 
340 // DO NOT EDIT NEXT FUNCTION
342 {
344 }
345 
346 //void CyberGloveProsthesisControl::addCurrentRawJointValues(CyberGloveValues& currentValues, SimpleJsonLoggerEntry& e)
347 //{
348 // std::map<std::string, float> currentRawJointValues;
349 // currentRawJointValues["thumbAbd"] = currentValues.thumbAbd;
350 // currentRawJointValues["thumbCMC"] = currentValues.thumbCMC;
351 // currentRawJointValues["thumbIP"] = currentValues.thumbIP;
352 // currentRawJointValues["thumbMCP"] = currentValues.thumbMCP;
353 
354 // currentRawJointValues["indexDIP"] = currentValues.indexDIP;
355 // currentRawJointValues["indexMCP"] = currentValues.indexMCP;
356 // currentRawJointValues["indexPIP"] = currentValues.indexPIP;
357 
358 // currentRawJointValues["middleAbd"] = currentValues.middleAbd;
359 // currentRawJointValues["middleDIP"] = currentValues.middleDIP;
360 // currentRawJointValues["middleMCP"] = currentValues.middleMCP;
361 // currentRawJointValues["middlePIP"] = currentValues.middlePIP;
362 
363 // currentRawJointValues["ringAbd"] = currentValues.ringAbd;
364 // currentRawJointValues["ringDIP"] = currentValues.ringDIP;
365 // currentRawJointValues["ringMCP"] = currentValues.ringMCP;
366 // currentRawJointValues["ringPIP"] = currentValues.ringPIP;
367 
368 // currentRawJointValues["littleAbd"] = currentValues.littleAbd;
369 // currentRawJointValues["littleDIP"] = currentValues.littleDIP;
370 // currentRawJointValues["littleMCP"] = currentValues.littleMCP;
371 // currentRawJointValues["littlePIP"] = currentValues.littlePIP;
372 
373 // currentRawJointValues["palmArch"] = currentValues.palmArch;
374 
375 // currentRawJointValues["wristFlex"] = currentValues.wristFlex;
376 // currentRawJointValues["wristAbd"] = currentValues.wristAbd;
377 
378 // e.Add("rawJointValues", currentRawJointValues);
379 //}
380 
381 //SimpleJsonLoggerEntry CyberGloveProsthesisControl::getRawJointValuesForCalibration(CyberGloveValues& openValues, CyberGloveValues& closedValues)
382 //{
383 // SimpleJsonLoggerEntry entriesForCalibration;
384 // entriesForCalibration.AddTimestamp();
385 // std::map<std::string, float> rawJointValuesOpen;
386 // rawJointValuesOpen["thumbAbd"] = openValues.thumbAbd;
387 // rawJointValuesOpen["thumbCMC"] = openValues.thumbCMC;
388 // rawJointValuesOpen["thumbIP"] = openValues.thumbIP;
389 // rawJointValuesOpen["thumbMCP"] = openValues.thumbMCP;
390 
391 // rawJointValuesOpen["indexDIP"] = openValues.indexDIP;
392 // rawJointValuesOpen["indexMCP"] = openValues.indexMCP;
393 // rawJointValuesOpen["indexPIP"] = openValues.indexPIP;
394 
395 // rawJointValuesOpen["middleAbd"] = openValues.middleAbd;
396 // rawJointValuesOpen["middleDIP"] = openValues.middleDIP;
397 // rawJointValuesOpen["middleMCP"] = openValues.middleMCP;
398 // rawJointValuesOpen["middlePIP"] = openValues.middlePIP;
399 
400 // rawJointValuesOpen["ringAbd"] = openValues.ringAbd;
401 // rawJointValuesOpen["ringDIP"] = openValues.ringDIP;
402 // rawJointValuesOpen["ringMCP"] = openValues.ringMCP;
403 // rawJointValuesOpen["ringPIP"] = openValues.ringPIP;
404 
405 // rawJointValuesOpen["littleAbd"] = openValues.littleAbd;
406 // rawJointValuesOpen["littleDIP"] = openValues.littleDIP;
407 // rawJointValuesOpen["littleMCP"] = openValues.littleMCP;
408 // rawJointValuesOpen["littlePIP"] = openValues.littlePIP;
409 
410 // rawJointValuesOpen["palmArch"] = openValues.palmArch;
411 
412 // rawJointValuesOpen["wristFlex"] = openValues.wristFlex;
413 // rawJointValuesOpen["wristAbd"] = openValues.wristAbd;
414 
415 // entriesForCalibration.Add("rawJointValuesForCalibrationOpen", rawJointValuesOpen);
416 
417 // std::map<std::string, float> rawJointValuesClosed;
418 // rawJointValuesClosed["thumbAbd"] = closedValues.thumbAbd;
419 // rawJointValuesClosed["thumbCMC"] = closedValues.thumbCMC;
420 // rawJointValuesClosed["thumbIP"] = closedValues.thumbIP;
421 // rawJointValuesClosed["thumbMCP"] = closedValues.thumbMCP;
422 
423 // rawJointValuesClosed["indexDIP"] = closedValues.indexDIP;
424 // rawJointValuesClosed["indexMCP"] = closedValues.indexMCP;
425 // rawJointValuesClosed["indexPIP"] = closedValues.indexPIP;
426 
427 // rawJointValuesClosed["middleAbd"] = closedValues.middleAbd;
428 // rawJointValuesClosed["middleDIP"] = closedValues.middleDIP;
429 // rawJointValuesClosed["middleMCP"] = closedValues.middleMCP;
430 // rawJointValuesClosed["middlePIP"] = closedValues.middlePIP;
431 
432 // rawJointValuesClosed["ringAbd"] = closedValues.ringAbd;
433 // rawJointValuesClosed["ringDIP"] = closedValues.ringDIP;
434 // rawJointValuesClosed["ringMCP"] = closedValues.ringMCP;
435 // rawJointValuesClosed["ringPIP"] = closedValues.ringPIP;
436 
437 // rawJointValuesClosed["littleAbd"] = closedValues.littleAbd;
438 // rawJointValuesClosed["littleDIP"] = closedValues.littleDIP;
439 // rawJointValuesClosed["littleMCP"] = closedValues.littleMCP;
440 // rawJointValuesClosed["littlePIP"] = closedValues.littlePIP;
441 
442 // rawJointValuesClosed["palmArch"] = closedValues.palmArch;
443 
444 // rawJointValuesClosed["wristFlex"] = closedValues.wristFlex;
445 // rawJointValuesClosed["wristAbd"] = closedValues.wristAbd;
446 
447 // entriesForCalibration.Add("rawJointValuesForCalibrationClosed", rawJointValuesClosed);
448 
449 // return entriesForCalibration;
450 //}
armarx::RemoteGui::makeVBoxLayout
detail::VBoxLayoutBuilder makeVBoxLayout(std::string const &name="")
Definition: LayoutWidgets.h:245
str
std::string str(const T &t)
Definition: UserAssistedSegmenterGuiWidgetController.cpp:42
armarx::ProsthesisKinestheticTeachIn::CyberGloveProsthesisControl::onExit
void onExit() override
Definition: CyberGloveProsthesisControl.cpp:333
armarx::RemoteGui::makeHBoxLayout
detail::HBoxLayoutBuilder makeHBoxLayout(std::string const &name="")
Definition: LayoutWidgets.h:230
armarx::ProsthesisKinestheticTeachIn::CyberGloveProsthesisControl::CreateInstance
static XMLStateFactoryBasePtr CreateInstance(XMLStateConstructorParams stateData)
Definition: CyberGloveProsthesisControl.cpp:341
ARMARX_IMPORTANT
#define ARMARX_IMPORTANT
Definition: Logging.h:183
armarx::RemoteGui::detail::VBoxLayoutBuilder
Definition: LayoutWidgets.h:94
armarx::RemoteGui::makeButton
detail::ButtonBuilder makeButton(std::string const &name)
Definition: IntegerWidgets.h:48
CyberGloveProsthesisControl.h
armarx::RemoteGui::makeLabel
detail::LabelBuilder makeLabel(std::string const &name)
Definition: StaticWidgets.h:17
WidgetBuilder.h
armarx::XMLStateConstructorParams
Definition: XMLState.h:50
armarx::CyberGloveValues::thumbAbd
int thumbAbd
Definition: CyberGloveInterface.ice:37
armarx::RemoteGui::makeLineEdit
detail::LineEditBuilder makeLineEdit(std::string const &name)
Definition: StringWidgets.h:53
armarx::navigation::platform_controller::platform_global_trajectory::NameValueMap
std::map< std::string, float > NameValueMap
Definition: PlatformGlobalTrajectoryController.h:93
armarx::CyberGloveValues::indexDIP
int indexDIP
Definition: CyberGloveInterface.ice:40
armarx::ProsthesisKinestheticTeachIn::CyberGloveProsthesisControl::run
void run() override
Definition: CyberGloveProsthesisControl.cpp:94
IceInternal::Handle
Definition: forward_declarations.h:8
std::isfinite
bool isfinite(const std::vector< T, Ts... > &v)
Definition: algorithm.h:327
armarx::ProsthesisKinestheticTeachIn::CyberGloveProsthesisControl::onEnter
void onEnter() override
Definition: CyberGloveProsthesisControl.cpp:48
DatafieldRef.h
armarx::RemoteGui::TabProxy
Definition: WidgetProxy.h:17
cxxopts::value
std::shared_ptr< Value > value()
Definition: cxxopts.hpp:926
armarx::RemoteGui::TabProxy::receiveUpdates
void receiveUpdates()
Definition: WidgetProxy.h:131
armarx::RemoteGui::detail::ChildrenMixin::addChild
Derived & addChild(WidgetPtr const &child)
Definition: LayoutWidgets.h:22
armarx::ProsthesisKinestheticTeachIn::CyberGloveProsthesisControl::PhaseType::TeachIn
@ TeachIn
armarx::CyberGloveValues::thumbIP
int thumbIP
Definition: CyberGloveInterface.ice:36
armarx::CyberGloveValues::indexPIP
int indexPIP
Definition: CyberGloveInterface.ice:39
armarx::ProsthesisKinestheticTeachIn::CyberGloveProsthesisControl::PhaseType
PhaseType
Definition: CyberGloveProsthesisControl.h:38
WidgetProxy.h
armarx::CyberGloveValues
Definition: CyberGloveInterface.ice:30
armarx::armem::Time
armarx::core::time::DateTime Time
Definition: forward_declarations.h:13
armarx::RemoteGui::TabProxy::getValue
ValueProxy< T > getValue(std::string const &name)
Definition: WidgetProxy.h:161
armarx::ProsthesisKinestheticTeachIn::CyberGloveProsthesisControl::CyberGloveProsthesisControl
CyberGloveProsthesisControl(const XMLStateConstructorParams &stateData)
Definition: CyberGloveProsthesisControl.h:33
armarx::XMLStateFactoryBasePtr
IceInternal::Handle< XMLStateFactoryBase > XMLStateFactoryBasePtr
Definition: XMLState.h:65
armarx::ProsthesisKinestheticTeachIn::CyberGloveProsthesisControl::PhaseType::CalibClose
@ CalibClose
armarx::ctrlutil::v
double v(double t, double v0, double a0, double j)
Definition: CtrlUtil.h:39
armarx::TimeUtil::SleepMS
static void SleepMS(float milliseconds)
Definition: TimeUtil.h:195
armarx::CyberGloveValues::thumbMCP
int thumbMCP
Definition: CyberGloveInterface.ice:35
TimeUtil.h
set
set(LIBS ArmarXCoreInterfaces ${CMAKE_THREAD_LIBS_INIT} ${dl_LIBRARIES} ${rt_LIBRARIES} ${QT_LIBRARIES} ${Boost_LIBRARIES} BoostAssertionHandler ArmarXCPPUtility SimoxUtility) set(LIB_FILES ArmarXManager.cpp ArmarXMultipleObjectsScheduler.cpp ArmarXObjectScheduler.cpp ManagedIceObject.cpp ManagedIceObjectPlugin.cpp Component.cpp ComponentPlugin.cpp IceGridAdmin.cpp ArmarXObjectObserver.cpp IceManager.cpp PackagePath.cpp RemoteReferenceCount.cpp logging/LoggingUtil.cpp logging/Logging.cpp logging/LogSender.cpp logging/ArmarXLogBuf.cpp system/ArmarXDataPath.cpp system/DynamicLibrary.cpp system/ProcessWatcher.cpp system/FactoryCollectionBase.cpp system/cmake/CMakePackageFinder.cpp system/cmake/CMakePackageFinderCache.cpp system/cmake/ArmarXPackageToolInterface.cpp system/RemoteObjectNode.cpp services/sharedmemory/HardwareId.cpp services/tasks/RunningTask.cpp services/tasks/ThreadList.cpp services/tasks/ThreadPool.cpp services/profiler/Profiler.cpp services/profiler/FileLoggingStrategy.cpp services/profiler/IceLoggingStrategy.cpp application/Application.cpp application/ApplicationOptions.cpp application/ApplicationProcessFacet.cpp application/ApplicationNetworkStats.cpp application/properties/PropertyUser.cpp application/properties/Property.cpp application/properties/PropertyDefinition.cpp application/properties/PropertyDefinitionContainer.cpp application/properties/PropertyDefinitionHelpFormatter.cpp application/properties/PropertyDefinitionConfigFormatter.cpp application/properties/PropertyDefinitionBriefHelpFormatter.cpp application/properties/PropertyDefinitionXmlFormatter.cpp application/properties/PropertyDefinitionDoxygenFormatter.cpp application/properties/PropertyDefinitionDoxygenComponentPagesFormatter.cpp application/properties/PropertyDefinitionContainerBriefHelpFormatter.cpp application/properties/IceProperties.cpp exceptions/Exception.cpp exceptions/local/UnexpectedEnumValueException.cpp util/FileSystemPathBuilder.cpp util/StringHelpers.cpp util/IceReportSkipper.cpp util/Throttler.cpp util/distributed/AMDCallbackCollection.cpp util/distributed/RemoteHandle/ClientSideRemoteHandleControlBlock.cpp util/distributed/RemoteHandle/RemoteHandle.cpp util/distributed/RemoteHandle/RemoteHandleControlBlock.cpp time/ice_conversions.cpp time/json_conversions.cpp time/CallbackWaitLock.cpp time/Clock.cpp time/ClockType.cpp time/ClockTypeNames.cpp time/CycleUtil.cpp time/DateTime.cpp time/Duration.cpp time/Frequency.cpp time/LocalTimeServer.cpp time/Metronome.cpp time/ScopedStopWatch.cpp time/StopWatch.cpp time/Timer.cpp time/TimeKeeper.cpp time/TimeUtil.cpp csv/CsvWriter.cpp csv/CsvReader.cpp eigen/conversions.cpp eigen/ice_conversions.cpp) set(LIB_HEADERS ArmarXManager.h ArmarXDummyManager.h ArmarXMultipleObjectsScheduler.h ArmarXObjectObserver.h ArmarXObjectScheduler.h ArmarXFwd.h Component.h ComponentPlugin.h ComponentFactories.h CoreObjectFactories.h IceGridAdmin.h IceManager.h IceManagerImpl.h json_conversions.h ManagedIceObject.h ManagedIceObjectPlugin.h ManagedIceObjectImpl.h ManagedIceObjectDependency.h ManagedIceObjectRegistryInterface.h PackagePath.h RemoteReferenceCount.h system/ImportExport.h system/ImportExportComponent.h system/AbstractFactoryMethod.h system/FactoryCollectionBase.h system/Synchronization.h system/ArmarXDataPath.h system/DynamicLibrary.h system/ProcessWatcher.h system/ConditionSynchronization.h system/cmake/CMakePackageFinder.h system/cmake/CMakePackageFinderCache.h system/cmake/FindPackageX.cmake system/cmake/ArmarXPackageToolInterface.h system/RemoteObjectNode.h logging/LoggingUtil.h logging/LogSender.h logging/Logging.h logging/ArmarXLogBuf.h logging/SpamFilterData.h services/tasks/RunningTask.h services/tasks/PeriodicTask.h services/tasks/ThreadList.h services/tasks/TaskUtil.h services/tasks/ThreadPool.h services/sharedmemory/SharedMemoryProvider.h services/sharedmemory/SharedMemoryConsumer.h services/sharedmemory/IceSharedMemoryProvider.h services/sharedmemory/IceSharedMemoryConsumer.h services/sharedmemory/HardwareIdentifierProvider.h services/sharedmemory/HardwareId.h services/sharedmemory/exceptions/SharedMemoryExceptions.h services/profiler/Profiler.h services/profiler/LoggingStrategy.h services/profiler/FileLoggingStrategy.h services/profiler/IceLoggingStrategy.h application/Application.h application/ApplicationOptions.h application/ApplicationProcessFacet.h application/ApplicationNetworkStats.h application/properties/forward_declarations.h application/properties/Properties.h application/properties/Property.h application/properties/PluginEigen.h application/properties/PluginEnumNames.h application/properties/PluginCfgStruct.h application/properties/PluginAll.h application/properties/PropertyUser.h application/properties/PropertyDefinition.h application/properties/PropertyDefinition.hpp application/properties/PropertyDefinitionInterface.h application/properties/PropertyDefinitionContainer.h application/properties/PropertyDefinitionFormatter.h application/properties/PropertyDefinitionContainerFormatter.h application/properties/PropertyDefinitionConfigFormatter.h application/properties/PropertyDefinitionHelpFormatter.h application/properties/PropertyDefinitionBriefHelpFormatter.h application/properties/PropertyDefinitionXmlFormatter.h application/properties/PropertyDefinitionDoxygenFormatter.h application/properties/PropertyDefinitionDoxygenComponentPagesFormatter.h application/properties/PropertyDefinitionContainerBriefHelpFormatter.h application/properties/ProxyPropertyDefinition.h application/properties/IceProperties.h exceptions/Exception.h exceptions/LocalException.h exceptions/local/DynamicLibraryException.h exceptions/local/ExpressionException.h exceptions/local/FileIOException.h exceptions/local/InvalidPropertyValueException.h exceptions/local/MissingRequiredPropertyException.h exceptions/local/PropertyInheritanceCycleException.h exceptions/local/ProxyNotInitializedException.h exceptions/local/UnexpectedEnumValueException.h exceptions/local/UnmappedValueException.h exceptions/local/ValueRangeExceededException.h exceptions/user/NotImplementedYetException.h rapidxml/rapidxml.hpp rapidxml/rapidxml_print.hpp rapidxml/rapidxml_iterators.hpp rapidxml/rapidxml_utils.hpp rapidxml/wrapper/RapidXmlReader.h rapidxml/wrapper/RapidXmlWriter.h rapidxml/wrapper/DefaultRapidXmlReader.h rapidxml/wrapper/MultiNodeRapidXMLReader.h util/IceBlobToObject.h util/ObjectToIceBlob.h util/FileSystemPathBuilder.h util/FiniteStateMachine.h util/StringHelpers.h util/StringHelperTemplates.h util/algorithm.h util/OnScopeExit.h util/Predicates.h util/Preprocessor.h util/PropagateConst.h util/Registrar.h util/TemplateMetaProgramming.h util/TripleBuffer.h util/IceReportSkipper.h util/Throttler.h util/distributed/AMDCallbackCollection.h util/distributed/RemoteHandle/ClientSideRemoteHandleControlBlock.h util/distributed/RemoteHandle/RemoteHandle.h util/distributed/RemoteHandle/RemoteHandleControlBlock.h util/SimpleStatemachine.h time.h time_minimal.h time/forward_declarations.h time/ice_conversions.h time/json_conversions.h time/CallbackWaitLock.h time/Clock.h time/ClockType.h time/ClockTypeNames.h time/CycleUtil.h time/DateTime.h time/Duration.h time/Frequency.h time/LocalTimeServer.h time/Metronome.h time/ScopedStopWatch.h time/StopWatch.h time/Timer.h time/TimeUtil.h time/TimeKeeper.h csv/CsvWriter.h csv/CsvReader.h eigen/conversions.h eigen/ice_conversions.h ice_conversions.h ice_conversions/ice_conversions_boost_templates.h ice_conversions/ice_conversions_templates.h ice_conversions/ice_conversions_templates.tpp $
Definition: CMakeLists.txt:12
KITHandUnit.h
armarx::CyberGloveValues::indexMCP
int indexMCP
Definition: CyberGloveInterface.ice:38
armarx::RemoteGui::TabProxy::sendUpdates
void sendUpdates()
Definition: WidgetProxy.h:146
armarx::ProsthesisKinestheticTeachIn::CyberGloveProsthesisControl::Registry
static SubClassRegistry Registry
Definition: CyberGloveProsthesisControl.h:54
armarx::CyberGloveValues::thumbCMC
int thumbCMC
Definition: CyberGloveInterface.ice:34
DebugDrawerHelper.h
armarx::ProsthesisKinestheticTeachIn::CyberGloveProsthesisControl::PhaseType::CalibOpen
@ CalibOpen
armarx
This file offers overloads of toIce() and fromIce() functions for STL container types.
Definition: ArmarXTimeserver.cpp:28