多传感器融合定位(GPS+Wheel+camera)(2)**FilterFusionSystem类**介绍

多传感器融合定位(GPS+Wheel+camera)(2)FilterFusionSystem类介绍

1、系统初始化读取参数

FilterFusionSystem::FilterFusionSystem(const std::string& param_file) 
    : initialized_(false), odom_G_R_O_(Eigen::Matrix3d::Identity()), odom_G_p_O_(Eigen::Vector3d::Zero()) {
    /// Load parameters.  从配置文件中读取参数
    LoadParam(param_file, &param_);

    config_.compute_raw_odom_ = param_.sys_config.compute_raw_odom;
    config_.sliding_window_size_ = param_.sys_config.sliding_window_size;
    config_.enable_plane_update = param_.sys_config.enable_plane_update;
    config_.enable_gps_update = param_.sys_config.enable_gps_update;

    /// Initialize all modules.
    //初始化所有模块
    //TGK::DataSynchronizer是命名空间,WheelImageSynchronizer是类
    data_sync_ = std::make_unique<TGK::DataSynchronizer::WheelImageSynchronizer>();
    //初始化类包括图像到里程计的外参和车轮的内参
    initializer_ = std::make_unique<Initializer>(param_.extrinsic.O_R_C, param_.extrinsic.O_p_C, 
        param_.wheel_param.kl, param_.wheel_param.kr, param_.wheel_param.b);
   //里程计传播
    propagator_ = std::make_unique<Propagator>(param_.wheel_param.kl, param_.wheel_param.kr, param_.wheel_param.b, 
                                               param_.wheel_param.noise_factor);
       //针孔相机模型
       camera_ = std::make_shared<TGK::Camera::PinholeRadTanCamera>(
        param_.cam_intrinsic.width, param_.cam_intrinsic.height,
        param_.cam_intrinsic.fx, param_.cam_intrinsic.fy,
        param_.cam_intrinsic.cx, param_.cam_intrinsic.cy,
        param_.cam_intrinsic.k1, param_.cam_intrinsic.k2,
        param_.cam_intrinsic.p1, param_.cam_intrinsic.p2,
        param_.cam_intrinsic.k3);
    //三角化
    const auto triangulator = std::make_shared<TGK::Geometry::Triangulator>(param_.tri_config, camera_);

    // Create feature tracker.    创建特征跟踪器
    Eigen::Matrix<double, 8, 1> cam_intrin;//相机内参
    cam_intrin << param_.cam_intrinsic.fx, param_.cam_intrinsic.fy,
                  param_.cam_intrinsic.cx, param_.cam_intrinsic.cy,
                  param_.cam_intrinsic.k1, param_.cam_intrinsic.k2,
                  param_.cam_intrinsic.p1, param_.cam_intrinsic.p2;
   //KLT特征跟踪
    feature_tracker_ = std::make_shared<TGK::ImageProcessor::KLTFeatureTracker>(param_.tracker_config);
   //仿真特征跟踪
    sim_feature_tracker_ = std::make_shared<TGK::ImageProcessor::SimFeatureTrakcer>();  
   //视觉更新
    visual_updater_ = std::make_unique<VisualUpdater>(param_.visual_updater_config, camera_, feature_tracker_, triangulator);
    //使能平面更新
    if (config_.enable_plane_update) {
        plane_updater_ = std::make_unique<PlaneUpdater>(param_.plane_updater_config);
    } 
   //使能GPS更新
    if (config_.enable_gps_update) {
        gps_updater_ = std::make_unique<GpsUpdater>(param_.extrinsic.C_p_Gps);//GPS->Camera的外参
    }

    viz_ = std::make_unique<Visualizer>(param_.viz_config);//可视化配置
   //计算原始里程计
    if (config_.compute_raw_odom_) {
        wheel_propagator_ = std::make_unique<TGK::WheelProcessor::WheelPropagator>(
            param_.wheel_param.kl, param_.wheel_param.kr, param_.wheel_param.b);
    }
}

加载配置参数

void LoadParam(const std::string& param_file, Parameter* params) {
    cv::FileStorage cv_params(param_file, cv::FileStorage::READ);
    
    // Load camera param. 读取相机内参
    params->cam_intrinsic.fx = cv_params["Camera.fx"];
    params->cam_intrinsic.fy = cv_params["Camera.fy"];
    params->cam_intrinsic.cx = cv_params["Camera.cx"];
    params->cam_intrinsic.cy = cv_params["Camera.cy"];
    params->cam_intrinsic.s  = cv_params["Camera.s"];

    params->cam_intrinsic.k1 = cv_params["Camera.k1"];
    params->cam_intrinsic.k2 = cv_params["Camera.k2"];
    params->cam_intrinsic.p1 = cv_params["Camera.p1"];
    params->cam_intrinsic.p2 = cv_params["Camera.p2"];
    params->cam_intrinsic.k3 = cv_params["Camera.k3"];
    params->cam_intrinsic.width = cv_params["Camera.width"];
    params->cam_intrinsic.height = cv_params["Camera.height"];

    // Load wheel intrinsic.读取车轮内参
    params->wheel_param.kl = cv_params["Wheel.kl"];
    params->wheel_param.kr = cv_params["Wheel.kr"];
    params->wheel_param.b = cv_params["Wheel.b"];
    params->wheel_param.noise_factor = cv_params["Wheel.noise_factor"];

    // Load extrinsic.  加载外参
    cv::Mat cv_O_R_C;
    cv_params["Extrinsic.O_R_C"] >> cv_O_R_C;  //camera->odometry的旋转
    cv::Mat cv_O_p_C;
    cv_params["Extrinsic.O_p_C"] >> cv_O_p_C;//camera->odometry的平移
    cv::Mat cv_C_p_Gps;
    cv_params["Extrinsic.C_p_Gps"] >> cv_C_p_Gps;//gps->camera的平移

    params->extrinsic.O_R_C << 
        cv_O_R_C.at<double>(0, 0), cv_O_R_C.at<double>(0, 1), cv_O_R_C.at<double>(0, 2), 
        cv_O_R_C.at<double>(1, 0), cv_O_R_C.at<double>(1, 1), cv_O_R_C.at<double>(1, 2), 
        cv_O_R_C.at<double>(2, 0), cv_O_R_C.at<double>(2, 1), cv_O_R_C.at<double>(2, 2), 
    params->extrinsic.O_p_C << cv_O_p_C.at<double>(0, 0), cv_O_p_C.at<double>(1, 0), cv_O_p_C.at<double>(2, 0);
    params->extrinsic.C_p_Gps << cv_C_p_Gps.at<double>(0, 0), cv_C_p_Gps.at<double>(1, 0), cv_C_p_Gps.at<double>(2, 0)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

纷繁中淡定

你的鼓励是我装逼的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值