关于在ros回调函数中处理激光雷达点云累计数帧数据一起处理的操作

本文详细介绍了一种在ROS环境中实现点云数据叠加的方法,通过将多帧点云数据融合成一帧,以提高低线束激光雷达在目标检测中的性能。文章提供了具体的C++代码实现,展示了如何订阅点云数据、进行数据融合,并发布融合后的点云。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ROS中点云数据的叠加处理

在我们处理点云数据的时候,我们经常会对点云的数据进行累加到一起在进行操作,也就是将几帧数据叠加为一个数据在进行处理,这在低线束的情况下是经常用到的,具体的操作过程如下:

class object3dDetector {
  /*************Publish And  Subcriber*************/
private:
    ros::NodeHandle n;
    ros::Subscriber point_date_sub;
    ros::Publisher raw_point_pub;
    sensor_msgs::PointCloud2 raw_point;

public:
    object3dDetector() {
//     ----------------------sub and scrb defination----------------------
        point_date_sub = n.subscribe("/livox/lidar", 3, &object3dDetector::callback, this);
        raw_point_pub = n.advertise<sensor_msgs::PointCloud2>("/raw_Point", 3);
    }
    void getpoint_callback(const sensor_msgs::PointCloud2::ConstPtr &livox_msg);
    void callback(const sensor_msgs::PointCloud2::ConstPtr &msg);
};
int i=1;//一定要放在回调函数外.
pcl::PointCloud<pcl::PointXYZ>::Ptr temp_cloud(new pcl::PointCloud<pcl::PointXYZ>);

void object3dDetector::callback(const sensor_msgs::PointCloud2::ConstPtr &msg) {
    cout << "msg:" << (msg->height) * (msg->width) << endl;
    auto startTime = std::chrono::steady_clock::now();
    //累计数据
    if (i < 3) {
        pcl::PointCloud<pcl::PointXYZ>::Ptr transfer_cloud(new pcl::PointCloud<pcl::PointXYZ>);
        pcl::fromROSMsg(*msg, *transfer_cloud);
        *temp_cloud += *transfer_cloud;
//        cout<<"COUNT POINTS_NUM[:"<<i<<"]:"<<temp_cloud->points.size()<<endl;
        i++;
    } else {

        pcl::PointCloud<pcl::PointXYZ>::Ptr transfer_cloud(new pcl::PointCloud<pcl::PointXYZ>);
        pcl::fromROSMsg(*msg, *transfer_cloud);
        *temp_cloud += *transfer_cloud;
        pcl::toROSMsg(*temp_cloud, raw_point);
        *********todo****************
   i=1;
temp_cloud->clear();//清除点云数据,进行下一次累计.
}
}
int main(int argc, char **argv) {
t << "------------------DO it!-----------------------" << endl;
    ros::init(argc, argv, "object3d_detector");

    object3dDetector A;
    ros::spin();
    }

到此就可以了.

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值