#include #include #include #include #include #include "common.h" #include "src/oh_my_loam.h" using namespace oh_my_loam; void PointCloudHandler(const sensor_msgs::PointCloud2ConstPtr& msg, OhMyLoam* const slam); int main(int argc, char* argv[]) { // config Config::Instance()->SetConfigFile("configs/config.yaml"); bool log_to_file = Config::Instance()->Get("log_to_file"); std::string log_path = Config::Instance()->Get("log_path"); std::string lidar = Config::Instance()->Get("lidar"); // logging g3::InitG3Logging(log_to_file, "oh_my_loam_" + lidar, log_path); AUSER << "LOAM start..., lidar = " << lidar; // SLAM system OhMyLoam slam; if (!slam.Init()) { AFATAL << "Failed to initilize slam system."; } // ros ros::init(argc, argv, "oh_my_loam"); ros::NodeHandle nh; ros::Subscriber sub_point_cloud = nh.subscribe( "/velodyne_points", 100, std::bind(PointCloudHandler, std::placeholders::_1, &slam)); ros::spin(); return 0; } void PointCloudHandler(const sensor_msgs::PointCloud2ConstPtr& msg, OhMyLoam* const slam) { PointCloud cloud; pcl::fromROSMsg(*msg, cloud); double timestamp = msg->header.stamp.toSec(); AINFO << "Timestamp = " << LOG_TIMESTAMP(timestamp); slam->Run(cloud, timestamp); }