lidar_IMU_calib
                                
                                 lidar_IMU_calib copied to clipboard
                                
                                    lidar_IMU_calib copied to clipboard
                            
                            
                            
                        a bug need to fix
bool read(const std::string path,
            const std::string imu_topic,
            const std::string lidar_topic,
            const double bag_start = -1.0,
            const double bag_durr = -1.0) {
    data_.reset(new LioDataset(lidar_model_));
    data_->bag_.reset(new rosbag::Bag);
    data_->bag_->open(path, rosbag::bagmode::Read);
    init();
    rosbag::View view;
    {
      std::vector<std::string> topics;
      topics.push_back(imu_topic);
      topics.push_back(lidar_topic);
      rosbag::View view_full;
      view_full.addQuery(*data_->bag_);
      ros::Time time_init = view_full.getBeginTime();
      time_init += ros::Duration(bag_start);
      ros::Time time_finish = (bag_durr < 0)?
                              view_full.getEndTime() : time_init + ros::Duration(bag_durr);
      view.addQuery(*data_->bag_, rosbag::TopicQuery(topics), time_init, time_finish);
    }
    for (rosbag::MessageInstance const m : view) {
      const std::string &topic = m.getTopic();
      if (lidar_topic == topic) {
        TPointCloud pointCloudPtr;
        double timestamp = 0;
        std::cout << "find lidar topic data type " << m.getDataType() << std::endl;
        if (m.getDataType() == std::string("velodyne_msgs/VelodyneScan")) {
          velodyne_msgs::VelodyneScan::ConstPtr vlp_msg =
                  m.instantiate<velodyne_msgs::VelodyneScan>();
          timestamp = vlp_msg->header.stamp.toSec();
          p_VelodyneLidarConvert_->unpack_scan(vlp_msg, pointCloudPtr);
          std::cout << "velodyne_msgs/VelodyneScan" << std::endl;
        }
        if (m.getDataType() == std::string("sensor_msgs/PointCloud2")) {
          sensor_msgs::PointCloud2::ConstPtr scan_msg =
                  m.instantiate<sensor_msgs::PointCloud2>();
          timestamp = scan_msg->header.stamp.toSec();
          p_VelodyneLidarConvert_->unpack_scan(scan_msg, pointCloudPtr);
          std::cout << "add sensor_msgs/PointCloud2" << std::endl;
        }
        if(m.getDataType() == std::string("livox_ros_driver/CustomMsg")) {
          li_calib::LivoxPointCloud ::ConstPtr scan_msg =
                  m.instantiate<li_calib::LivoxPointCloud>();
          timestamp = scan_msg->header.stamp.toSec();
          p_LivoxLidarConvert_->unpack_scan(scan_msg, pointCloudPtr);
          std::cout << "scan_msg header stamp: "<< scan_msg->header.stamp << std::endl;
          std::cout << "scan msg header frame id: " << scan_msg->header.frame_id << std::endl;
          std::cout << "scan msg point num: " << scan_msg->point_num << std::endl;
          std::cout << "scan msg point size: " << scan_msg->points.size() << std::endl;
          std::cout << "add livox_ros_driver/CustomMsg" << std::endl;
        }
        data_->scan_data_.emplace_back(pointCloudPtr);
        data_->scan_timestamps_.emplace_back(timestamp);
      }
      if (imu_topic == topic) {
        sensor_msgs::ImuConstPtr imu_msg = m.instantiate<sensor_msgs::Imu>();
        double time = imu_msg->header.stamp.toSec();
        data_->imu_data_.emplace_back();
        data_->imu_data_.back().timestamp = time;
        data_->imu_data_.back().accel = Eigen::Vector3d(
                imu_msg->linear_acceleration.x, imu_msg->linear_acceleration.y,
                imu_msg->linear_acceleration.z);
        data_->imu_data_.back().gyro = Eigen::Vector3d(
                imu_msg->angular_velocity.x, imu_msg->angular_velocity.y,
                imu_msg->angular_velocity.z);
      }
    }
    std::cout << lidar_topic << ": " << data_->scan_data_.size() << std::endl;
    std::cout << imu_topic << ": " << data_->imu_data_.size() << std::endl;
    return true;
  }
this function must return.
bool read(const std::string path, const std::string imu_topic, const std::string lidar_topic, const double bag_start = -1.0, const double bag_durr = -1.0) { data_.reset(new LioDataset(lidar_model_)); data_->bag_.reset(new rosbag::Bag); data_->bag_->open(path, rosbag::bagmode::Read); init(); rosbag::View view; { std::vector<std::string> topics; topics.push_back(imu_topic); topics.push_back(lidar_topic); rosbag::View view_full; view_full.addQuery(*data_->bag_); ros::Time time_init = view_full.getBeginTime(); time_init += ros::Duration(bag_start); ros::Time time_finish = (bag_durr < 0)? view_full.getEndTime() : time_init + ros::Duration(bag_durr); view.addQuery(*data_->bag_, rosbag::TopicQuery(topics), time_init, time_finish); } for (rosbag::MessageInstance const m : view) { const std::string &topic = m.getTopic(); if (lidar_topic == topic) { TPointCloud pointCloudPtr; double timestamp = 0; std::cout << "find lidar topic data type " << m.getDataType() << std::endl; if (m.getDataType() == std::string("velodyne_msgs/VelodyneScan")) { velodyne_msgs::VelodyneScan::ConstPtr vlp_msg = m.instantiate<velodyne_msgs::VelodyneScan>(); timestamp = vlp_msg->header.stamp.toSec(); p_VelodyneLidarConvert_->unpack_scan(vlp_msg, pointCloudPtr); std::cout << "velodyne_msgs/VelodyneScan" << std::endl; } if (m.getDataType() == std::string("sensor_msgs/PointCloud2")) { sensor_msgs::PointCloud2::ConstPtr scan_msg = m.instantiate<sensor_msgs::PointCloud2>(); timestamp = scan_msg->header.stamp.toSec(); p_VelodyneLidarConvert_->unpack_scan(scan_msg, pointCloudPtr); std::cout << "add sensor_msgs/PointCloud2" << std::endl; } if(m.getDataType() == std::string("livox_ros_driver/CustomMsg")) { li_calib::LivoxPointCloud ::ConstPtr scan_msg = m.instantiate<li_calib::LivoxPointCloud>(); timestamp = scan_msg->header.stamp.toSec(); p_LivoxLidarConvert_->unpack_scan(scan_msg, pointCloudPtr); std::cout << "scan_msg header stamp: "<< scan_msg->header.stamp << std::endl; std::cout << "scan msg header frame id: " << scan_msg->header.frame_id << std::endl; std::cout << "scan msg point num: " << scan_msg->point_num << std::endl; std::cout << "scan msg point size: " << scan_msg->points.size() << std::endl; std::cout << "add livox_ros_driver/CustomMsg" << std::endl; } data_->scan_data_.emplace_back(pointCloudPtr); data_->scan_timestamps_.emplace_back(timestamp); } if (imu_topic == topic) { sensor_msgs::ImuConstPtr imu_msg = m.instantiate<sensor_msgs::Imu>(); double time = imu_msg->header.stamp.toSec(); data_->imu_data_.emplace_back(); data_->imu_data_.back().timestamp = time; data_->imu_data_.back().accel = Eigen::Vector3d( imu_msg->linear_acceleration.x, imu_msg->linear_acceleration.y, imu_msg->linear_acceleration.z); data_->imu_data_.back().gyro = Eigen::Vector3d( imu_msg->angular_velocity.x, imu_msg->angular_velocity.y, imu_msg->angular_velocity.z); } } std::cout << lidar_topic << ": " << data_->scan_data_.size() << std::endl; std::cout << imu_topic << ": " << data_->imu_data_.size() << std::endl; return true; }this function must return.
请问下,我用ubuntu16.04编译运行没有问题,用ubuntu20.04编译运行会报错,加了return true之后就好了,请问这是什么原因呢?
我这边也是,开始的时候会出现内存报错的问题,后面是定位到这个函数,然后加return就好了
我这边也是,开始的时候会出现内存报错的问题,后面是定位到这个函数,然后加return就好了
好的,谢谢老哥,我用debug模式运行的时候提示的是boost指针没有初始化,可是我看里面的boost指针明明都初始化了,很想再问下这个加return 跟boost指针有啥关系呢? 你当时是怎么定位到用return就可以解决的呢?
我用的clion的内存调试工具叫Valgrind,会显示这个函数有问题
我这边也是,开始的时候会出现内存报错的问题,后面是定位到这个函数,然后加return就好了
好的,谢谢老哥,我用debug模式运行的时候提示的是boost指针没有初始化,可是我看里面的boost指针明明都初始化了,很想再问下这个加return 跟boost指针有啥关系呢? 你当时是怎么定位到用return就可以解决的呢?
不知道你这个目前使用的怎么样啦,貌似作者没有维护了,目前提了这么多issue没人维护了
我用的clion的内存调试工具叫Valgrind,会显示这个函数有问题
有个题外的问题想请教一下。clion里面的valgrind怎么调试roslaunch呢