void sendInputs() { averageValues(); //proximity unsigned short fr = sensorToInput(S_FRONT_RIGHT)*1000; unsigned short r = sensorToInput(S_RIGHT)*1000; unsigned short l = sensorToInput(S_LEFT)*1000; unsigned short fl = sensorToInput(S_FRONT_LEFT)*1000; resetValues(); transmitShort(SENSORS); transmitShort(fr); transmitShort(r); transmitShort(l); transmitShort(fl); }
// 0: coast stop, 1: brake stop, 2: forward(speed), 3: backward(speed), 4: turnRight(speed), 5: turnLeft(speed) int Sensor::interpretSensors() { averageValues(); move = -1; right_wall = 0; left_wall = 0; front_wall = 0; back_wall = 0; close_right_wall = 0; close_left_wall = 0; close_front_wall = 0; far_front_wall = 0; far_back_wall = 0; // short front if(avg_dist_short_front > 200) // wall { front_wall = 1; if(avg_dist_short_front > 600) { close_front_wall = 1; // close front move = 3; } } else { // far dist sensor if(avg_dist_long_front > 800) far_front_wall = 1; // far front } // short right if(avg_dist_short_right > 300) // wall { right_wall = 1; if(avg_dist_short_right > 600) { close_right_wall = 1; // close right move = 5; } } // short left if(avg_dist_short_left > 300) // wall { left_wall = 1; if(avg_dist_short_left > 600) { close_left_wall = 1; // close left move = 4; } } // medium back if(avg_dist_medium_back > 500) // far wall { far_back_wall = 1; if(avg_dist_medium_back > 1200) { back_wall = 1; // back wall move = 2; } } if(move == -1) move = 2; // no move sugestion, contiue if(far_front_wall == 1 || far_back_wall == 1) close_wall = 1; else close_wall = 0; return move; }
void SpectralLibraryMatchResults::createAverageSignature() { Service<DesktopServices> pDesktop; const RasterElement* pRaster = getRasterElementForCurrentPage(); if (pRaster == NULL) { pDesktop->showMessageBox("Spectral Library Match", "Unable to determine the RasterElement for the current page."); return; } std::vector<Signature*> signatures = getSelectedSignatures(); if (signatures.empty()) { pDesktop->showMessageBox("Spectral Library Match", "No signatures are selected for use in generating an average signature."); return; } // now need to get the resampled sigs from the library SpectralLibraryManager* pLibMgr(NULL); std::vector<PlugIn*> plugIns = Service<PlugInManagerServices>()->getPlugInInstances(SpectralLibraryMatch::getNameLibraryManagerPlugIn()); if (!plugIns.empty()) { pLibMgr = dynamic_cast<SpectralLibraryManager*>(plugIns.front()); } if (pLibMgr == NULL) { pDesktop->showMessageBox("Spectral Library Match", "Unable to access the Spectral Library Manager."); return; } const RasterDataDescriptor* pDesc = dynamic_cast<const RasterDataDescriptor*>(pRaster->getDataDescriptor()); if (pDesc == NULL) { pDesktop->showMessageBox("Spectral Library Match", "Unable to access the RasterDataDescriptor for the RasterElement of the current page."); return; } unsigned int numBands = pDesc->getBandCount(); std::vector<double> averageValues(numBands, 0); std::vector<double> values; for (std::vector<Signature*>::iterator it = signatures.begin(); it != signatures.end(); ++it) { if (pLibMgr->getResampledSignatureValues(pRaster, *it, values) == false) { pDesktop->showMessageBox("Spectral Library Match", "Unable to access the resampled signature values for " + (*it)->getDisplayName(true)); return; } for (unsigned int band = 0; band < numBands; ++band) { averageValues[band] += values[band]; } } unsigned int numSigs = signatures.size(); for (unsigned int band = 0; band < numBands; ++band) { averageValues[band] /= static_cast<double>(numSigs); } QString avgName = QInputDialog::getText(pDesktop->getMainWidget(), "Spectral Library Match", "Enter the name to use for the average signature:"); if (avgName.isEmpty()) { return; } ModelResource<Signature> pAvgSig(avgName.toStdString(), const_cast<RasterElement*>(pRaster)); pAvgSig->setData("Reflectance", averageValues); const DynamicObject* pMetaData = pRaster->getMetadata(); FactoryResource<Wavelengths> pWavelengths; pWavelengths->initializeFromDynamicObject(pMetaData, false); const std::vector<double>& centerValues = pWavelengths->getCenterValues(); pAvgSig->setData("Wavelength", centerValues); SignatureDataDescriptor* pSigDesc = dynamic_cast<SignatureDataDescriptor*>(pAvgSig->getDataDescriptor()); VERIFYNRV(pSigDesc != NULL); FactoryResource<Units> pUnits; const Units* pRasterUnits = pDesc->getUnits(); pUnits->setUnitName(pRasterUnits->getUnitName()); pUnits->setUnitType(pRasterUnits->getUnitType()); pUnits->setScaleFromStandard(1.0); // the rescaled values are already corrected for the original scaling factor pUnits->setRangeMin(pRasterUnits->getRangeMin()); pUnits->setRangeMax(pRasterUnits->getRangeMax()); pSigDesc->setUnits("Reflectance", pUnits.get()); pAvgSig.release(); }