Swissranger.cpp
Go to the documentation of this file.
00001 /****************************************************************
00002 *
00003 * Copyright (c) 2010
00004 *
00005 * Fraunhofer Institute for Manufacturing Engineering
00006 * and Automation (IPA)
00007 *
00008 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00009 *
00010 * Project name: care-o-bot
00011 * ROS stack name: cob_driver
00012 * ROS package name: cob_camera_sensors
00013 * Description:
00014 *
00015 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00016 *
00017 * Author: Jan Fischer, email:jan.fischer@ipa.fhg.de
00018 * Supervised by: Jan Fischer, email:jan.fischer@ipa.fhg.de
00019 *
00020 * Date of creation: Mai 2008
00021 * ToDo:
00022 *
00023 * +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
00024 *
00025 * Redistribution and use in source and binary forms, with or without
00026 * modification, are permitted provided that the following conditions are met:
00027 *
00028 * * Redistributions of source code must retain the above copyright
00029 * notice, this list of conditions and the following disclaimer.
00030 * * Redistributions in binary form must reproduce the above copyright
00031 * notice, this list of conditions and the following disclaimer in the
00032 * documentation and/or other materials provided with the distribution.
00033 * * Neither the name of the Fraunhofer Institute for Manufacturing
00034 * Engineering and Automation (IPA) nor the names of its
00035 * contributors may be used to endorse or promote products derived from
00036 * this software without specific prior written permission.
00037 *
00038 * This program is free software: you can redistribute it and/or modify
00039 * it under the terms of the GNU Lesser General Public License LGPL as
00040 * published by the Free Software Foundation, either version 3 of the
00041 * License, or (at your option) any later version.
00042 *
00043 * This program is distributed in the hope that it will be useful,
00044 * but WITHOUT ANY WARRANTY; without even the implied warranty of
00045 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
00046 * GNU Lesser General Public License LGPL for more details.
00047 *
00048 * You should have received a copy of the GNU Lesser General Public
00049 * License LGPL along with this program.
00050 * If not, see <http://www.gnu.org/licenses/>.
00051 *
00052 ****************************************************************/
00053 #include "../include/cob_camera_sensors/StdAfx.h" 
00054 #ifdef __LINUX__
00055         #include "cob_camera_sensors/Swissranger.h"
00056         #include "cob_vision_utils/VisionUtils.h"
00057         #include "tinyxml.h"
00058 #else
00059         #include "cob_driver/cob_camera_sensors/common/include/cob_camera_sensors/Swissranger.h"
00060         #include "cob_common/cob_vision_utils/common/include/cob_vision_utils/VisionUtils.h"
00061         #include "cob_vision/windows/src/extern/TinyXml/tinyxml.h"
00062 #endif
00063 
00064 using namespace ipa_CameraSensors;
00065 
00066 __DLL_LIBCAMERASENSORS__ AbstractRangeImagingSensorPtr ipa_CameraSensors::CreateRangeImagingSensor_Swissranger()
00067 {
00068         return AbstractRangeImagingSensorPtr(new Swissranger());
00069 }
00070 
00071 Swissranger::Swissranger()
00072 {
00073         m_initialized = false;
00074         m_open = false;
00075 
00076         m_SRCam = 0;
00077         m_DataBuffer = 0;
00078         m_BufferSize = 1;
00079 
00080         m_CoeffsInitialized = false;
00081 }
00082 
00083 
00084 Swissranger::~Swissranger()
00085 {
00086         if (isOpen())
00087         {
00088                 Close();
00089         }
00090 }
00091 
00092 int ipa_CameraSensors::LibMesaCallback(SRCAM srCam, unsigned int msg, unsigned int param, void* data)
00093 {
00094         switch(msg)
00095         {
00096                 case CM_MSG_DISPLAY: // Redirects all output to console
00097                 {
00098                         if (param==MC_ETH)
00099                         {
00100                                 // Do nothing
00101                                 return 0;
00102                         }
00103                         else
00104                         {
00105                                 return SR_GetDefaultCallback()(0,msg,param,data);
00106                         }
00107                         break;
00108                 }
00109                 default:
00110                 {
00111                         // Default handling
00112                         return SR_GetDefaultCallback()(0,msg,param,data);
00113                 }
00114         }
00115         return 0;
00116 }
00117 
00118 
00119 unsigned long Swissranger::Init(std::string directory, int cameraIndex)
00120 {
00121         if (isInitialized())
00122         {
00123                 return (RET_OK | RET_CAMERA_ALREADY_INITIALIZED);
00124         }
00125 
00126         m_CameraType = ipa_CameraSensors::CAM_SWISSRANGER;
00127 
00128         // Load SR parameters from xml-file
00129         if (LoadParameters((directory + "cameraSensorsIni.xml").c_str(), cameraIndex) & RET_FAILED)
00130         {
00131                 std::cerr << "ERROR - Swissranger::Init:" << std::endl;
00132                 std::cerr << "\t ... Parsing xml configuration file failed." << std::endl;
00133                 return (RET_FAILED | RET_INIT_CAMERA_FAILED);   
00134         }
00135         
00136         m_CoeffsInitialized = true;
00137 
00138         // Set callback function, to catch annoying ethernet messages
00139         SR_SetCallback(LibMesaCallback);
00140 
00141         if (m_CalibrationMethod == MATLAB)
00142         {
00143                 // Load z-calibration files
00144                 std::string filename = directory + "MatlabCalibrationData/PMD/ZCoeffsA0.xml";
00145                 CvMat* c_mat = (CvMat*)cvLoad(filename.c_str()); 
00146                 if (! c_mat)
00147                 {
00148                         std::cerr << "ERROR - PMDCamCube::LoadParameters:" << std::endl;
00149                         std::cerr << "\t ... Error while loading " << directory + "MatlabCalibrationData/ZcoeffsA0.txt" << "." << std::endl;
00150                         std::cerr << "\t ... Data is necessary for z-calibration of swissranger camera" << std::endl;
00151                         m_CoeffsInitialized = false;
00152                         // no RET_FAILED, as we might want to calibrate the camera to create these files
00153                 }
00154                 else
00155                 {
00156                         m_CoeffsA0 = c_mat;
00157                         cvReleaseMat(&c_mat);
00158                 }
00159 
00160                 filename = directory + "MatlabCalibrationData/PMD/ZCoeffsA1.xml";
00161                 c_mat = (CvMat*)cvLoad(filename.c_str()); 
00162                 if (! c_mat)
00163                 {
00164                         std::cerr << "ERROR - PMDCamCube::LoadParameters:" << std::endl;
00165                         std::cerr << "\t ... Error while loading " << directory + "MatlabCalibrationData/ZcoeffsA1.txt" << "." << std::endl;
00166                         std::cerr << "\t ... Data is necessary for z-calibration of swissranger camera" << std::endl;
00167                         m_CoeffsInitialized = false;
00168                         // no RET_FAILED, as we might want to calibrate the camera to create these files
00169                 }
00170                 else
00171                 {
00172                         m_CoeffsA1 = c_mat;
00173                         cvReleaseMat(&c_mat);
00174                 }
00175 
00176                 filename = directory + "MatlabCalibrationData/PMD/ZCoeffsA2.xml";
00177                 c_mat = (CvMat*)cvLoad(filename.c_str()); 
00178                 if (! c_mat)
00179                 {
00180                         std::cerr << "ERROR - PMDCamCube::LoadParameters:" << std::endl;
00181                         std::cerr << "\t ... Error while loading " << directory + "MatlabCalibrationData/ZcoeffsA2.txt" << "." << std::endl;
00182                         std::cerr << "\t ... Data is necessary for z-calibration of swissranger camera" << std::endl;
00183                         m_CoeffsInitialized = false;
00184                         // no RET_FAILED, as we might want to calibrate the camera to create these files
00185                 }
00186                 else
00187                 {
00188                         m_CoeffsA2 = c_mat;
00189                         cvReleaseMat(&c_mat);
00190                 }
00191 
00192                 filename = directory + "MatlabCalibrationData/PMD/ZCoeffsA3.xml";
00193                 c_mat = (CvMat*)cvLoad(filename.c_str()); 
00194                 if (! c_mat)
00195                 {
00196                         std::cerr << "ERROR - PMDCamCube::LoadParameters:" << std::endl;
00197                         std::cerr << "\t ... Error while loading " << directory + "MatlabCalibrationData/ZcoeffsA3.txt" << "." << std::endl;
00198                         std::cerr << "\t ... Data is necessary for z-calibration of swissranger camera" << std::endl;
00199                         m_CoeffsInitialized = false;
00200                         // no RET_FAILED, as we might want to calibrate the camera to create these files
00201                 }
00202                 else
00203                 {
00204                         m_CoeffsA3 = c_mat;
00205                         cvReleaseMat(&c_mat);
00206                 }
00207 
00208                 filename = directory + "MatlabCalibrationData/PMD/ZCoeffsA4.xml";
00209                 c_mat = (CvMat*)cvLoad(filename.c_str()); 
00210                 if (! c_mat)
00211                 {
00212                         std::cerr << "ERROR - PMDCamCube::LoadParameters:" << std::endl;
00213                         std::cerr << "\t ... Error while loading " << directory + "MatlabCalibrationData/ZcoeffsA4.txt" << "." << std::endl;
00214                         std::cerr << "\t ... Data is necessary for z-calibration of swissranger camera" << std::endl;
00215                         m_CoeffsInitialized = false;
00216                         // no RET_FAILED, as we might want to calibrate the camera to create these files
00217                 }
00218                 else
00219                 {
00220                         m_CoeffsA4 = c_mat;
00221                         cvReleaseMat(&c_mat);
00222                 }
00223 
00224                 filename = directory + "MatlabCalibrationData/PMD/ZCoeffsA5.xml";
00225                 c_mat = (CvMat*)cvLoad(filename.c_str()); 
00226                 if (! c_mat)
00227                 {
00228                         std::cerr << "ERROR - PMDCamCube::LoadParameters:" << std::endl;
00229                         std::cerr << "\t ... Error while loading " << directory + "MatlabCalibrationData/ZcoeffsA5.txt" << "." << std::endl;
00230                         std::cerr << "\t ... Data is necessary for z-calibration of swissranger camera" << std::endl;
00231                         m_CoeffsInitialized = false;
00232                         // no RET_FAILED, as we might want to calibrate the camera to create these files
00233                 }
00234                 else
00235                 {
00236                         m_CoeffsA5 = c_mat;
00237                         cvReleaseMat(&c_mat);
00238                 }
00239 
00240                 filename = directory + "MatlabCalibrationData/PMD/ZCoeffsA6.xml";
00241                 c_mat = (CvMat*)cvLoad(filename.c_str()); 
00242                 if (! c_mat)
00243                 {
00244                         std::cerr << "ERROR - PMDCamCube::LoadParameters:" << std::endl;
00245                         std::cerr << "\t ... Error while loading " << directory + "MatlabCalibrationData/ZcoeffsA6.txt" << "." << std::endl;
00246                         std::cerr << "\t ... Data is necessary for z-calibration of swissranger camera" << std::endl;
00247                         m_CoeffsInitialized = false;
00248                         // no RET_FAILED, as we might want to calibrate the camera to create these files
00249                 }
00250                 else
00251                 {
00252                         m_CoeffsA6 = c_mat;
00253                         cvReleaseMat(&c_mat);
00254                 }
00255         }
00256         
00257         // set init flag
00258         m_initialized = true;
00259         m_GrayImageAcquireCalled = false;
00260 
00261         return RET_OK;
00262 }
00263 
00264 
00265 unsigned long Swissranger::Open()
00266 {
00267         if (!isInitialized())
00268         {
00269                 return (RET_FAILED | RET_CAMERA_NOT_INITIALIZED);
00270         }
00271 
00272         if (isOpen())
00273         {
00274                 return (RET_OK | RET_CAMERA_ALREADY_OPEN);
00275         }
00276 
00277         std::string sInterface = "";
00278         m_RangeCameraParameters.m_Interface.clear(); // Clear flags
00279         m_RangeCameraParameters.m_Interface.seekg(0); // Set Pointer to position 0 within stringstream
00280         m_RangeCameraParameters.m_Interface >> sInterface;
00281 
00282         if (sInterface == "USB")
00283         {
00284                 if(SR_OpenUSB(&m_SRCam, 0)<=0)
00285                 {
00286                         std::cerr << "ERROR - Swissranger::Open():" << std::endl;
00287                         std::cerr << "\t ... Could not open swissranger camera on USB port" << std::endl;
00288                         std::cerr << "\t ... Unplug and Replugin camera power cable.\n";
00289                         return RET_FAILED;
00290                 }
00291         }
00292         else if (sInterface == "ETHERNET")
00293         {
00294                 std::string sIP = "";
00295                 m_RangeCameraParameters.m_IP.clear(); // Clear flags
00296                 m_RangeCameraParameters.m_IP.seekg(0); // Set Pointer to position 0 within stringstream
00297                 m_RangeCameraParameters.m_IP >> sIP;
00298                 if(SR_OpenETH(&m_SRCam, sIP.c_str())<=0)
00299                 {
00300                         std::cerr << "ERROR - Swissranger::Open():" << std::endl;
00301                         std::cerr << "\t ... Could not open swissranger camera on ETHERNET port" << std::endl;
00302                         std::cerr << "\t ... with ip '" << sIP << "'." << std::endl;
00303                         std::cerr << "\t ... Unplug and Replugin camera power cable to fix problem\n";
00304                         return RET_FAILED;
00305                 }
00306         }
00307         else
00308         {
00309                 std::cerr << "ERROR - Swissranger::Open():" << std::endl;
00310                 std::cerr << "\t ... Unknown interface type '" << sInterface << "'" << std::endl;
00311                 return RET_FAILED;
00312         }
00313 
00314         //char DevStr[1024];
00315         //SR_GetDeviceString(m_SRCam, DevStr, 1024);
00316         //std::cout << "Swissranger::Open(): INFO" << std::endl;
00317         //std::cout << "\t ... " << DevStr << std::endl;
00318 
00319         if (SetParameters() & ipa_CameraSensors::RET_FAILED)
00320         {
00321                 std::cerr << "ERROR - AVTPikeCam::Open:" << std::endl;
00322                 std::cerr << "\t ... Could not set parameters" << std::endl;
00323                 return RET_FAILED;
00324         }
00325 
00326         std::cout << "**************************************************" << std::endl;
00327         std::cout << "Swissranger::Open: Swissranger camera device OPEN" << std::endl;
00328         std::cout << "**************************************************" << std::endl << std::endl;
00329         m_open = true;
00330 
00331         return RET_OK;
00332 }
00333 
00334 
00335 unsigned long Swissranger::Close()
00336 {
00337         if (!isOpen())
00338         {
00339                 return (RET_OK);
00340         }
00341 
00342         if(SR_Close(m_SRCam)<0)
00343         {
00344                 std::cout << "ERROR - Swissranger::Close():" << std::endl;
00345                 std::cerr << "\t ... Could not close swissranger camera." << std::endl;
00346                 return RET_FAILED;
00347         }
00348         m_SRCam = 0;
00349         
00350         m_open = false;
00351         return RET_OK;
00352 
00353 }
00354 
00355 
00356 unsigned long Swissranger::SetProperty(t_cameraProperty* cameraProperty) 
00357 {
00358         if (!m_SRCam)
00359         {
00360                 return (RET_FAILED | RET_CAMERA_NOT_OPEN);
00361         }
00362 
00363         int err = 0;
00364         switch (cameraProperty->propertyID)
00365         {
00366                 case PROP_AMPLITUDE_THRESHOLD:
00367                         if (cameraProperty->propertyType & ipa_CameraSensors::TYPE_SPECIAL)
00368                         {
00369                                 if(cameraProperty->specialValue == ipa_CameraSensors::VALUE_AUTO)
00370                                 {
00371                                         unsigned short val = 0;
00372                                         err =SR_SetAmplitudeThreshold(m_SRCam, val);
00373                                         if(err<0)
00374                                         {
00375                                                 std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00376                                                 std::cerr << "\t ... Could not set amplitude threshold to AUTO mode" << std::endl;
00377                                                 return RET_FAILED;
00378                                         }
00379                                 }
00380                                 else if(cameraProperty->specialValue == ipa_CameraSensors::VALUE_DEFAULT)
00381                                 {
00382                                         // Void
00383                                 }
00384                                 else
00385                                 {
00386                                         std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00387                                         std::cerr << "\t ... Special value 'VALUE_AUTO' or 'VALUE_DEFAULT' expected." << std::endl;
00388                                         return RET_FAILED;
00389                                 }
00390                         }
00391                         else if (cameraProperty->propertyType & (ipa_CameraSensors::TYPE_SHORT | ipa_CameraSensors::TYPE_UNSIGNED))
00392                         {
00393                                 err =SR_SetAmplitudeThreshold(m_SRCam, cameraProperty->u_shortData);
00394                                 if(err<0)
00395                                 {
00396                                         std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00397                                         std::cerr << "\t ... Could not set amplitude threshold to AUTO mode" << std::endl;
00398                                         return RET_FAILED;
00399                                 }
00400                         }
00401                         else
00402                         {
00403                                 std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00404                                 std::cerr << "\t ... Wrong property type. '(TYPE_SHORT|TYPE_UNSIGNED)' or special value 'TYPE_SPECIAL' expected." << std::endl;
00405                                 return RET_FAILED;
00406                         }
00407                         break;
00408                 case PROP_INTEGRATION_TIME:     
00409                         if (cameraProperty->propertyType & ipa_CameraSensors::TYPE_SPECIAL)
00410                         {
00411                                 if(cameraProperty->specialValue == ipa_CameraSensors::VALUE_AUTO)
00412                                 {
00413                                         err = SR_SetAutoExposure(m_SRCam, 1, 150, 5, 40);
00414                                         if(err<0)
00415                                         {
00416                                                 std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00417                                                 std::cerr << "\t ... Could not set integration time to AUTO mode" << std::endl;
00418                                                 return RET_FAILED;
00419                                         }
00420                                 }
00421                                 else if(cameraProperty->specialValue == ipa_CameraSensors::VALUE_DEFAULT)
00422                                 {
00423                                         // Void
00424                                 }
00425                                 else
00426                                 {
00427                                         std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00428                                         std::cerr << "\t ... Special value 'VALUE_AUTO' or 'VALUE_DEFAULT' expected." << std::endl;
00429                                         return RET_FAILED;
00430                                 }
00431                         }
00432                         else if (cameraProperty->propertyType & (ipa_CameraSensors::TYPE_CHARACTER | ipa_CameraSensors::TYPE_UNSIGNED))
00433                         {
00434                                 err = SR_SetAutoExposure(m_SRCam, 0xff, 150, 5, 70);
00435                                 if(err<0)
00436                                 {
00437                                         std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00438                                         std::cerr << "\t ... Could not turn off auto exposure" << std::endl;
00439                                         return RET_FAILED;
00440                                 }
00441                                 err = SR_SetIntegrationTime(m_SRCam, cameraProperty->u_charData);
00442                                 if(err<0)
00443                                 {
00444                                         std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00445                                         std::cerr << "\t ... Could not set amplitude threshold to '" << cameraProperty->u_charData << "'" << std::endl;
00446                                         return RET_FAILED;
00447                                 }
00448                         }
00449                         else
00450                         {
00451                                 std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00452                                 std::cerr << "\t ... Wrong property type. '(TYPE_LONG|TYPE_UNSIGNED)' or special value 'TYPE_SPECIAL' expected." << std::endl;
00453                                 return RET_FAILED;
00454                         }
00455                         break;
00456                 case PROP_MODULATION_FREQUENCY:
00457                         if (cameraProperty->propertyType & ipa_CameraSensors::TYPE_SPECIAL)
00458                         {
00459                                 if(cameraProperty->specialValue == ipa_CameraSensors::VALUE_AUTO)
00460                                 {
00461                                         err = SR_SetModulationFrequency(m_SRCam, MF_LAST);
00462                                         if(err<0)
00463                                         {
00464                                                 std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00465                                                 std::cerr << "\t ... Could not set modulation frequency to AUTO mode" << std::endl;
00466                                                 return RET_FAILED;
00467                                         }
00468                                 }
00469                                 else if(cameraProperty->specialValue == ipa_CameraSensors::VALUE_DEFAULT)
00470                                 {
00471                                         // Void
00472                                 }
00473                                 else
00474                                 {
00475                                         std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00476                                         std::cerr << "\t ... Special value 'VALUE_AUTO' or 'VALUE_DEFAULT' expected." << std::endl;
00477                                         return RET_FAILED;
00478                                 }
00479                         }
00480                         else if (cameraProperty->propertyType & (ipa_CameraSensors::TYPE_STRING))
00481                         {
00482                                 // MF_40MHz, SR3k: maximal range 3.75m
00483                 // MF_30MHz, SR3k, SR4k: maximal range 5m
00484                 // MF_21MHz, SR3k: maximal range 7.14m
00485                 // MF_20MHz, SR3k: maximal range 7.5m
00486                 // MF_19MHz, SR3k: maximal range 7.89m
00487                 // MF_60MHz, SR4k: maximal range 2.5m 
00488                 // MF_15MHz, SR4k: maximal range 10m
00489                 // MF_10MHz, SR4k: maximal range 15m
00490                 // MF_29MHz, SR4k: maximal range 5.17m
00491                 // MF_31MHz
00492                                 if (cameraProperty->stringData == "MF_40MHz")
00493                                 {
00494                                         err = SR_SetModulationFrequency(m_SRCam, MF_40MHz);
00495                                 }
00496                                 else if (cameraProperty->stringData == "MF_30MHz")
00497                                 {
00498                                         err = SR_SetModulationFrequency(m_SRCam, MF_30MHz);
00499                                 }
00500                                 else if (cameraProperty->stringData == "MF_21MHz")
00501                                 {
00502                                         err = SR_SetModulationFrequency(m_SRCam, MF_21MHz);
00503                                 }
00504                                 else if (cameraProperty->stringData == "MF_20MHz")
00505                                 {
00506                                         err = SR_SetModulationFrequency(m_SRCam, MF_20MHz);
00507                                 }
00508                                 else if (cameraProperty->stringData == "MF_19MHz")
00509                                 {
00510                                         err = SR_SetModulationFrequency(m_SRCam, MF_19MHz);
00511                                 }
00512                                 else if (cameraProperty->stringData == "MF_60MHz")
00513                                 {
00514                                         err = SR_SetModulationFrequency(m_SRCam, MF_60MHz);
00515                                 }
00516                                 else if (cameraProperty->stringData == "MF_15MHz")
00517                                 {
00518                                         err = SR_SetModulationFrequency(m_SRCam, MF_15MHz);
00519                                 }
00520                                 else if (cameraProperty->stringData == "MF_10MHz")
00521                                 {
00522                                         err = SR_SetModulationFrequency(m_SRCam, MF_10MHz);
00523                                 }
00524                                 else if (cameraProperty->stringData == "MF_29MHz")
00525                                 {
00526                                         err = SR_SetModulationFrequency(m_SRCam, MF_29MHz);
00527                                 }
00528                                 else if (cameraProperty->stringData == "MF_31MHz")
00529                                 {
00530                                         err = SR_SetModulationFrequency(m_SRCam, MF_31MHz);
00531                                 }
00532                                 else
00533                                 {
00534                                         std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00535                                         std::cerr << "\t ... Modulation frequency " << cameraProperty->stringData << " unknown" << std::endl;
00536                                 }
00537                                 
00538                                 if(err<0)
00539                                 {
00540                                         std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00541                                         std::cerr << "\t ... Could not set modulation frequency " << cameraProperty->stringData << std::endl;
00542                                         return RET_FAILED;
00543                                 }
00544                                 
00545                         }
00546                         else
00547                         {
00548                                 std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00549                                 std::cerr << "\t ... Wrong property type. '(TYPE_LONG|TYPE_UNSIGNED)' or special value 'TYPE_SPECIAL' expected." << std::endl;
00550                                 return RET_FAILED;
00551                         }
00552                         break;
00553                 case PROP_ACQUIRE_MODE:
00554                         if (cameraProperty->propertyType & ipa_CameraSensors::TYPE_INTEGER)
00555                         {
00556                                 err = SR_SetMode(m_SRCam, cameraProperty->integerData);
00557                                 if(err<0)
00558                                 {
00559                                         std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00560                                         std::cerr << "\t ... Could not set acquire mode" << std::endl;
00561                                         return RET_FAILED;
00562                                 }
00563                         }
00564                         else
00565                         {
00566                                 std::cerr << "ERROR - Swissranger::SetProperty:" << std::endl;
00567                                 std::cerr << "\t ... Wrong property type. 'TYPE_INTEGER' expected." << std::endl;
00568                                 return RET_FAILED;
00569                         }
00570                         break;
00571                 default:                                
00572                         std::cout << "Swissranger::SetProperty: Property " << cameraProperty->propertyID << " unspecified.\n";
00573                         return RET_FAILED;
00574                         break;
00575         }
00576 
00577         return RET_OK;
00578 }
00579 
00580 
00581 unsigned long Swissranger::SetPropertyDefaults() 
00582 {
00583         return RET_FUNCTION_NOT_IMPLEMENTED;
00584 }
00585 
00586 
00587 unsigned long Swissranger::GetProperty(t_cameraProperty* cameraProperty) 
00588 {
00589         switch (cameraProperty->propertyID)
00590         {
00591                 case PROP_DMA_BUFFER_SIZE:
00592                         cameraProperty->u_integerData = m_BufferSize;
00593                         return RET_OK;
00594                         break;
00595                 case PROP_AMPLITUDE_THRESHOLD:
00596                         if (isOpen())
00597                         {
00598                                 cameraProperty->u_shortData = SR_GetAmplitudeThreshold(m_SRCam);
00599                                 cameraProperty->propertyType = (TYPE_UNSIGNED | TYPE_SHORT);
00600                         }
00601                         else
00602                         {
00603                                 return (RET_FAILED | RET_CAMERA_NOT_OPEN);
00604                         }
00605                         break;
00606 
00607                 case PROP_INTEGRATION_TIME:     
00608                         if (isOpen())
00609                         {
00610                                 cameraProperty->u_charData = SR_GetIntegrationTime(m_SRCam);
00611                                 cameraProperty->propertyType = (TYPE_UNSIGNED | TYPE_CHARACTER);        
00612                         }
00613                         else
00614                         {
00615                                 return (RET_FAILED | RET_CAMERA_NOT_OPEN);
00616                         }
00617                         break;
00618                         
00619                 case PROP_ACQUIRE_MODE: 
00620                         if (isOpen())
00621                         {
00622                                 cameraProperty->integerData = SR_GetMode(m_SRCam);
00623                                 cameraProperty->propertyType = TYPE_INTEGER;    
00624                         }
00625                         else
00626                         {
00627                                 return (RET_FAILED | RET_CAMERA_NOT_OPEN);
00628                         }
00629                         break;
00630 
00631                 case PROP_CAMERA_RESOLUTION:
00632                         if (isOpen())
00633                         {
00634                                 cameraProperty->cameraResolution.xResolution = (int)SR_GetCols(m_SRCam);
00635                                 cameraProperty->cameraResolution.yResolution = (int)SR_GetRows(m_SRCam);
00636                                 cameraProperty->propertyType = TYPE_CAMERA_RESOLUTION;
00637                         }
00638                         else
00639                         {
00640                                 cameraProperty->cameraResolution.xResolution = 176;
00641                                 cameraProperty->cameraResolution.yResolution = 144;
00642                                 cameraProperty->propertyType = TYPE_CAMERA_RESOLUTION;
00643                         }
00644                         break;
00645 
00646                 default:                                
00647                         std::cout << "ERROR - Swissranger::GetProperty:" << std::endl;
00648                         std::cout << "\t ... Property " << cameraProperty->propertyID << " unspecified.";
00649                         return RET_FAILED;
00650                         break;
00651 
00652         }
00653 
00654         return RET_OK;
00655 }
00656 
00657 
00658 // Wrapper for IplImage retrival from AcquireImage
00659 // Images have to be initialized prior to calling this function
00660 unsigned long Swissranger::AcquireImages(cv::Mat* rangeImage, cv::Mat* grayImage, cv::Mat* cartesianImage, 
00661                                                                                  bool getLatestFrame, bool undistort, ipa_CameraSensors::t_ToFGrayImageType grayImageType)
00662 {
00663         char* rangeImageData = 0;
00664         char* grayImageData = 0;
00665         char* cartesianImageData = 0;
00666         int widthStepRange = -1;
00667         int widthStepGray = -1;
00668         int widthStepCartesian = -1;
00669 
00670         int width = -1;
00671         int height = -1;
00672         ipa_CameraSensors::t_cameraProperty cameraProperty;
00673         cameraProperty.propertyID = PROP_CAMERA_RESOLUTION;
00674         GetProperty(&cameraProperty);
00675         width = cameraProperty.cameraResolution.xResolution;
00676         height = cameraProperty.cameraResolution.yResolution;
00677 
00678         if(rangeImage)
00679         {
00680                 rangeImage->create(height, width, CV_32FC(1));
00681                 rangeImageData = rangeImage->ptr<char>(0);
00682                 widthStepRange = rangeImage->step;
00683         }
00684 
00685         if(grayImage)
00686         {
00687                 grayImage->create(height, width, CV_32FC(1));
00688                 grayImageData = grayImage->ptr<char>(0);
00689                 widthStepGray = grayImage->step;
00690         }       
00691 
00692         if(cartesianImage)
00693         {
00694                 cartesianImage->create(height, width, CV_32FC(3));
00695                 cartesianImageData = cartesianImage->ptr<char>(0);
00696                 widthStepCartesian = cartesianImage->step;
00697         }
00698 
00699         if (!rangeImage && !grayImage && !cartesianImage)
00700         {
00701                 return RET_OK;
00702         }
00703 
00704         return AcquireImages(widthStepRange, widthStepGray, widthStepCartesian, rangeImageData, grayImageData, cartesianImageData, getLatestFrame, undistort, grayImageType);
00705         
00706 }
00707 
00708 // Enables faster image retrival than AcquireImage
00709 unsigned long Swissranger::AcquireImages(int widthStepRange, int widthStepGray, int widthStepCartesian, char* rangeImageData, char* grayImageData, char* cartesianImageData,
00710                                                                                  bool getLatestFrame, bool undistort, ipa_CameraSensors::t_ToFGrayImageType grayImageType)
00711 {
00713 // Get data from camera
00715         if (!m_open)
00716         {
00717                 std::cerr << "ERROR - Swissranger::AcquireImages:" << std::endl;
00718                 std::cerr << "t ... Camera not open." << std::endl;
00719                 return (RET_FAILED | RET_CAMERA_NOT_OPEN);
00720         }
00721 
00722         //unsigned int c = SR_GetIntegrationTime(m_SRCam);
00723         //unsigned short a = SR_GetAmplitudeThreshold(m_SRCam);
00724         //std::cout << "\t ... Integration time is '" << c << "'" << std::endl;
00725         //std::cout << "\t ... Amplitude threshold is '" << a << "'" << std::endl;
00726 
00727         int width = -1;
00728         int height = -1;
00729         ipa_CameraSensors::t_cameraProperty cameraProperty;
00730         cameraProperty.propertyID = PROP_CAMERA_RESOLUTION;
00731         GetProperty(&cameraProperty);
00732         width = cameraProperty.cameraResolution.xResolution;
00733         height = cameraProperty.cameraResolution.yResolution;
00734 
00735         unsigned int bytesRead  = 0;
00736         bytesRead = SR_Acquire(m_SRCam);
00737         if(bytesRead <= 0)
00738         {
00739                 std::cerr << "ERROR - Swissranger::AcquireImages:" << std::endl;
00740                 std::cerr << "\t ... Could not acquire image!" << std::endl;
00741                 return RET_FAILED;
00742         }
00743 
00744         if (getLatestFrame == true)
00745         {
00746                 bytesRead = SR_Acquire(m_SRCam);
00747                 if(bytesRead <= 0)
00748                 {
00749                         std::cerr << "ERROR - Swissranger::AcquireImages:" << std::endl;
00750                         std::cerr << "\t ... Could not acquire image!" << std::endl;
00751                         return RET_FAILED;
00752                 }
00753         }
00754         WORD* pixels =(WORD*) SR_GetImage(m_SRCam, 0);
00756 // Range image (distorted or undistorted)
00758         if (rangeImageData)
00759         {
00760                 int imageStep = -1;
00761                 float* f_ptr = 0;
00762                 
00763                 // put data in corresponding IPLImage structures
00764                 for(unsigned int row=0; row<(unsigned int)height; row++)
00765                 {
00766                         imageStep = row*width;
00767                         f_ptr = (float*)(rangeImageData + row*widthStepRange);
00768 
00769                         for (unsigned int col=0; col<(unsigned int)width; col++)
00770                         {
00771                                 f_ptr[col] = (float)(pixels[imageStep + col]);
00772                         }       
00773                 }
00774                 
00775                 if (undistort)
00776                 {
00777                         cv::Mat undistortedData(height, width, CV_32FC(1), (float*) rangeImageData);
00778                         cv::Mat distortedData;
00779  
00780                         assert (!m_undistortMapX.empty() && !m_undistortMapY.empty());
00781                         cv::remap(distortedData, undistortedData, m_undistortMapX, m_undistortMapY, cv::INTER_LINEAR);
00782                 }
00783 
00784         } // End if (rangeImage)
00785 
00787 // Intensity/Amplitude image
00788 // ATTENTION: SR provides only amplitude information
00790         if(grayImageData)
00791         {
00792                 if (grayImageType == ipa_CameraSensors::INTENSITY_32F1 &&
00793                         m_GrayImageAcquireCalled == false)
00794                 {
00795                         std::cout << "WARNING - Swissranger::AcquireImages:" << std::endl;
00796                         std::cout << "\t ... Intensity image for swissranger not available" << std::endl;
00797                         std::cout << "\t ... falling back to amplitude image" << std::endl;
00798                         m_GrayImageAcquireCalled = true;
00799                 }
00800 
00801                 int imageSize = width*height;
00802                 int imageStep = 0;
00803                 float* f_ptr = 0;
00804 
00805                 for(unsigned int row=0; row<(unsigned int)height-1; row++)
00806                 {
00807                         imageStep = imageSize+row*width;
00808                         f_ptr = (float*)(grayImageData + row*widthStepGray);
00809 
00810                         for (unsigned int col=0; col<(unsigned int)width-1; col++)
00811                         {
00812                                 f_ptr[col] = (float)(pixels[imageStep+col]);
00813                         }       
00814                 }
00815                 
00816                 if (undistort)
00817                 {
00818                         cv::Mat undistortedData( height, width, CV_32FC1, (float*) grayImageData);
00819                         cv::Mat distortedData;
00820  
00821                         assert (!m_undistortMapX.empty() && !m_undistortMapY.empty());
00822                         cv::remap(distortedData, undistortedData, m_undistortMapX, m_undistortMapY, cv::INTER_LINEAR);
00823                 }
00824 
00825         }
00826 
00828 // Cartesian image (always undistorted)
00830         if(cartesianImageData)
00831         {
00832                 float x = -1;
00833                 float y = -1;
00834                 float zRaw = -1;
00835                 float* zCalibratedPtr = 0;
00836                 float zCalibrated = -1;
00837                 float* f_ptr = 0;
00838 
00839                 if(m_CalibrationMethod==MATLAB)
00840                 {
00841                         if (m_CoeffsInitialized)
00842                         {
00843                                 // Calculate calibrated z values (in meter) based on 6 degree polynomial approximation
00844                                 cv::Mat distortedData( height, width, CV_32FC1 );
00845                                 for(unsigned int row=0; row<(unsigned int)height; row++)
00846                                 {
00847                                         f_ptr = distortedData.ptr<float>(row);
00848                                         for (unsigned int col=0; col<(unsigned int)width; col++)
00849                                         {
00850                                                 zRaw = (float)(pixels[width*row + col]);
00851                                                 GetCalibratedZMatlab(col, row, zRaw, zCalibrated);
00852                                                 f_ptr[col] = zCalibrated;
00853                                         }       
00854                                 }
00855                                 /*IplImage dummy;
00856                                 IplImage *z = cvGetImage(distortedData, &dummy);
00857                                 IplImage *image = cvCreateImage(cvGetSize(z), IPL_DEPTH_8U, 3);
00858                                 ipa_Utils::ConvertToShowImage(z, image, 1);
00859                                 cvNamedWindow("Z");
00860                                 cvShowImage("Z", image);
00861                                 cvWaitKey();
00862                                 */
00863 
00864                                 // Undistort
00865                                 cv::Mat undistortedData;
00866                                 assert (!m_undistortMapX.empty() && !m_undistortMapY.empty());
00867                                 cv::remap(distortedData, undistortedData, m_undistortMapX, m_undistortMapY, cv::INTER_LINEAR);
00868                                 
00869                                 /*IplImage dummy;
00870                                 IplImage* z = cvGetImage(undistortedData, &dummy);
00871                                 IplImage* image = cvCreateImage(cvGetSize(z), IPL_DEPTH_8U, 3);
00872                                 ipa_utils::ConvertToShowImage(z, image, 1);
00873                                 cvNamedWindow("Z");
00874                                 cvShowImage("Z", image);
00875                                 cvWaitKey();*/
00876 
00877                                 // Calculate X and Y based on instrinsic rotation and translation
00878                                 for(unsigned int row=0; row<(unsigned int)height; row++)
00879                                 {
00880                                         zCalibratedPtr = undistortedData.ptr<float>(row);
00881                                         f_ptr = (float*)(cartesianImageData + row*widthStepCartesian);
00882 
00883                                         for (unsigned int col=0; col<(unsigned int)width; col++)
00884                                         {
00885                                                 int colTimes3 = 3*col;
00886                                                 GetCalibratedXYMatlab(col, row, zCalibratedPtr[col], x, y);
00887 
00888                                                 f_ptr[colTimes3] = x;
00889                                                 f_ptr[colTimes3 + 1] = y;
00890                                                 f_ptr[colTimes3 + 2] = zCalibratedPtr[col];
00891                                         }
00892                                 }
00893                         }
00894                         else
00895                         {
00896                                 std::cerr << "ERROR - Swissranger::AcquireImages: \n";
00897                                 std::cerr << "\t ... At least one of m_CoeffsA0 ... m_CoeffsA6 not initialized.\n";
00898                                 return RET_FAILED;
00899                         }
00900 
00901                 }
00902                 else if(m_CalibrationMethod==MATLAB_NO_Z)
00903                 {
00904                         SR_CoordTrfFlt(m_SRCam, m_X, m_Y, m_Z, sizeof(float), sizeof(float), sizeof(float));
00905                         // Calculate calibrated z values (in meter) based on 6 degree polynomial approximation
00906                         cv::Mat distortedData( height, width, CV_32FC1 );
00907                         for(unsigned int row=0; row<(unsigned int)height; row++)
00908                         {
00909                                 f_ptr = distortedData.ptr<float>(row);
00910                                 for (unsigned int col=0; col<(unsigned int)width; col++)
00911                                 {
00912                                         GetCalibratedZSwissranger(col, row, width, zCalibrated);
00913                                         f_ptr[col] = zCalibrated;
00914                                 }       
00915                         }
00916 
00917                         // Undistort
00918                         cv::Mat undistortedData;
00919                         assert (!m_undistortMapX.empty() && !m_undistortMapY.empty());
00920                         cv::remap(distortedData, undistortedData, m_undistortMapX, m_undistortMapY, cv::INTER_LINEAR);
00921 
00922                         // Calculate X and Y based on instrinsic rotation and translation
00923                         for(unsigned int row=0; row<(unsigned int)height; row++)
00924                         {
00925                                 zCalibratedPtr = undistortedData.ptr<float>(row);
00926                                 f_ptr = (float*)(cartesianImageData + row*widthStepCartesian);
00927 
00928                                 for (unsigned int col=0; col<(unsigned int)width; col++)
00929                                 {
00930                                         int colTimes3 = 3*col;
00931                                         GetCalibratedXYMatlab(col, row, zCalibratedPtr[col], x, y);
00932 
00933                                         f_ptr[colTimes3] = x;
00934                                         f_ptr[colTimes3 + 1] = y;
00935                                         f_ptr[colTimes3 + 2] = zCalibratedPtr[col];
00936                                 }
00937                         }
00938                 }
00939                 else if(m_CalibrationMethod==NATIVE)
00940                 {
00941                         SR_CoordTrfFlt(m_SRCam, m_X, m_Y, m_Z, sizeof(float), sizeof(float), sizeof(float));
00942                                         
00943                         for(unsigned int row=0; row<(unsigned int)height; row++)
00944                         {
00945                                 f_ptr = (float*)(cartesianImageData + row*widthStepCartesian);
00946 
00947                                 for (unsigned int col=0; col<(unsigned int)width; col++)
00948                                 {
00949                                         int colTimes3 = 3*col;
00950 
00951                                         GetCalibratedZSwissranger(col, row, width, zCalibrated);
00952                                         GetCalibratedXYSwissranger(col, row, width, x, y);
00953 
00954                                         f_ptr[colTimes3] = x;
00955                                         f_ptr[colTimes3 + 1] = y;
00956                                         f_ptr[colTimes3 + 2] = zCalibrated;
00957                                 }
00958                         }
00959                 }
00960                 else
00961                 {
00962                         std::cerr << "ERROR - Swissranger::AcquireImages:" << std::endl;
00963                         std::cerr << "\t ... Calibration method unknown.\n";
00964                         return RET_FAILED;
00965                 }
00966         }
00967         return RET_OK;
00968 }
00969 
00970 unsigned long Swissranger::SaveParameters(const char* filename) 
00971 {
00972         return RET_FUNCTION_NOT_IMPLEMENTED;
00973 }
00974 
00975 unsigned long Swissranger::GetCalibratedZMatlab(int u, int v, float zRaw, float& zCalibrated)
00976 {
00977 
00978         double c[7] = {m_CoeffsA0.at<double>(v,u), m_CoeffsA1.at<double>(v,u), m_CoeffsA2.at<double>(v,u), 
00979                 m_CoeffsA3.at<double>(v,u), m_CoeffsA4.at<double>(v,u), m_CoeffsA5.at<double>(v,u), m_CoeffsA6.at<double>(v,u)};
00980         double y = 0;
00981         ipa_Utils::EvaluatePolynomial((double) zRaw, 6, &c[0], &y);
00982         zCalibrated = (float) y;
00983 
00984         return RET_OK;
00985 }
00986 
00987 // Return value is in m
00988 unsigned long Swissranger::GetCalibratedZSwissranger(int u, int v, int width, float& zCalibrated)
00989 {
00990         zCalibrated = (float) m_Z[v*width + u];
00991 
00992         return RET_OK;
00993 }
00994 
00995 // u and v are assumed to be distorted coordinates
00996 unsigned long Swissranger::GetCalibratedXYMatlab(int u, int v, float z, float& x, float& y)
00997 {
00998         // Conversion form m to mm
00999         z *= 1000;
01000 
01001         // Use intrinsic camera parameters
01002         double fx, fy, cx, cy;
01003 
01004         fx = m_intrinsicMatrix.at<double>(0, 0);
01005         fy = m_intrinsicMatrix.at<double>(1, 1);
01006 
01007         cx = m_intrinsicMatrix.at<double>(0, 2);
01008         cy = m_intrinsicMatrix.at<double>(1, 2);
01009 
01010         // Fundamental equation: u = (fx*x)/z + cx
01011         if (fx == 0)
01012         {
01013                 std::cerr << "ERROR - Swissranger::GetCalibratedXYZ:" << std::endl;
01014                 std::cerr << "\t ... fx is 0.\n";
01015                 return RET_FAILED;
01016         }
01017         x = (float) (z*(u-cx)/fx) ; 
01018         
01019         // Fundamental equation: v = (fy*y)/z + cy
01020         if (fy == 0)
01021         {
01022                 std::cerr << "ERROR - Swissranger::GetCalibratedXYZ:" << std::endl;
01023                 std::cerr << "\t ... fy is 0.\n";
01024                 return RET_FAILED;
01025         }
01026         y = (float) (z*(v-cy)/fy); 
01027 
01028         // Conversion from mm to m
01029         x /= 1000;
01030         y /= 1000;
01031 
01032         return RET_OK;
01033 }
01034 
01035 unsigned long Swissranger::GetCalibratedXYSwissranger(int u, int v, int width, float& x, float& y)
01036 {
01037         // make sure, that m_X, m_Y and m_Z have been initialized by Acquire image
01038         int i = v*width + u;
01039         x = (float)m_X[i];
01040         y = (float)m_Y[i];
01041 
01042         return RET_OK;
01043 }
01044 
01045 unsigned long Swissranger::SetParameters()
01046 {
01047         ipa_CameraSensors::t_cameraProperty cameraProperty;
01048 
01049 
01050 // -----------------------------------------------------------------
01051 // Set amplitude threshold
01052 // -----------------------------------------------------------------
01053         cameraProperty.propertyID = ipa_CameraSensors::PROP_AMPLITUDE_THRESHOLD;
01054         std::string sAmplitudeThreshold = "";
01055         m_RangeCameraParameters.m_AmplitudeThreshold.clear(); // Clear flags
01056         m_RangeCameraParameters.m_AmplitudeThreshold.seekg(0); // Set Pointer to position 0 within stringstream
01057         m_RangeCameraParameters.m_AmplitudeThreshold >> sAmplitudeThreshold;
01058         if (sAmplitudeThreshold == "AUTO")
01059         {
01060                 cameraProperty.propertyType = ipa_CameraSensors::TYPE_SPECIAL;
01061                 cameraProperty.specialValue = VALUE_AUTO;
01062         }
01063         else if (sAmplitudeThreshold == "DEFAULT")
01064         {
01065                 cameraProperty.propertyType = ipa_CameraSensors::TYPE_SPECIAL;
01066                 cameraProperty.specialValue = VALUE_DEFAULT;
01067         }
01068         else
01069         {
01070                 cameraProperty.propertyType = (ipa_CameraSensors::TYPE_UNSIGNED | ipa_CameraSensors::TYPE_SHORT);
01071                 m_RangeCameraParameters.m_AmplitudeThreshold.clear(); // Clear flags
01072                 m_RangeCameraParameters.m_AmplitudeThreshold.seekg(0); // Set Pointer to position 0 within stringstream
01073                 m_RangeCameraParameters.m_AmplitudeThreshold >> cameraProperty.u_shortData;
01074         }
01075 
01076         if (SetProperty(&cameraProperty) & ipa_CameraSensors::RET_FAILED)
01077         {
01078                 std::cout << "WARNING - Swissranger::SetParameters:" << std::endl;
01079                 std::cout << "\t ... Could not set amplitude threshold" << std::endl;
01080         }
01081 
01082 // -----------------------------------------------------------------
01083 // Set integration time
01084 // -----------------------------------------------------------------
01085         cameraProperty.propertyID = ipa_CameraSensors::PROP_INTEGRATION_TIME;
01086         std::string sIntegrationTime = "";
01087         m_RangeCameraParameters.m_IntegrationTime.clear(); // Clear flags
01088         m_RangeCameraParameters.m_IntegrationTime.seekg(0); // Set Pointer to position 0 within stringstream
01089         m_RangeCameraParameters.m_IntegrationTime >> sIntegrationTime;
01090         if (sIntegrationTime == "AUTO")
01091         {
01092                 cameraProperty.propertyType = ipa_CameraSensors::TYPE_SPECIAL;
01093                 cameraProperty.specialValue = VALUE_AUTO;
01094         }
01095         else if (sIntegrationTime == "DEFAULT")
01096         {
01097                 cameraProperty.propertyType = ipa_CameraSensors::TYPE_SPECIAL;
01098                 cameraProperty.specialValue = VALUE_DEFAULT;
01099         }
01100         else
01101         {
01102                 std::string tempValue;
01103                 cameraProperty.propertyType = (ipa_CameraSensors::TYPE_UNSIGNED | ipa_CameraSensors::TYPE_CHARACTER);
01104                 m_RangeCameraParameters.m_IntegrationTime.clear(); // Clear flags
01105                 m_RangeCameraParameters.m_IntegrationTime.seekg(0); // Set Pointer to position 0 within stringstream
01106                 m_RangeCameraParameters.m_IntegrationTime >> tempValue;
01107                 cameraProperty.u_charData = (unsigned char)atoi(tempValue.c_str());
01108         }
01109 
01110         if (SetProperty(&cameraProperty) & ipa_CameraSensors::RET_FAILED)
01111         {
01112                 std::cout << "WARNING - Swissranger::SetParameters:" << std::endl;
01113                 std::cout << "\t ... Could not set integration time" << std::endl;
01114         }
01115 
01116 // -----------------------------------------------------------------
01117 // Set modulation frequency
01118 // -----------------------------------------------------------------
01119         cameraProperty.propertyID = ipa_CameraSensors::PROP_MODULATION_FREQUENCY;
01120         std::string sModulationFrequency = "";
01121         m_RangeCameraParameters.m_ModulationFrequency.clear(); // Clear flags
01122         m_RangeCameraParameters.m_ModulationFrequency.seekg(0); // Set Pointer to position 0 within stringstream
01123         m_RangeCameraParameters.m_ModulationFrequency >> sModulationFrequency;
01124         if (sModulationFrequency == "AUTO")
01125         {
01126                 cameraProperty.propertyType = ipa_CameraSensors::TYPE_SPECIAL;
01127                 cameraProperty.specialValue = VALUE_AUTO;
01128         }
01129         else if (sModulationFrequency == "DEFAULT")
01130         {
01131                 cameraProperty.propertyType = ipa_CameraSensors::TYPE_SPECIAL;
01132                 cameraProperty.specialValue = VALUE_DEFAULT;
01133         }
01134         else
01135         {
01136                 cameraProperty.propertyType = (ipa_CameraSensors::TYPE_STRING);
01137                 m_RangeCameraParameters.m_ModulationFrequency.clear(); // Clear flags
01138                 m_RangeCameraParameters.m_ModulationFrequency.seekg(0); // Set Pointer to position 0 within stringstream
01139                 m_RangeCameraParameters.m_ModulationFrequency >> cameraProperty.stringData;
01140         }
01141 
01142         if (SetProperty(&cameraProperty) & ipa_CameraSensors::RET_FAILED)
01143         {
01144                 std::cout << "WARNING - Swissranger::SetParameters:" << std::endl;
01145                 std::cout << "\t ... Could not set modulation frequency" << std::endl;
01146         }
01147 
01148 // -----------------------------------------------------------------
01149 // Set acquire mode
01150 // -----------------------------------------------------------------
01151         cameraProperty.propertyID = ipa_CameraSensors::PROP_ACQUIRE_MODE;
01152         cameraProperty.propertyType = ipa_CameraSensors::TYPE_INTEGER;
01153         m_RangeCameraParameters.m_AcquireMode.clear(); // Set Pointer to position 0 within stringstream
01154         m_RangeCameraParameters.m_AcquireMode.seekg(0); // Set Pointer to position 0 within stringstream
01155         m_RangeCameraParameters.m_AcquireMode >> cameraProperty.integerData;
01156         if (SetProperty(&cameraProperty) & ipa_CameraSensors::RET_FAILED)
01157         {
01158                 std::cout << "WARNING - Swissranger::SetParameters:" << std::endl;
01159                 std::cout << "\t ... Could not set acquire mode" << std::endl;
01160         }
01161 
01162         return RET_OK;
01163 }
01164 
01165 unsigned long Swissranger::LoadParameters(const char* filename, int cameraIndex)
01166 {
01167         // Load SwissRanger parameters.
01168         boost::shared_ptr<TiXmlDocument> p_configXmlDocument (new TiXmlDocument( filename ));
01169 
01170         if (!p_configXmlDocument->LoadFile())
01171         {
01172                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01173                 std::cerr << "\t ... Error while loading xml configuration file \n";
01174                 std::cerr << "\t ... (Check filename and syntax of the file):\n";
01175                 std::cerr << "\t ... '" << filename << "'" << std::endl;
01176                 return (RET_FAILED | RET_FAILED_OPEN_FILE);
01177         }
01178         std::cout << "INFO - Swissranger::LoadParameters:" << std::endl;
01179         std::cout << "\t ... Parsing xml configuration file:" << std::endl;
01180         std::cout << "\t ... '" << filename << "'" << std::endl;
01181 
01182         std::string tempString;
01183         if ( p_configXmlDocument )
01184         {
01185 
01186 //************************************************************************************
01187 //      BEGIN LibCameraSensors
01188 //************************************************************************************
01189                 // Tag element "LibCameraSensors" of Xml Inifile                
01190                 TiXmlElement *p_xmlElement_Root = NULL;
01191                 p_xmlElement_Root = p_configXmlDocument->FirstChildElement( "LibCameraSensors" );
01192 
01193                 if ( p_xmlElement_Root )
01194                 {
01195 
01196 //************************************************************************************
01197 //      BEGIN LibCameraSensors->Swissranger
01198 //************************************************************************************
01199                         // Tag element "Swissranger3000" of Xml Inifile         
01200                         TiXmlElement *p_xmlElement_Root_SR31 = NULL;
01201                         std::stringstream ss;
01202                         ss << "Swissranger_" << cameraIndex;
01203                         p_xmlElement_Root_SR31 = p_xmlElement_Root->FirstChildElement( ss.str() );
01204                         if ( p_xmlElement_Root_SR31 )
01205                         {
01206 
01207 //************************************************************************************
01208 //      BEGIN LibCameraSensors->Swissranger->Role
01209 //************************************************************************************
01210                                 // Subtag element "Role" of Xml Inifile
01211                                 TiXmlElement* p_xmlElement_Child = NULL;
01212                                 p_xmlElement_Child = p_xmlElement_Root_SR31->FirstChildElement( "Role" );
01213                                 if ( p_xmlElement_Child )
01214                                 {
01215                                         // read and save value of attribute
01216                                         if ( p_xmlElement_Child->QueryValueAttribute( "value", &tempString ) != TIXML_SUCCESS)
01217                                         {
01218                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01219                                                 std::cerr << "\t ... Can't find attribute 'value' of tag 'Role'." << std::endl;
01220                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01221                                         }
01222 
01223                                         if (tempString == "MASTER") m_RangeCameraParameters.m_CameraRole = MASTER;
01224                                         else if (tempString == "SLAVE") m_RangeCameraParameters.m_CameraRole = SLAVE;
01225                                         else
01226                                         {
01227                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01228                                                 std::cerr << "\t ... Role " << tempString << " unspecified." << std::endl;
01229                                                 return (RET_FAILED);
01230                                         }
01231 
01232                                 }
01233                                 else
01234                                 {
01235                                         std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01236                                         std::cerr << "\t ... Can't find tag 'Role'." << std::endl;
01237                                         return (RET_FAILED | RET_XML_TAG_NOT_FOUND);
01238                                 }
01239                                 
01240 //************************************************************************************
01241 //      BEGIN LibCameraSensors->Swissranger->Interface
01242 //************************************************************************************
01243                                 // Subtag element "OperationMode" of Xml Inifile
01244                                 p_xmlElement_Child = NULL;
01245                                 p_xmlElement_Child = p_xmlElement_Root_SR31->FirstChildElement( "Interface" );
01246                                 std::string tempString;
01247                                 if ( p_xmlElement_Child )
01248                                 {
01249                                         // read and save value of attribute
01250                                         if ( p_xmlElement_Child->QueryValueAttribute( "value", &tempString ) != TIXML_SUCCESS)
01251                                         {
01252                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01253                                                 std::cerr << "\t ... Can't find attribute 'value' of tag 'Interface'." << std::endl;
01254                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01255                                         }
01256                                         if (tempString == "USB")
01257                                         {
01258                                                 m_RangeCameraParameters.m_Interface.str( " " ); // Clear stringstream
01259                                                 m_RangeCameraParameters.m_Interface.clear();            // Reset flags
01260                                                 m_RangeCameraParameters.m_Interface << tempString;
01261                                         }
01262                                         else if (tempString == "ETHERNET")
01263                                         {
01264                                                 m_RangeCameraParameters.m_Interface.str( " " ); // Clear stringstream
01265                                                 m_RangeCameraParameters.m_Interface.clear();            // Reset flags
01266                                                 m_RangeCameraParameters.m_Interface << tempString;
01267                                                 // read and save value of attribute
01268                                                 if ( p_xmlElement_Child->QueryValueAttribute( "ip", &tempString ) != TIXML_SUCCESS)
01269                                                 {
01270                                                         std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01271                                                         std::cerr << "\t ... Can't find attribute 'ip' of tag 'Interface'." << std::endl;
01272                                                         return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01273                                                 }
01274                                                 m_RangeCameraParameters.m_IP.str( " " );        // Clear stringstream
01275                                                 m_RangeCameraParameters.m_IP.clear();           // Reset flags
01276                                                 m_RangeCameraParameters.m_IP << tempString;
01277                                         }
01278                                         else
01279                                         {
01280                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01281                                                 std::cerr << "\t ... Interface " << tempString << " unspecified." << std::endl;
01282                                                 return (RET_FAILED);
01283                                         }
01284                                 }
01285                                 else
01286                                 {
01287                                         std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01288                                         std::cerr << "\t ... Can't find tag 'Interface'." << std::endl;
01289                                         return (RET_FAILED | RET_XML_TAG_NOT_FOUND);
01290                                 }
01291                         
01292 //************************************************************************************
01293 //      BEGIN LibCameraSensors->Swissranger->AmplitudeThreshold
01294 //************************************************************************************
01295                                 // Subtag element "IntegrationTime" of Xml Inifile
01296                                 p_xmlElement_Child = NULL;
01297                                 p_xmlElement_Child = p_xmlElement_Root_SR31->FirstChildElement( "AmplitudeThreshold" );
01298                                 if ( p_xmlElement_Child )
01299                                 {
01300                                         // read and save value of attribute
01301                                         if ( p_xmlElement_Child->QueryValueAttribute( "value", &tempString) != TIXML_SUCCESS)
01302                                         {
01303                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01304                                                 std::cerr << "\t ... Can't find attribute 'value' of tag 'AmplitudeThreshold'." << std::endl;
01305                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01306                                         }
01307                                         else
01308                                         {
01309                                                 m_RangeCameraParameters.m_AmplitudeThreshold.str( " " );        // Clear stringstream
01310                                                 m_RangeCameraParameters.m_AmplitudeThreshold.clear();           // Reset flags
01311                                                 m_RangeCameraParameters.m_AmplitudeThreshold << tempString;
01312                                         }
01313                                 }
01314                                 else
01315                                 {
01316                                         std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01317                                         std::cerr << "\t ... Can't find tag 'AmplitudeThreshold'." << std::endl;
01318                                         return (RET_FAILED | RET_XML_TAG_NOT_FOUND);
01319                                 }
01320 
01321 //************************************************************************************
01322 //      BEGIN LibCameraSensors->Swissranger->IntegrationTime
01323 //************************************************************************************
01324                                 // Subtag element "IntegrationTime" of Xml Inifile
01325                                 p_xmlElement_Child = NULL;
01326                                 p_xmlElement_Child = p_xmlElement_Root_SR31->FirstChildElement( "IntegrationTime" );
01327                                 if ( p_xmlElement_Child )
01328                                 {
01329                                         // read and save value of attribute
01330                                         if ( p_xmlElement_Child->QueryValueAttribute( "value", &tempString) != TIXML_SUCCESS)
01331                                         {
01332                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01333                                                 std::cerr << "\t ... Can't find attribute 'value' of tag 'IntegrationTime'." << std::endl;
01334                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01335                                         }
01336                                         else
01337                                         {
01338                                                 m_RangeCameraParameters.m_IntegrationTime.str( " " );   // Clear stringstream
01339                                                 m_RangeCameraParameters.m_IntegrationTime.clear();              // Reset flags
01340                                                 m_RangeCameraParameters.m_IntegrationTime << tempString;
01341                                         }
01342                                 }
01343                                 else
01344                                 {
01345                                         std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01346                                         std::cerr << "\t ... Can't find tag 'IntegrationTime'." << std::endl;
01347                                         return (RET_FAILED | RET_XML_TAG_NOT_FOUND);
01348                                 }
01349 
01350 //************************************************************************************
01351 //      BEGIN LibCameraSensors->Swissranger->Modulation
01352 //************************************************************************************
01353                                 // Subtag element "IntegrationTime" of Xml Inifile
01354                                 p_xmlElement_Child = NULL;
01355                                 p_xmlElement_Child = p_xmlElement_Root_SR31->FirstChildElement( "Modulation" );
01356                                 if ( p_xmlElement_Child )
01357                                 {
01358                                         // read and save value of attribute
01359                                         if ( p_xmlElement_Child->QueryValueAttribute( "frequency", &tempString) != TIXML_SUCCESS)
01360                                         {
01361                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01362                                                 std::cerr << "\t ... Can't find attribute 'frequency' of tag 'Modulation'." << std::endl;
01363                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01364                                         }
01365                                         else
01366                                         {
01367                                                 m_RangeCameraParameters.m_ModulationFrequency.str( " " );       // Clear stringstream
01368                                                 m_RangeCameraParameters.m_ModulationFrequency.clear();          // Reset flags
01369                                                 m_RangeCameraParameters.m_ModulationFrequency << tempString;
01370                                         }
01371                                 }
01372                                 else
01373                                 {
01374                                         std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01375                                         std::cerr << "\t ... Can't find tag 'Modulation'." << std::endl;
01376                                         return (RET_FAILED | RET_XML_TAG_NOT_FOUND);
01377                                 }
01378 
01379 //************************************************************************************
01380 //      BEGIN LibCameraSensors->Swissranger->AcquireMode
01381 //************************************************************************************
01382                                 // Subtag element "IntegrationTime" of Xml Inifile
01383                                 p_xmlElement_Child = NULL;
01384                                 p_xmlElement_Child = p_xmlElement_Root_SR31->FirstChildElement( "AcquireMode" );
01385                                 if ( p_xmlElement_Child )
01386                                 {
01387                                         int acquireMode = 0;
01388                                         // read and save value of attribute
01389                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_COR_FIX_PTRN", &tempString) != TIXML_SUCCESS)
01390                                         {
01391                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01392                                                 std::cerr << "\t ... Can't find attribute 'AM_COR_FIX_PTRN' of tag 'AcquireMode'." << std::endl;
01393                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01394                                         }
01395                                         else
01396                                         {
01397                                                 if (tempString == "ON") acquireMode |= AM_COR_FIX_PTRN;
01398                                         }
01399 
01400                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_MEDIAN", &tempString) != TIXML_SUCCESS)
01401                                         {
01402                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01403                                                 std::cerr << "\t ... Can't find attribute 'AM_MEDIAN' of tag 'AcquireMode'." << std::endl;
01404                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01405                                         }
01406                                         else
01407                                         {
01408                                                 if (tempString == "ON") acquireMode |= AM_MEDIAN;
01409                                         }
01410 
01411                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_TOGGLE_FRQ", &tempString) != TIXML_SUCCESS)
01412                                         {
01413                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01414                                                 std::cerr << "\t ... Can't find attribute 'AM_TOGGLE_FRQ' of tag 'AcquireMode'." << std::endl;
01415                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01416                                         }
01417                                         else
01418                                         {
01419                                                 if (tempString == "ON") acquireMode |= AM_TOGGLE_FRQ;
01420                                         }
01421 
01422                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_CONV_GRAY", &tempString) != TIXML_SUCCESS)
01423                                         {
01424                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01425                                                 std::cerr << "\t ... Can't find attribute 'AM_CONV_GRAY' of tag 'AcquireMode'." << std::endl;
01426                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01427                                         }
01428                                         else
01429                                         {
01430                                                 if (tempString == "ON") acquireMode |= AM_CONV_GRAY;
01431                                         }
01432 
01433                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_SW_ANF", &tempString) != TIXML_SUCCESS)
01434                                         {
01435                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01436                                                 std::cerr << "\t ... Can't find attribute 'AM_SW_ANF' of tag 'AcquireMode'." << std::endl;
01437                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01438                                         }
01439                                         else
01440                                         {
01441                                                 if (tempString == "ON") acquireMode |= AM_SW_ANF;
01442                                         }
01443 
01444                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_SR3K_2TAP_PROC", &tempString) != TIXML_SUCCESS)
01445                                         {
01446                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01447                                                 std::cerr << "\t ... Can't find attribute 'AM_SR3K_2TAP_PROC' of tag 'AcquireMode'." << std::endl;
01448                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01449                                         }
01450                                         else
01451                                         {
01452                                                 //if (tempString == "ON") acquireMode |= AM_RESERVED0;
01453                                         }
01454 
01455                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_SHORT_RANGE", &tempString) != TIXML_SUCCESS)
01456                                         {
01457                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01458                                                 std::cerr << "\t ... Can't find attribute 'AM_SHORT_RANGE' of tag 'AcquireMode'." << std::endl;
01459                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01460                                         }
01461                                         else
01462                                         {
01463                                                 //if (tempString == "ON") acquireMode |= AM_RESERVED1;
01464                                         }
01465 
01466                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_CONF_MAP", &tempString) != TIXML_SUCCESS)
01467                                         {
01468                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01469                                                 std::cerr << "\t ... Can't find attribute 'AM_CONF_MAP' of tag 'AcquireMode'." << std::endl;
01470                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01471                                         }
01472                                         else
01473                                         {
01474                                                 if (tempString == "ON") acquireMode |= AM_CONF_MAP;
01475                                         }
01476 
01477                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_HW_TRIGGER", &tempString) != TIXML_SUCCESS)
01478                                         {
01479                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01480                                                 std::cerr << "\t ... Can't find attribute 'AM_HW_TRIGGER' of tag 'AcquireMode'." << std::endl;
01481                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01482                                         }
01483                                         else
01484                                         {
01485                                                 if (tempString == "ON") acquireMode |= AM_HW_TRIGGER;
01486                                         }
01487 
01488                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_SW_TRIGGER", &tempString) != TIXML_SUCCESS)
01489                                         {
01490                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01491                                                 std::cerr << "\t ... Can't find attribute 'AM_SW_TRIGGER' of tag 'AcquireMode'." << std::endl;
01492                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01493                                         }
01494                                         else
01495                                         {
01496                                                 if (tempString == "ON") acquireMode |= AM_SW_TRIGGER;
01497                                         }
01498 
01499                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_DENOISE_ANF", &tempString) != TIXML_SUCCESS)
01500                                         {
01501                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01502                                                 std::cerr << "\t ... Can't find attribute 'AM_DENOISE_ANF' of tag 'AcquireMode'." << std::endl;
01503                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01504                                         }
01505                                         else
01506                                         {
01507                                                 if (tempString == "ON") acquireMode |= AM_DENOISE_ANF;
01508                                         }
01509 
01510                                         if ( p_xmlElement_Child->QueryValueAttribute( "AM_MEDIANCROSS", &tempString) != TIXML_SUCCESS)
01511                                         {
01512                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01513                                                 std::cerr << "\t ... Can't find attribute 'AM_MEDIANCROSS' of tag 'AcquireMode'." << std::endl;
01514                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01515                                         }
01516                                         else
01517                                         {
01518                                                 if (tempString == "ON") acquireMode |= AM_MEDIANCROSS;
01519                                         }
01520 
01521                                         m_RangeCameraParameters.m_AcquireMode.str( " " );       // Clear stringstream
01522                                         m_RangeCameraParameters.m_AcquireMode.clear();          // Reset flags
01523                                         m_RangeCameraParameters.m_AcquireMode << acquireMode;
01524                                 }
01525                                 else
01526                                 {
01527                                         std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01528                                         std::cerr << "\t ... Can't find tag 'AcquireMode'." << std::endl;
01529                                         return (RET_FAILED | RET_XML_TAG_NOT_FOUND);
01530                                 }
01531 
01532 //************************************************************************************
01533 //      BEGIN LibCameraSensors->Swissranger->CalibrationMethod
01534 //************************************************************************************
01535                                 // Subtag element "OperationMode" of Xml Inifile
01536                                 p_xmlElement_Child = NULL;
01537                                 p_xmlElement_Child = p_xmlElement_Root_SR31->FirstChildElement( "CalibrationMethod" );
01538                                 if ( p_xmlElement_Child )
01539                                 {
01540                                         // read and save value of attribute
01541                                         if ( p_xmlElement_Child->QueryValueAttribute( "name", &tempString ) != TIXML_SUCCESS)
01542                                         {
01543                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01544                                                 std::cerr << "\t ... Can't find attribute 'name' of tag 'CalibrationMethod'." << std::endl;
01545                                                 return (RET_FAILED | RET_XML_ATTR_NOT_FOUND);
01546                                         }
01547                                         if (tempString == "MATLAB") m_CalibrationMethod = MATLAB;
01548                                         else if (tempString == "MATLAB_NO_Z") m_CalibrationMethod = MATLAB_NO_Z;
01549                                         else if (tempString == "NATIVE") m_CalibrationMethod = NATIVE;
01550                                         else
01551                                         {
01552                                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01553                                                 std::cerr << "\t ... Calibration mode " << tempString << " unspecified." << std::endl;
01554                                                 return (RET_FAILED);
01555                                         }
01556                                 }
01557                                 else
01558                                 {
01559                                         std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01560                                         std::cerr << "\t ... Can't find tag 'CalibrationMethod'." << std::endl;
01561                                         return (RET_FAILED | RET_XML_TAG_NOT_FOUND);
01562                                 }
01563                         
01564                         }
01565 //************************************************************************************
01566 //      END LibCameraSensors->Swissranger
01567 //************************************************************************************
01568                         else 
01569                         {
01570                                 std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01571                                 std::cerr << "\t ... Can't find tag '" << ss.str() << "'" << std::endl;
01572                                 return (RET_FAILED | RET_XML_TAG_NOT_FOUND);
01573                         }
01574                 }
01575 
01576 //************************************************************************************
01577 //      END LibCameraSensors
01578 //************************************************************************************
01579                 else 
01580                 {
01581                         std::cerr << "ERROR - Swissranger::LoadParameters:" << std::endl;
01582                         std::cerr << "\t ... Can't find tag 'LibCameraSensors'." << std::endl;
01583                         return (RET_FAILED | RET_XML_TAG_NOT_FOUND);
01584                 }
01585         }
01586 
01587         
01588         std::cout << "INFO - Swissranger::LoadParameters:" << std::endl;
01589         std::cout << "\t ... Parsing xml calibration file: Done.\n";
01590 
01591         
01592 
01593         return RET_OK;
01594 }


cob_camera_sensors
Author(s): Jan Fischer
autogenerated on Sun Oct 5 2014 23:07:54