Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00040 #include <plugins/imagecapturer/PluginImageCapturer.h>
00041
00042
00043 namespace beliefstate {
00044 namespace plugins {
00045 PLUGIN_CLASS::PLUGIN_CLASS() {
00046 m_icapImageCapturer = NULL;
00047
00048 this->addDependency("ros");
00049 this->setPluginVersion("0.2");
00050 }
00051
00052 PLUGIN_CLASS::~PLUGIN_CLASS() {
00053 }
00054
00055 Result PLUGIN_CLASS::init(int argc, char** argv) {
00056 Result resInit = defaultResult();
00057
00058 m_icapImageCapturer = new CImageCapturer();
00059 m_icapImageCapturer->publishImages("/logged_images");
00060 this->setSubscribedToEvent("add-image-from-topic", true);
00061
00062 return resInit;
00063 }
00064
00065 Result PLUGIN_CLASS::deinit() {
00066 if(m_icapImageCapturer) {
00067 delete m_icapImageCapturer;
00068 }
00069
00070 return defaultResult();
00071 }
00072
00073 Result PLUGIN_CLASS::cycle() {
00074 Result resCycle = defaultResult();
00075 this->deployCycleData(resCycle);
00076
00077 return resCycle;
00078 }
00079
00080 void PLUGIN_CLASS::consumeEvent(Event evEvent) {
00081 if(evEvent.strEventName == "add-image-from-topic") {
00082 if(evEvent.cdDesignator) {
00083 std::string strTopic = evEvent.cdDesignator->stringValue("origin");
00084 std::string strFilename = evEvent.cdDesignator->stringValue("filename");
00085
00086 if(strTopic != "") {
00087 if(strFilename == "") {
00088 strFilename = strTopic;
00089 replace(strFilename.begin(), strFilename.end(), '/', '_');
00090 strFilename += ".jpg";
00091 }
00092
00093 ConfigSettings cfgsetCurrent = configSettings();
00094
00095 if(m_icapImageCapturer->captureFromTopic(strTopic, strFilename, cfgsetCurrent.strExperimentDirectory)) {
00096 std::string strFilepath = cfgsetCurrent.strExperimentDirectory + strFilename;
00097 this->info("Wrote image from topic '" + strTopic + "' to file '" + strFilepath + "'");
00098
00099 Event evImage = eventInResponseTo(evEvent, "add-image-from-file");
00100 evImage.cdDesignator = new CDesignator();
00101 evImage.cdDesignator->setType(ACTION);
00102 evImage.cdDesignator->setValue("origin", strTopic);
00103
00104
00105
00106
00107
00108
00109 evImage.nOpenRequestID = evEvent.nOpenRequestID;
00110 evImage.cdDesignator->setValue("filename", strFilename);
00111
00112 m_mtxEventsStore.lock();
00113 m_lstEvents.push_back(evImage);
00114 m_mtxEventsStore.unlock();
00115 } else {
00116 this->warn("Failed to capture image from topic '" + strTopic + "' and write it to '" + cfgsetCurrent.strExperimentDirectory + strFilename + "'.");
00117
00118 Event evImage = eventInResponseTo(evEvent);
00119
00120 m_mtxEventsStore.lock();
00121 m_lstEvents.push_back(evImage);
00122 m_mtxEventsStore.unlock();
00123 }
00124 } else {
00125 this->warn("No topic was given when requesting to capture an image from a topic.");
00126 }
00127 }
00128 }
00129 }
00130 }
00131
00132 extern "C" plugins::PLUGIN_CLASS* createInstance() {
00133 return new plugins::PLUGIN_CLASS();
00134 }
00135
00136 extern "C" void destroyInstance(plugins::PLUGIN_CLASS* icDestroy) {
00137 delete icDestroy;
00138 }
00139 }