9 #include <mrpt/ros1bridge/logging.h>
14 mrpt::obs::CActionRobotMovement3D::mm6DOF;
18 mm.nParticlesCount = 100;
29 mm.additional_std_XYZ = 0.005;
30 mm.additional_std_angle = 0.0005;
41 mrpt::config::CConfigFile iniFile(ini_filename);
46 mapping.KF_options.dumpToConsole();
47 mapping.options.dumpToConsole();
49 log4cxx::LoggerPtr ros_logger =
52 mrpt::ros1bridge::rosLoggerLvlToMRPTLoggerLvl(ros_logger->getLevel()));
53 mapping.logging_enable_console_output =
false;
55 mapping.logRegisterCallback([](std::string_view msg,
56 const mrpt::system::VerbosityLevel level,
57 std::string_view loggerName,
58 const mrpt::Clock::time_point timestamp) {
59 mrpt::ros1bridge::mrptToROSLoggerCallback(
60 std::string(msg), level, std::string(loggerName), timestamp);
65 iniFile.read_bool(
"MappingApplication",
"SHOW_3D_LIVE",
false);
67 "MappingApplication",
"CAMERA_3DSCENE_FOLLOWS_ROBOT",
false);
71 mrpt::obs::CSensoryFrame::Ptr _sf,
72 mrpt::obs::CObservationOdometry::Ptr _odometry)
74 action = mrpt::obs::CActionCollection::Create();
76 mrpt::obs::CActionRobotMovement3D odom_move;
78 odom_move.timestamp = _sf->getObservationByIndex(0)->timestamp;
86 mrpt::poses::CPose3D incOdoPose;
87 incOdoPose.inverseComposeFrom(
97 #if MRPT_HAS_WXWIDGETS
101 mrpt::gui::CDisplayWindow3D::Create(
"KF-SLAM live view", 800, 500);
108 using namespace mrpt;
109 using namespace mrpt::opengl;
110 using namespace mrpt::poses;
111 using namespace mrpt::slam;
112 using namespace mrpt::math;
122 const CPose3D robotPoseMean3D = CPose3D(
robotPose_.mean);
125 meanPath.push_back(robotPoseMean3D.asTPose());
128 COpenGLScene::Ptr scene3D = COpenGLScene::Create();
129 opengl::CGridPlaneXY::Ptr grid =
130 opengl::CGridPlaneXY::Create(-1000, 1000, -1000, 1000, 0, 5);
131 grid->setColor(0.4, 0.4, 0.4);
132 scene3D->insert(grid);
135 opengl::CSetOfLines::Ptr linesPath = opengl::CSetOfLines::Create();
136 linesPath->setColor(1, 0, 0);
140 init_pose = CPose3D(
meanPath[0]).asTPose();
142 for (std::vector<TPose3D>::iterator it =
meanPath.begin();
145 linesPath->appendLine(init_pose, *it);
147 if (++path_decim > 10)
150 mrpt::opengl::CSetOfObjects::Ptr xyz =
151 mrpt::opengl::stock_objects::CornerXYZSimple(
153 xyz->setPose(CPose3D(*it));
154 scene3D->insert(xyz);
157 scene3D->insert(linesPath);
161 mrpt::opengl::CSetOfObjects::Ptr xyz =
162 mrpt::opengl::stock_objects::CornerXYZSimple(1.0, 2.5);
163 xyz->setPose(robotPoseMean3D);
164 scene3D->insert(xyz);
169 win3d->setCameraPointingToPoint(
170 robotPoseMean3D.x(), robotPoseMean3D.y(), robotPoseMean3D.z());
174 const CRangeBearingKFSLAM::TDataAssocInfo& da =
175 mapping.getLastDataAssociation();
176 mrpt::opengl::CSetOfLines::Ptr lins =
177 mrpt::opengl::CSetOfLines::Create();
178 lins->setLineWidth(1.2);
179 lins->setColor(1, 1, 1);
180 for (std::map<observation_index_t, prediction_index_t>::const_iterator
181 it = da.results.associations.begin();
182 it != da.results.associations.end(); ++it)
184 const prediction_index_t idxPred = it->second;
186 CRangeBearingKFSLAM::KFArray_FEAT featMean;
187 mapping.getLandmarkMean(idxPred, featMean);
193 robotPoseMean3D.x(), robotPoseMean3D.y(), robotPoseMean3D.z(),
194 featMean3D.x, featMean3D.y, featMean3D.z);
196 scene3D->insert(lins);
199 opengl::CSetOfObjects::Ptr objs = opengl::CSetOfObjects::Create();
201 scene3D->insert(objs);
203 mrpt::opengl::COpenGLScene::Ptr& scn =
win3d->get3DSceneAndLock();
206 win3d->unlockAccess3DScene();
211 const mrpt::slam::CRangeBearingKFSLAM::KFArray_FEAT& lm,
212 mrpt::math::TPoint3D& p)