29 #include "VisualServoGroupStatechartContext.generated.h"
32 using namespace VisualServoGroup;
47 VisualServoGroupStatechartContext* context = getContext<VisualServoGroupStatechartContext>();
52 if (in.isObjectInstanceChannelSet())
54 objectInstance = in.getObjectInstanceChannel();
56 else if (in.isObjectClassChannelSet())
58 ChannelRefPtr objectMemoryChannel = in.getObjectClassChannel();
60 if (!context->getObjectMemoryObserver())
63 setTimeoutEvent(500, createEventObjectNotYetLocalized());
67 memoryx::ChannelRefBaseSequence instances =
68 context->getObjectMemoryObserver()->getObjectInstances(objectMemoryChannel);
70 if (instances.size() == 0)
72 ARMARX_WARNING <<
"No instances of the object in the memory - obj channel: "
73 << objectMemoryChannel->output();
74 setTimeoutEvent(500, createEventObjectNotYetLocalized());
78 objectInstance = ChannelRefPtr::dynamicCast(instances.front());
82 throw LocalException(
"Either ObjectInstanceChannel or ObjectMemoryChannel must be set in " +
88 out.setObjectInstanceChannel(objectInstance);
90 << objectInstance->getDataField(
"existenceCertainty")->getFloat() <<
" > "
91 << in.getMinimumExistenceCertainty();
93 << objectInstance->get<
float>(
"uncertaintyOfPosition") <<
" < "
94 << in.getMaximalPositionUncertainty();
96 float existenceCertainty = objectInstance->getDataField(
"existenceCertainty")->getFloat();
97 if (existenceCertainty >= in.getMinimumExistenceCertainty())
99 float positionUncertainty = objectInstance->get<
float>(
"uncertaintyOfPosition");
101 if (existenceCertainty >= in.getGoodExistenceCertainty() &&
102 positionUncertainty <= in.getMaximalPositionUncertainty())
104 if (in.getRequestTCPControlUnit())
106 getTcpControlUnit()->request();
108 emitObjectInstanceChannelFound();
112 ARMARX_VERBOSE <<
"Waiting for better localization. Existence certainty: "
113 << existenceCertainty <<
" (min: " << in.getGoodExistenceCertainty()
114 <<
"), position uncertainty: " << positionUncertainty
115 <<
" (max: " << in.getMaximalPositionUncertainty() <<
")";
116 if (in.getRequestTCPControlUnit())
118 getTcpControlUnit()->release();
121 emitWaitForBetterLocalization();
126 ARMARX_WARNING <<
"Object was found earlier but is lost now: Existence certainty is only "
127 << existenceCertainty;
128 emitObjectNotFound();