从pointNetVLAD说起, 小议移动机器人3d lidar loop clousre

本文介绍了点云SLAM回环检测技术的发展,从Bag of Words到PointNetVLAD,探讨了其在移动机器人中的应用。尽管存在如网络适应性、训练数据选择和粗注册计算量大等问题,但点云回环检测仍然是研究重点。文章提出了将视觉传感器融合和集成识别与注册的网络设计作为未来发展方向。
摘要由CSDN通过智能技术生成

1. 技术发展顺序

bag of words  >> learnable bag of words  with manual designed features == VLAD

VLAD >> learnable features == netVLAD

netVLAD >> learnable PointCloud features == pointNetVLAD (CVPR2018)

pointNetVLAD >> a module Robust Relocation System

2. 应用

BOW用于视觉SLAM重定位已经非常经典了, 如果

1. 特征可学习

2. cluster center 可学习

3. 激光数据可学习出描述子,(一天中 变化光照场景无影响,且数据量少)

那这就是为基于激光slam的移动机器人设计的回环检测模块(此模块技术一直学术工程上没有很好解决)

3 坑

但不能说激光回环已经得到解决了,笔者从实际工作出发,提出三点可能的坑:

1. flexible pointnet:

backbone net要经过反复的调试以适应场景,硬件的限制。大部分pointnet的实现都是照搬Charles Qi的原版,如下代码所示。把网络维度写死。类比港科沈老师组最新的vins kidnaped, 它们根据netVLAD进行了轻量化调优。pointNetVLAD能在机器人上跑,这个调优工作量是免不了的。工作需要时间堆出来。

def forward(point_cloud, is_training, bn_decay=None):
    """PointNetVLAD,    INPUT is batch_num_queries X num_pointclouds_per_query X num_points_per_pointcloud X 3, 
                        OUTPUT batch_num_queries X num_pointclouds_per_query X output_dim """
    batch_num_queries = point_cloud.get_shape()[0].value
    num_pointclouds_per_query = point_cloud.get_shape()[1].value
    num_points = point_cloud.get_shape()[2].value
    CLUSTER_SIZE=64
    OUTPUT_DIM=256
    point_cloud = tf.reshape(point_cloud, [batch_num_queries*num_pointclouds_per_query, num_points,3])

    with tf.variable_scope('transform_net1') as sc:
        input_transform = input_transform_net(point_cloud, is_training, bn_decay, K=3)
    point_cloud_transformed = tf.matmul(point_cloud, input_transform)
    input_image = tf.expand_dims(point_cloud_transformed, -1)

    net = tf_util.conv2d(input_image, 64, [1,3],
                         padding='VALID', stride=[1,1],
                         is_training=is_training,
                         scope='conv1', bn_decay=bn_decay)
    net = tf_util.conv2d(net, 64, [1,1],
                         padding='VALID', stride=[1,1],
                         is_training=is_training,
                         scope='conv2', bn_decay=bn_decay)

    with tf.variable_scope('transform_net2') as sc:
        feature_transform = feature_transform_net(net, is_training, bn_decay, K=64)
    net_transformed = tf.matmul(tf.squeeze(net, axis=[2]), feature_transform)
    net_transformed = tf.expand_dims(net_transformed, [2])

    net = tf_util.conv2d(net_transformed, 64, [1,1],
                       
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值