38 #include <QApplication>
40 #include <pcl/io/pcd_io.h>
41 #include <pcl/io/ply_io.h>
42 #include <pcl/filters/filter.h>
50 "rtabmap-lidar_mapping IP PORT\n"
51 "rtabmap-lidar_mapping PCAP_FILEPATH\n"
54 " rtabmap-lidar_mapping 192.168.1.201 2368\n\n");
88 printf(
"Using ip=%s port=%d\n", ip.c_str(), port);
89 #if BOOST_VERSION >= 108700 // Version 1.87.0
90 lidar =
new LidarVLP16(boost::asio::ip::make_address(ip), port);
92 lidar =
new LidarVLP16(boost::asio::ip::address_v4::from_string(ip), port);
98 printf(
"Using file=%s\n", filepath.c_str());
105 UERROR(
"Lidar init failed!");
119 float resolution = 0.05;
179 rtabmapThread.
start();
183 printf(
"Press Tab key to switch between map and odom views (or both).\n");
184 printf(
"Press Space key to pause.\n");
196 odomThread.
join(
true);
197 rtabmapThread.
join(
true);
200 printf(
"Saving rtabmap_cloud.pcd...\n");
201 std::map<int, Signature>
nodes;
202 std::map<int, Transform> optimizedPoses;
203 std::multimap<int, Link> links;
204 rtabmap->getGraph(optimizedPoses, links,
true,
true, &
nodes,
true,
true,
true,
true);
205 pcl::PointCloud<pcl::PointXYZI>::Ptr cloud(
new pcl::PointCloud<pcl::PointXYZI>);
206 for(std::map<int, Transform>::iterator
iter=optimizedPoses.begin();
iter!=optimizedPoses.end(); ++
iter)
218 printf(
"Voxel grid filtering of the assembled cloud (voxel=%f, %d points)\n", 0.01
f, (
int)cloud->size());
221 printf(
"Saving rtabmap_cloud.pcd... done! (%d points)\n", (
int)cloud->size());
222 pcl::io::savePCDFile(
"rtabmap_cloud.pcd", *cloud);
227 printf(
"Saving rtabmap_cloud.pcd... failed! The cloud is empty.\n");
231 printf(
"Saving rtabmap_trajectory.txt ...\n");
232 if(optimizedPoses.size() &&
graph::exportPoses(
"rtabmap_trajectory.txt", 0, optimizedPoses, links))
234 printf(
"Saving rtabmap_trajectory.txt... done!\n");
238 printf(
"Saving rtabmap_trajectory.txt... failed!\n");