PCRNet: Point Cloud Registration Network using PointNet Encoding

PCRNet是一种在ModelNet40数据集上进行点云配准的简单深度学习模型。通过PointNet获取全局特征,然后将特征拼接并用全连接层预测位姿。尽管模型简单,但通过迭代方式能实现多次优化。实验结果显示在不同设置下有不同程度的精度。该文适合初学者作为点云配准的入门资源。

在这里插入图片描述
PCRNet算是在ModelNet40这种object-centric数据集上用deep-learning做配准最好入手的一篇文章了,整体架构涉及简洁明了,一句话描述就是简单粗暴,话不多说,直接上网络架构图:
在这里插入图片描述

Work Flow:

  1. 首先对输入source ( N × 3 N \times 3 N×3)与template ( M × 3 M \times 3 M×3)进行PointNet操作,即MLP + max-pooling后,分别得到描述各自点云的维度为1024的global feature vector: Φ ( P S ) , Φ ( P T ) \Phi ({P_S}),\Phi ({P_T})
`sensor_msgs::PointCloud` 和 `sensor_msgs::PointCloud2` 都是ROS(Robot Operating System)中用于表示三维点云数据的消息类型,但它们有不同的结构和用途。`sensor_msgs::PointCloud`更像是一种基础的数据结构,它包含一维数组的形式,而`sensor_msgs::PointCloud2`则是一个更为通用的二进制消息格式,适合在ROS网络中高效传输。 如果你需要将`sensor_msgs::PointCloud`转换成`sensor_msgs::PointCloud2`格式,通常会在ROS节点程序中这样做: 1. **创建PointCloud2消息**:首先,你需要创建一个新的`sensor_msgs::PointCloud2`实例。 2. **填充数据**:遍历PointCloud中的每个点,获取其位置、颜色等信息,并将其插入到PointCloud2的对应列中。这包括设置header信息、宽度(points的数量)、高度(通常为1,因为它是点云),以及每行的步长(通常是3,代表x、y、z三个维度)。 3. **设置数据类型**:根据点的属性,设置`sensor_msgs::PointField`,然后添加到`sensor_msgs::PointCloud2`的fields部分。 4. **序列化数据**:最后,调用`pcl_to_pointcloud2()`函数或者其他相关的函数(如RosBridge提供的`pc2.serialize()`),将PointCloud转换为二进制形式并存储到PointCloud2的data字段。 以下是一个简单的伪代码示例: ```cpp // 假设已有一个sensor_msgs::PointCloud cloud sensor_msgs::PointCloud2 cloud2; // 初始化PointCloud2 fillHeader(cloud2, cloud.header); cloud2.fields = ... // 设置field信息 // 将PointCloud数据逐点复制到PointCloud2 for (const auto &point : cloud.points) { point.cloud_data.push_back(point.x); point.cloud_data.push_back(point.y); point.cloud_data.push_back(point.z); } // 序列化数据 pcl_conversions::fromPCL(cloud, cloud2.data); ```
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值