MIT最新工作:使用三维线、面的激光雷达闭环检测的全局数据关联方法

以下内容来自从零开始机器人SLAM知识星球 每日更新内容

点击领取学习资料 → 机器人SLAM学习资料大礼包

#论文# Global Data Association for SLAM with 3D Grassmannian Manifold Objects

论文地址:https://arxiv.org/abs/2205.08556

作者单位:麻省理工学院

与常用的点云地图相比,在激光雷达SLAM中使用极点和平面可以提高精度并降低地图存储要求。然而,使用这些地标进行位置识别和几何验证是具有挑战性的,因为需要在没有初始位姿的情况下进行全局匹配。现有的方法通常只利用极点或平面地标,将应用限制在有限的环境集合中。本文提出了一种同时使用三维线、面目标进行激光雷达扫描回环检测的全局数据关联方法。

本文的主要创新点是在仿射子空间流形上对激光雷达扫描提取的线和面目标的表示,称为仿射Grassman空间。使用我们的基于图的数据关联框架来匹配线和面的对应关系,并随后以最小二乘进行配准。与仅极点方法和仅平面方法相比,我们的3D仿射Grassman方法在Kitti数据集上分别提高了71%和325%的回环检测召回率,并且可以提供小于10 cm和1度的定位误差。 本文贡献如下: 1、引入极点和平面对象的仿射Grassmannian表示,用于全局数据关联,导致三维地标的几何验证,无需初始对齐; 2、使用线和平面代替点进行刚性转换的最小二乘估计,导致对旋转和平移的更准确估计; 3、对KITTI数据集的四个序列进行闭环几何验证的评估; 4、准确度都超过了最先进的方法。 file file file file file file 以上内容来自从零开始机器人SLAM知识星球 每日更新内容

本文由博客一文多发平台 OpenWrite 发布!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是使用Python进行MIT心电信号的P波检测的代码: 首先,需要安装wfdb包,可以使用以下命令进行安装: ``` !pip install wfdb ``` 然后,可以使用以下代码读取MIT心电信号数据: ``` import wfdb record = wfdb.rdrecord('mitdb/100', channels=[0]) signal = record.p_signal.flatten() ``` 接下来,我们需要对信号进行滤波,可以使用以下代码进行带通滤波: ``` from scipy.signal import butter, filtfilt def butter_bandpass(lowcut, highcut, fs, order=5): nyq = 0.5 * fs low = lowcut / nyq high = highcut / nyq b, a = butter(order, [low, high], btype='band') return b, a def butter_bandpass_filter(data, lowcut, highcut, fs, order=5): b, a = butter_bandpass(lowcut, highcut, fs, order=order) y = filtfilt(b, a, data) return y fs = record.fs signal_filtered = butter_bandpass_filter(signal, 1, 30, fs, order=4) ``` 接下来,我们需要找到P波。P波通常是QRS波群之前的第一个正向波峰。可以使用以下代码找到P波: ``` import numpy as np from scipy.signal import find_peaks peaks, _ = find_peaks(signal_filtered, distance=int(0.2*fs), height=0.2) rpeaks, _ = wfdb.processing.gqrs_detect(signal_filtered, fs=fs) p_peaks = [] for p in peaks: if p < rpeaks[0]: p_peaks.append(p) p_peak = np.min(p_peaks) ``` 最后,我们可以将P波的位置可视化: ``` import matplotlib.pyplot as plt from matplotlib.patches import Rectangle fig, ax = plt.subplots() ax.plot(signal_filtered) ax.add_patch(Rectangle((p_peak-20, -0.5), 40, 1, alpha=0.2, color='r')) plt.show() ``` 完整的代码如下: ``` import wfdb from scipy.signal import butter, filtfilt, find_peaks import numpy as np import matplotlib.pyplot as plt from matplotlib.patches import Rectangle def butter_bandpass(lowcut, highcut, fs, order=5): nyq = 0.5 * fs low = lowcut / nyq high = highcut / nyq b, a = butter(order, [low, high], btype='band') return b, a def butter_bandpass_filter(data, lowcut, highcut, fs, order=5): b, a = butter_bandpass(lowcut, highcut, fs, order=order) y = filtfilt(b, a, data) return y record = wfdb.rdrecord('mitdb/100', channels=[0]) signal = record.p_signal.flatten() fs = record.fs signal_filtered = butter_bandpass_filter(signal, 1, 30, fs, order=4) peaks, _ = find_peaks(signal_filtered, distance=int(0.2*fs), height=0.2) rpeaks, _ = wfdb.processing.gqrs_detect(signal_filtered, fs=fs) p_peaks = [] for p in peaks: if p < rpeaks[0]: p_peaks.append(p) p_peak = np.min(p_peaks) fig, ax = plt.subplots() ax.plot(signal_filtered) ax.add_patch(Rectangle((p_peak-20, -0.5), 40, 1, alpha=0.2, color='r')) plt.show() ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值