This is a page to help me remember how to run the iCub skinDriftCompensation module and the corresponding GUI, in order to replicate a problem. Based on information from Andrea Del Prete.
Let ICUB_BASE be the path to the iCub source code (in the past this was ICUB_ROOT, but that now appears to mean something different: the location of a set of installed configuration files).
Names and locations of relevant modules:
- skinDriftCompensation - $ICUB_BASE/main/src/modules/skinDriftCompensation
- skinDriftCompensationGui - $ICUB_BASE/main/src/tools/skinDriftCompensationGui
- Media:TactileDataSimulation.zip - a dummy source of tactile data, for testing (from Andrea).
Notes on running TactileDataSimulation
(notes from Andrea) When I was testing my code I wrote a little program that simulates a skin port (you find it attached, Media:TactileDataSimulation.zip). You can use this program to create all the skin ports needed and then you should have the right enviroment to experience the same hang. Unfortunately the program opens only a port, so you should run 7 instances specifying the 7 port names (or you can modify the program). When you are done with the skin ports open with the manager the script $ICUB_ROOT/app/skinGui/skinGuiLeftArm.xml. Then click "Run Modules" and then click "Update". If the manager hangs there is the problem. But remember to decomment the automatic port connections in the code of the skinDriftCompensationGui module.
The seven skin parts I'm talking about are: left_hand, left_forearm_upper, left_forearm_lower, left_arm_upper_internal, left_arm_upper_external, left_arm_upper_bottom, left_arm_lower
The port names are so composed:
where "part_name" has to be replaced with one of the skin part names above. For example:
To specify the port name to the module tactileDataSimulation there is an input parameter called "portName", for instance:
tactileDataSimulation --portName /icub/skin/left_hand
This is the only parameter you need to specify.
Notes on running skinDriftCompensation
(notes from Andrea) I think the problem you're experiencing may be easily solved by setting the "robotName" parameter to "icubSim" in the configuration file of the skinDriftCompensation. I forgot to tell you, sorry! The fact is that with the real robot, the skinDriftCompensation has to reset the baseline of the skin when it starts, and it does this by sending an rpc message to the skin rpc port. With the simulated skin the skin rpc port never replies, so the skinDriftCompensation hangs forever. Setting the "robotName" to "icubSim" the skinDriftCompensation knows it has not to reset the baseline, so everything runs fine.
- gui: initNetwork in src/main.cpp.