123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182 |
- #include <open_karto/Mapper.h>
- karto::Dataset* CreateMap(karto::Mapper* pMapper)
- {
- karto::Dataset* pDataset = new karto::Dataset();
-
-
- karto::Name name("laser0");
- karto::LaserRangeFinder* pLaserRangeFinder = karto::LaserRangeFinder::CreateLaserRangeFinder(karto::LaserRangeFinder_Custom, name);
- pLaserRangeFinder->SetOffsetPose(karto::Pose2(1.0, 0.0, 0.0));
- pLaserRangeFinder->SetAngularResolution(karto::math::DegreesToRadians(0.5));
- pLaserRangeFinder->SetRangeThreshold(12.0);
- pDataset->Add(pLaserRangeFinder);
-
-
- karto::LocalizedRangeScan* pLocalizedRangeScan = NULL;
-
-
- std::vector<kt_double> readings;
- for (int i=0; i<361; i++)
- {
- readings.push_back(3.0);
- }
-
-
- pLocalizedRangeScan = new karto::LocalizedRangeScan(name, readings);
- pLocalizedRangeScan->SetOdometricPose(karto::Pose2(0.0, 0.0, 0.0));
- pLocalizedRangeScan->SetCorrectedPose(karto::Pose2(0.0, 0.0, 0.0));
-
- pMapper->Process(pLocalizedRangeScan);
- std::cout << "Pose: " << pLocalizedRangeScan->GetOdometricPose() << " Corrected Pose: " << pLocalizedRangeScan->GetCorrectedPose() << std::endl;
-
- pDataset->Add(pLocalizedRangeScan);
-
-
- pLocalizedRangeScan = new karto::LocalizedRangeScan(name, readings);
- pLocalizedRangeScan->SetOdometricPose(karto::Pose2(1.0, 0.0, 1.57));
- pLocalizedRangeScan->SetCorrectedPose(karto::Pose2(1.0, 0.0, 1.57));
-
- pMapper->Process(pLocalizedRangeScan);
- std::cout << "Pose: " << pLocalizedRangeScan->GetOdometricPose() << " Corrected Pose: " << pLocalizedRangeScan->GetCorrectedPose() << std::endl;
-
- pDataset->Add(pLocalizedRangeScan);
-
-
- pLocalizedRangeScan = new karto::LocalizedRangeScan(name, readings);
- pLocalizedRangeScan->SetOdometricPose(karto::Pose2(1.0, -1.0, 2.35619449));
- pLocalizedRangeScan->SetCorrectedPose(karto::Pose2(1.0, -1.0, 2.35619449));
-
- pMapper->Process(pLocalizedRangeScan);
- std::cout << "Pose: " << pLocalizedRangeScan->GetOdometricPose() << " Corrected Pose: " << pLocalizedRangeScan->GetCorrectedPose() << std::endl;
-
- pDataset->Add(pLocalizedRangeScan);
- return pDataset;
- }
- karto::OccupancyGrid* CreateOccupancyGrid(karto::Mapper* pMapper, kt_double resolution)
- {
- std::cout << "Generating map..." << std::endl;
-
- karto::OccupancyGrid* pOccupancyGrid = karto::OccupancyGrid::CreateFromScans(pMapper->GetAllProcessedScans(), resolution);
- return pOccupancyGrid;
- }
- void PrintOccupancyGrid(karto::OccupancyGrid* pOccupancyGrid)
- {
- if (pOccupancyGrid != NULL)
- {
-
- kt_int32s width = pOccupancyGrid->GetWidth();
- kt_int32s height = pOccupancyGrid->GetHeight();
- karto::Vector2<kt_double> offset = pOccupancyGrid->GetCoordinateConverter()->GetOffset();
- std::cout << "width = " << width << ", height = " << height << ", scale = " << pOccupancyGrid->GetCoordinateConverter()->GetScale() << ", offset: " << offset.GetX() << ", " << offset.GetY() << std::endl;
- for (kt_int32s y=height-1; y>=0; y--)
- {
- for (kt_int32s x=0; x<width; x++)
- {
-
- kt_int8u value = pOccupancyGrid->GetValue(karto::Vector2<kt_int32s>(x, y));
- switch (value)
- {
- case karto::GridStates_Unknown:
- std::cout << "*";
- break;
- case karto::GridStates_Occupied:
- std::cout << "X";
- break;
- case karto::GridStates_Free:
- std::cout << " ";
- break;
- default:
- std::cout << "?";
- }
- }
- std::cout << std::endl;
- }
- std::cout << std::endl;
- }
- }
- int main(int , char **)
- {
-
-
-
- karto::Mapper* pMapper = new karto::Mapper();
- if (pMapper != NULL)
- {
- karto::OccupancyGrid* pOccupancyGrid = NULL;
-
-
- std::cout << "Tutorial 1 ----------------" << std::endl << std::endl;
-
- pMapper->Reset();
-
- karto::Dataset* pDataset = CreateMap(pMapper);
-
- pOccupancyGrid = CreateOccupancyGrid(pMapper, 0.1);
- PrintOccupancyGrid(pOccupancyGrid);
- delete pOccupancyGrid;
-
- delete pMapper;
- delete pDataset;
- }
- return 0;
- }
|