LVI-SAM code study

visual_odometry-visual_feature-feature_tracker_node.cpp

std::mutex mtx_lidar;

这是一段C++代码,用于定义一个互斥量(mutex)对象,名为mtx_lidar,用于保护在多线程环境下访问共享资源时的互斥访问。

互斥量是C++标准库提供的一种机制,用于在多线程编程中对共享资源进行保护,防止多个线程同时访问同一资源而导致数据竞争等问题。在实际应用中,互斥量通常和锁(lock)配合使用,通过锁定和释放互斥量来保证共享资源的安全访问。在这段代码中,std::mutex是C++标准库提供的互斥量类,mtx_lidar是一个std::mutex类型的对象。

pcl::PointCloud<PointType>::Ptr depth_cloud_temp(new pcl::PointCloud<PointType>());

这是一段C++代码,用于定义一个指向pcl::PointCloud<PointType>类型对象的指针depth_cloud_temp,并初始化它指向一个新的PointCloud对象。

其中,PointType表示点云数据中每个点的类型,PointCloud则是一个存储点云数据的类模板。::Ptr表示这是一个指向PointCloud对象的智能指针,通过使用智能指针,可以避免手动释放内存的问题。

整段代码的意思是,定义了一个指向PointCloud对象的智能指针,名为depth_cloud_temp,并将它初始化为一个新的PointCloud对象。这个PointCloud对象包含了PointType类型的点云数据。

DepthRegister *depthRegister;

这行代码定义了一个名为 depthRegister 的指针变量,类型为 DepthRegister,即指向 DepthRegister 类的实例或子类的指针。这意味着该变量可以用来引用 DepthRegister 类的方法和成员变量,或者用来引用继承自 DepthRegister 的子类的方法和成员变量。

需要注意的是,由于这是一个指针变量,因此需要在使用前确保已经为它分配了内存空间,通常通过使用 new 运算符进行动态内存分配来实现。

vector<set<int>> hash_ids(NUM_OF_CAM);

这段代码的作用是创建一个名为hash_ids的vector,其中每个元素都是一个set类型的容器,其中存储了int类型的元素。hash_ids的大小为NUM_OF_CAM,即该容器中有NUM_OF_CAM个set类型的元素。

这个代码片段还使用了关键字hash,这可能表明该代码是在实现哈希表的功能,每个set中存储的是哈希表中某个键对应的值的列表。哈希表是一种数据结构,它可以通过对键进行哈希函数的计算,将键映射到存储值的位置上,以实现快速的查找和插入。

      vector<set<int>> hash_ids(NUM_OF_CAM);
        for (int i = 0; i < NUM_OF_CAM; i++)
        {
            auto &un_pts       = trackerData[i].cur_un_pts;
            auto &cur_pts      = trackerData[i].cur_pts;
            auto &ids          = trackerData[i].ids;
            auto &pts_velocity = trackerData[i].pts_velocity;
            for (unsigned int j = 0; j < ids.size(); j++)
            {
                if (trackerData[i].track_cnt[j] > 1)
                {
                    int p_id = ids[j];
                    hash_ids[i].insert(p_id);
                    geometry_msgs::Point32 p;
                    p.x = un_pts[j].x;
                    p.y = un_pts[j].y;
                    p.z = 1;

                    feature_points->points.push_back(p);
                    id_of_point.values.push_back(p_id * NUM_OF_CAM + i);
                    u_of_point.values.push_back(cur_pts[j].x);
                    v_of_point.values.push_back(cur_pts[j].y);
                    velocity_x_of_point.values.push_back(pts_velocity[j].x);
                    velocity_y_of_point.values.push_back(pts_velocity[j].y);
                }
            }
        }

这段代码是一个循环,它遍历了trackerData中的所有元素,将其中的特征点以及其相关的信息加入到不同的容器中。

具体来说,对于每个相机,循环遍历其中的特征点ids,如果该特征点的追踪次数track_cnt大于1,则将该特征点的IDp_id插入到hash_ids对应相机的set中,以记录该特征点的存在。

接下来,将该特征点的三维坐标un_pts、二维坐标cur_pts、速度信息pts_velocity等都存储在feature_points等容器中,以便后续处理。同时,还将该特征点的IDp_id以及该特征点在多相机系统中的编号p_id * NUM_OF_CAM + i存储在id_of_point中,以便后续使用。

综上,这段代码的作用是将多相机系统中的特征点以及相关信息存储在不同的容器中,以便后续处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值