ImageInputSystem.cpp
Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2009 by Ulrich Friedrich Klank <klank@in.tum.de>
00003  *
00004  * This program is free software; you can redistribute it and/or modify
00005  * it under the terms of the GNU General Public License as published by
00006  * the Free Software Foundation; either version 3 of the License, or
00007  * (at your option) any later version.
00008  *
00009  * This program is distributed in the hope that it will be useful,
00010  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  * GNU General Public License for more details.
00013  *
00014  * You should have received a copy of the GNU General Public License
00015  * along with this program.  If not, see <http://www.gnu.org/licenses/>.
00016  */
00017 
00018 
00019 /************************************************************************
00020                         ImageInputSystem.cpp - Copyright klank
00021 
00022 **************************************************************************/
00023 
00024 #include "ImageInputSystem.h"
00025 #include "XMLTag.h"
00026 #include <signal.h>
00027 extern volatile bool g_stopall;
00028 void COPCTRLC(int sig)
00029 {
00030   printf("In SIG INT handler of cop\n");
00031   g_stopall = true;
00032   boost::xtime t;
00033   boost::xtime_get(&t, boost::TIME_UTC);
00034   t.sec += 1;
00035   printf("Waiting 1 seconds before shutting down\n");
00036   boost::thread::sleep(t);
00037   raise(15);
00038 }
00039 
00040 
00041     /*printf("Sleeping\n");*/
00042 void Sleeping(long ms)
00043  {
00044   boost::xtime t;
00045   boost::xtime_get(&t, boost::TIME_UTC);
00046   t.nsec += ms * 1000000;  //TODO Check
00047   boost::thread::sleep(t);
00048  }
00049 
00050 using namespace cop;
00051 
00052 
00053 // Constructors/Destructors
00054 //
00055 
00056 ImageInputSystem::ImageInputSystem (XMLTag* configFile)
00057 {
00058   if(configFile != NULL && configFile->CountChildren() > 0)
00059   {
00060     XMLTag* tag = configFile->GetChild(0);
00061     if(tag == NULL)
00062     {
00063       ROS_WARN("Error Loading Image Acquisition modules\n");
00064       throw "Error in ImageInputSystem::ImageInputSystem";
00065     }
00066     m_cameras = XMLTag::Load(tag, &m_cameras);
00067     for(std::vector<Sensor*>::const_iterator it = m_cameras.begin();
00068       it != m_cameras.end(); it++)
00069      {
00070        if((*it) != NULL && (*it)->RequiresSensorList())
00071        {
00072          (*it)->SetSensorList(m_cameras);
00073        }
00074      }
00075     ROS_INFO("Loaded %ld Cameras\n", m_cameras.size());
00076     m_stConverterNames = configFile->GetProperty(XML_ATTIBUTE_READINGCONVERTER, "");
00077     if(m_stConverterNames.length() > 0)
00078     {
00079       ReadingConverter* reading = ReadingConverter::ReadingConverterFactory(m_stConverterNames);
00080       Reading::s_conv[std::pair<ReadingType_t, ReadingType_t>(reading->TypeIn(), reading->TypeOut())] = reading;
00081     }
00082   }
00083 }
00084 
00085 ImageInputSystem::~ImageInputSystem ( )
00086 {
00087   std::map<std::pair<ReadingType_t, ReadingType_t>, ReadingConverter*>::iterator iter = Reading::s_conv.begin();
00088   for(;iter != Reading::s_conv.end(); )
00089   {
00090     delete (*iter).second;
00091     Reading::s_conv.erase(iter);
00092     iter = Reading::s_conv.begin();
00093   }
00094 }
00095 
00096 
00097 void ImageInputSystem::AddSensor(Sensor* sensor)
00098 {
00099   m_cameras.push_back(sensor);
00100 
00101    for(std::vector<Sensor*>::const_iterator it = m_cameras.begin();
00102        it != m_cameras.end(); it++)
00103    {
00104      if((*it)->RequiresSensorList())
00105      {
00106         (*it)->SetSensorList(m_cameras);
00107      }
00108    }
00109 }
00110 
00111 
00112 // Accessor methods
00113 //
00114 XMLTag* ImageInputSystem::Save()
00115 {
00116         XMLTag* tag = new XMLTag(XML_NODE_IMAGEINPUTSYSTEM);
00117         tag->AddChild(XMLTag::Tag(m_cameras));
00118         return tag;
00119 }
00120 
00121 
00129 std::vector<Sensor*> ImageInputSystem::GetBestSensor (RelPose &pose)
00130 {
00131         size_t nSize = m_cameras.size();
00132   std::vector<Sensor*> sensors_seeing;
00133         for(unsigned int i = 0; i < nSize; i++)
00134         {
00135           if(m_cameras[i] == NULL)
00136       continue;
00137                 if(m_cameras[i]->CanSee(pose))//TODO: choose best
00138                 {
00139                         sensors_seeing.push_back(m_cameras[i]);
00140                 }
00141         }
00142         return sensors_seeing;
00143 }
00144 


cognitive_perception
Author(s): Ulrich F Klank
autogenerated on Mon Oct 6 2014 10:48:45