16线激光雷达点云采集过程中遇到的问题

速腾聚创16线激光雷达使用过程中,第一步是数据的采集和存储。由于厂家提供了基于ROS的示例程序,而使用过程中需要在C++环境下进行程序开发。

根据厂家的建议,依据基于ROS的示例程序进行改写,第一版程序改写之后,出现了数据出现了严重的延迟。无奈在github上寻找大神们提供的程序代码,找到了一个robosense-kobi的示例程序,解决了点云信息采集延迟的问题。在这这里表示感谢。

主要函数如下
回调函数

void pointcloudCallback(const PointcloudMsgpcl::PointXYZI& msg)
{
if(mex_pointcloud.try_lock()){
pcl_pointcloud->points.assign(msg.pointcloud_ptr->begin(), msg.pointcloud_ptr->end());
pcl_pointcloud->height = msg.height;
pcl_pointcloud->width = msg.width;
pcl_pointcloud->is_dense = false;
mex_pointcloud.unlock();
}
PointCloudColorHandlerGenericFieldpcl::PointXYZI point_color_handle(pcl_pointcloud, “intensity”);
{
const std::lock_guardstd::mutex lock(mex_viewer);
pcl_viewer->updatePointCloudpcl::PointXYZI(pcl_pointcloud, point_color_handle, “rslidar”);
}
}

这里需要注意的是回调函数中,有两处互斥锁的加锁,mex_pointcloud.try_lock()是对输出点云加锁,在后续对点云操作后是需要进行解锁。

const std::lock_guardstd::mutex lock(mex_viewer);是用于实时显示点云的互斥锁。在程序其他位置显示点云时,也要有解锁的过程。

我们遇到的一个问题是,程序调试通过后,把显示部分注视了,回调函数中涉及显示的加锁部分没有相应注释,导致有加锁无解锁,雷达数据会被锁死。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值