CN110827395B - 一种适用于动态环境的即时定位与地图构建方法 - Google Patents

一种适用于动态环境的即时定位与地图构建方法 Download PDF

Info

Publication number
CN110827395B
CN110827395B CN201910848375.6A CN201910848375A CN110827395B CN 110827395 B CN110827395 B CN 110827395B CN 201910848375 A CN201910848375 A CN 201910848375A CN 110827395 B CN110827395 B CN 110827395B
Authority
CN
China
Prior art keywords
map
frame
points
key frame
image
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201910848375.6A
Other languages
English (en)
Other versions
CN110827395A (zh
Inventor
陈文峰
蔡述庭
李丰
徐伟峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Guangdong University of Technology
Original Assignee
Guangdong University of Technology
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Guangdong University of Technology filed Critical Guangdong University of Technology
Priority to CN201910848375.6A priority Critical patent/CN110827395B/zh
Publication of CN110827395A publication Critical patent/CN110827395A/zh
Application granted granted Critical
Publication of CN110827395B publication Critical patent/CN110827395B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/005Tree description, e.g. octree, quadtree
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • G06T17/05Geographic models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T7/00Image analysis
    • G06T7/10Segmentation; Edge detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10028Range image; Depth image; 3D point clouds
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/20Special algorithmic details
    • G06T2207/20081Training; Learning

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Remote Sensing (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Image Analysis (AREA)

Abstract

本发明公开了一种适用于动态环境的即时定位与地图构建方法,包括下述步骤:首先对深度相机和编码器进行外参标定,获得编码器坐标到深度相机坐标的一个变换矩阵;然后对深度相机采集的每一帧图像使用图像金字塔分层,然后从图像金字塔的每一层提取ORB特征点;将编码器获得的数据作为追踪模块的恒速模型,然后将前一帧关键帧的特征点投影到当前帧上,与当前帧的特征点进行匹配,匹配成功的关键点通过三角测量得到两帧之间的位姿;本发明追踪部分使用了编码器数据作为相机重投影时的初始位姿,实现了在动态环境中精准定位追踪,比传统的语义slam追踪模块需要每一帧剔除动态像素,节省了大量时间。

Description

一种适用于动态环境的即时定位与地图构建方法
技术领域
本发明涉及移动机器人定位导航和建图技术领域,具体涉及一种适用于动态环境的即时定位与地图构建方法。
背景技术
Slam(即时定位与地图构建)被广泛应用于移动机器人、无人机和增强现实等领域。然而在动态环境下,传统的slam***不具有鲁棒性。在充斥着动态物体的现实场景中,经典的slam***像ORB_SLAM中的追踪模块会失效,更糟糕的是,经典slam***建立的是静态地图,无法将动态物体从地图当中剔除出去,导致地图根本无法使用。为了解决如何使slam***在动态场景适用这个问题,很多论文文献给出了不同的解决方案,DS_SLAM是其中一个行之有效的方案,该方案对输入的每一帧图像进行语义分割,利用分割后的图像计算本质矩阵,然后使用本质矩阵判断是否为动态物体,如果是就将他们剔除。但是该方案由于对每一帧图像进行语义分割,***难以在移动平台达到实时性,而且建立的是稠密点云地图,内存占用高。
发明内容
本发明的目的在于克服现有技术的缺点与不足,提供一种适用于动态环境的即时定位与地图构建方法,该方法在特定改装的移动机器人上可达到实时性,跟踪部分在动态环境下具有鲁棒性,能根据语义分割的结果,能建立一个三维语义八叉树地图。
本发明的目的通过下述技术方案实现:
一种适用于动态环境的即时定位与地图构建方法,包括下述步骤:
步骤一,首先对深度相机和编码器进行外参标定,获得编码器坐标到深度相机坐标的一个变换矩阵;然后对深度相机采集的每一帧图像使用图像金字塔分层,然后从图像金字塔的每一层提取ORB特征点;将编码器获得的数据作为追踪模块的恒速模型,然后将前一帧关键帧的特征点投影到当前帧上,与当前帧的特征点进行匹配,匹配成功的关键点通过三角测量得到两帧之间的位姿;
步骤二,追踪模块通过最近一次全局优化离当前帧是否已经过去20帧以上和当前帧是否能检测到50个地图点的原则,判定当前帧是否应选取为关键帧,然后将关键帧传到动态物体剔除模块,动态物体剔除模块使用网络对关键帧进行语义分割;
步骤三,追踪模块选取的关键帧在局部地图优化模块投影得到地图点,然后使用lacol BA进行优化;然后在回环检测模块中使用DBow2词袋模型进行回环检测,将之前所有的地图点和关键帧用BA进行全局优化,既优化机器人的位姿也优化地图点;
步骤四,接收全局优化后的关键帧和语义分割后的结果,将关键帧投影到3d点云,根据不同的语义分割的标签为点云着色,然后在语义八叉树地图模块中建立语义八叉树地图。
优选地,所述追踪模块的工作步骤如下:
深度相机以30帧每秒的频率采集彩色图像和深度图像,通过ros中iai_kinect2软件包将彩色图和深度图以话题形式发布出来,然后slam***就监听这两个话题来接收采集到的彩色和深度图;移动机器人以90hz频率发布编码器数据,slam***通过监听话题获取编码器数据,然后***分别对编码器数据和图像进行预处理。
优选地,所述对编码器数据预处理具体为:
首先在t时刻,机器人的位姿为ξt=[xt yt zt]T,根据里程计运动模型,可以得出t+1时刻机器人的位姿为:
Figure BDA0002196061310000031
其中Δs为机器人中心移动的距离,Δθ为机器人移动的角度值;通过监听编码器话题可以获得编码器左右码盘的读数,编码器左右码盘读数和机器人移动之间满足以下关系:
Figure BDA0002196061310000032
其中b为两轮之间的轴距,Δsr和Δsl为t到t+1时刻的左右码盘的读数差;因此可以得出t到t+1时刻机器人坐标的变换矩阵为:
Figure BDA0002196061310000033
优选地,所述对图像进行预处理分为对彩色图像和深度图像进行预处理,具体为:
从话题中获得的彩色图像是三通道的彩色图像,必须使用OpenCV库函数将彩色图像转为单通道的灰度图像;同时深度图也是三通道的图像,需要通过一个映射因子,将深度图转化为CV_32F的单通道图像;
对数据进行预处理后就进入追踪模块的初始化部分,将第一帧图像选取为关键帧;然后每当有新的一帧到来时,进入追踪模块的主线程:
(1)使用图像金字塔,在12个变换尺度下,提取orb特征点,包括orb关键点和描述子;
(2)使用编码器模型重投影特征点;数据预处理中我们得到了t到t+1时刻机器人坐标的变换矩阵,编码器采集频率是相机采集频率的3倍,而且编码器数据和相机数据具有相同的时间戳可以对应上,因此可以获得当前帧到上一帧的变换矩阵
Figure BDA0002196061310000041
假设pc是当前帧某一个像素的相机坐标,u(·)定义相机针孔模型中,将2d像素坐标转换为3d点相机坐标的函数操作;则将当前帧像素pc投影到前一帧的投影结果可以表示为
Figure BDA0002196061310000042
其中
Figure BDA0002196061310000043
为机器人的外参矩阵,由机器人和相机的相对位姿决定的;然后就可以在pc′中3σ的像素区域内寻找匹配的特征点,编码器误差服从正态分布,其中σ为该正态分布的标准差;
(3)然后选取区域内描述子匹配得分最高的关键点为匹配点;遍历所有匹配点,对匹配点的深度值进行重投影,剔除因为动态环境所造成的误匹配;首先将匹配好的特征点对投影到世界坐标得到3d点p,然后将3d点投影到最近的一帧关键帧上,在关键帧上重建这个地图点
Figure BDA0002196061310000044
如果这个匹配点对应的地图点是静态的,p′和p之间的深度值是没变化的,所以如果深度值之差大于一个经验阈值dth,则认为这个匹配点是动态点,把它的深度值置零;可以由以下公式得到dth=db+kd*z′,其中kd与尺度相关,db是一个基础阈值,一般让db=0.2m和kd=0.025;
(4)调用OpenCV中提供的PNP函数,利用ePNP和匹配好的关键点,算出两帧图片之间的位姿;
(5)最后是关键帧的判定,判断当前帧是否满足称为关键帧的条件,如果同时满足以下条件就认为是关键帧;其中地图点是将关键帧上特征点转化到世界坐标下所得到的;
①距离上一次全局重定位超过20帧;
②局部建图线程处于空闲,或者距离上一次关键帧***超过20帧;
③当前帧至少能追踪50个地图点;
④当前帧能追踪到的地图点要少于参考关键帧中地图点的90%。
优选地,所述局部地图优化模块主要是管理地图点和关键帧,同时通过local BA优化地图点和关键帧之间的转换矩阵;局部地图优化模块的工作步骤如下:
(1)地图点剔除,将不满足下列条件的地图点从***中剔除:
①这个点要在可预测到能够观察到该点的关键帧中,有超过25%的关键帧能够跟踪到这个点;
②它必须被超过三个关键帧观察到;
(2)创建新的地图点;当产生一帧新的关键帧之后,将次关键帧和与之相连的关键帧进行特征匹配,将产生的特征点对进行三角化得到的3d点就是新的地图点;
(3)局部地图的BA优化,利用地图点和关键帧特征点之间重投影的关系,建立关于地图点和特征点之间的一个代价函数,然后相机外参数使得代价函数的误差值最小;
(4)关键帧剔除,如果90%关键点能被超过3个关键帧观察到,那么就认为多出来的关键帧是冗余的关键帧,将它们剔除。
优选地,所述动态物体剔除模块的工作步骤如下:
当追踪模块产生新的关键帧之后,会以ros***话题形式将关键帧对应的彩色图和深度图发布出去,然后动态物体剔除模块线程就会接受这个话题,从而获得需要剔除动态像素的彩色图和深度图;因为关键帧动态物体剔除模块中所用到的语义分割网络是在pytorch平台上实现的,必须用Python语言实现,其他模块都是用c++实现的,因此跨平台之间需要用到ros通信机制;
在进行语义分割之前,必须要对语义分割的网络进行训练,这里采用vocpascal2012数据集对ICNet网络进行训练,选用的原因在于该数据集将背景标注为一类,将其他不同物体,如人、桌子和椅子标成其他类,方便对图像进行语义分割的时候,将背景和动态物体分离;
接收到彩色图像和深度图之后就可以用ICNet对彩色图进行图像分割,分割后的结果是单通道的灰度图,必须先用OpenCV将它处理成三通道的彩色图,然后使用经过预先制作好的色条为彩色图像上标注的标签着色,着色完成后就是最终语义分割的结果;
语义分割会将图片以预先标注好的标签分类进行分割,其中第0类标签为背景,第15类为人,对于室内的动态场景,要剔除的动态对象主要是人;因此先对图像进行二值化,将属于第15类的标签灰度值设为255,然后使用OpenCV区域膨胀函数,使得15类标签的像素区域扩大;然后在深度图中,将对应二值化图像中为255的像素的深度值置为零,实现动态像素的剔除;
最后将剔除动态像素的深度图和经过语义分割处理的彩色图以话题形式发回给slam***。
优选地,所述回环检测模块的工作步骤如下:
局部地图优化模块结束之后,会将关键帧传到回环检测模块,然后回环检测模块会调取当前关键帧的词袋向量,和其他关键帧的词袋向量作相似性检验,如下述公式所示:
Figure BDA0002196061310000071
其中v1和v2是词袋向量,反映的是一副图像中所具有的特征点信息,可以通过调用词袋模型的库函数计算得出;如果当前关键帧和之前某一帧关键帧的相似度,比一个相似度阈值还要高1.1倍,则认为当前关键帧和之前的关键帧具有相同的位姿,回环检测成功,以此作为全局关键帧优化的一个条件;相似度阈值是通过关键帧和邻近四个关键帧进行相似度计算得出的,相似度最高的值被设为相似度阈值。
优选地,所述语义八叉树地图模块的工作步骤如下:
当回环检测结束之后,语义八叉树地图模块接收语义分割后得到的彩色图和深度图;pa=[xa ya 1]T为彩色图像中的一个像素,将pa转化到世界坐标下
Figure BDA0002196061310000072
遍历彩色图中的每一个像素将它们都转换到世界坐标之下,得到世界坐标系下的3d点;然后将3d点转化为彩色点云数据类型pcl::PointXYZRGB,这个点云数据类型是一个六维变量,其中前三维是点云的世界坐标,后三维是点云的颜色;分割后不同标签在彩色图像上有不同的颜色,根据这个结果为点云数据着色;第0类标签为背景,因此第0类标签对应的像素转化为点云数据之后,就将这些点云设为银白色;其他标签依次设为不同颜色;
有了包含语义信息的点云数据之后,就可以直接转换为八叉树地图;调用八叉树地图在c++中的库,创建一个ColorOcTree的八叉树对象,然后将点云数据***这个八叉树地图中,最后将八叉树地图分辨率设为0.05,命中概率设为0.7,未命中概率设为0.55;然后将建立好的八叉树以ros话题/octomap形式发布出来。
本发明与现有技术相比具有以下的有益效果:
(1)本发明追踪部分使用了编码器数据作为相机重投影时的初始位姿,实现了在动态环境中精准定位追踪,比传统的语义slam追踪模块需要每一帧剔除动态像素,节省了大量时间;把语义分割部分仅放在了关键帧,能够剔除地图中的动态像素,建立可靠的静态地图;同时创新性地将语义分割部分放在了TensorFlow平台,有别于传统语义slam的caffe平台,不仅提高语义分割的时间,还提高了语义分割的精度;
(2)和融合编码器的slam方案不一样,本发明仅把编码器作为一个“恒速模型”——在重投影彩色图特征点的时候用到,传统的融合编码器数据的动态环境slam会将编码器作为主传感器,在地图局部优化和回环检测里面都会优化编码器数据;但由于编码器容易发生打滑,数据有可能会失效,因此把编码器当作主传感器可能会在某些场景存在相当大的误差,而仅把编码器当作恒速模型就可以有效的避免这个问题。
附图说明
图1为本发明的流程图;
图2为本发明采用ICNet网络与常用语义分割网络性能对比图。
具体实施方式
下面结合实施例及附图对本发明作进一步详细的描述,但本发明的实施方式不限于此。
本发明提出了一种适用于动态环境的即时定位与地图构建方法,在DS_SLAM***的基础上,融入了编码器数据,使得在动态环境中的跟踪部分更具鲁棒性,仅对关键帧部分进行图像分割,将图像分割结果仅用于建图部分,极大地缩短了时间;此外还创新性的结合了TensorFlow平台上的语义分割网络,比起传统的caffe框架下的语义分割网络,新网络具有更好的性能;新网络引入ros***多节点通信机制,为语义分割单独开辟一个节点线程;最后根据语义分割的结果建立语义八叉树地图。
具体来说,如图1~2所示,一种适用于动态环境的即时定位与地图构建方法,包括下述步骤:
步骤一,首先对深度相机和编码器进行外参标定,获得编码器坐标到深度相机坐标的一个变换矩阵;然后对深度相机采集的每一帧图像使用图像金字塔分层,然后从图像金字塔的每一层提取ORB特征点;将编码器获得的数据作为追踪模块的恒速模型,然后将前一帧关键帧的特征点投影到当前帧上,与当前帧的特征点进行匹配,匹配成功的关键点通过三角测量得到两帧之间的位姿;
其中,追踪模块的工作步骤如下:
深度相机以30帧每秒的频率采集彩色图像和深度图像,通过ros中iai_kinect2软件包将彩色图和深度图以话题形式发布出来,然后slam***就监听这两个话题来接收采集到的彩色和深度图;移动机器人以90hz频率发布编码器数据,slam***通过监听话题获取编码器数据,然后***分别对编码器数据和图像进行预处理。
对编码器数据预处理具体为:
首先在t时刻,机器人的位姿为ξt=[xt yt zt]T,根据里程计运动模型,可以得出t+1时刻机器人的位姿为:
Figure BDA0002196061310000101
其中Δs为机器人中心移动的距离,Δθ为机器人移动的角度值;通过监听编码器话题可以获得编码器左右码盘的读数,编码器左右码盘读数和机器人移动之间满足以下关系:
Figure BDA0002196061310000102
其中b为两轮之间的轴距,Δsr和Δsl为t到t+1时刻的左右码盘的读数差;因此可以得出t到t+1时刻机器人坐标的变换矩阵为:
Figure BDA0002196061310000103
对图像进行预处理分为对彩色图像和深度图像进行预处理,具体为:
从话题中获得的彩色图像是三通道的彩色图像,必须使用OpenCV库函数将彩色图像转为单通道的灰度图像;同时深度图也是三通道的图像,需要通过一个映射因子,将深度图转化为CV_32F的单通道图像;
对数据进行预处理后就进入追踪模块的初始化部分,将第一帧图像选取为关键帧;然后每当有新的一帧到来时,进入追踪模块的主线程:
(1)使用图像金字塔,在12个变换尺度下,提取orb特征点,包括orb关键点和描述子;
(2)使用编码器模型重投影特征点;数据预处理中我们得到了t到t+1时刻机器人坐标的变换矩阵,编码器采集频率是相机采集频率的3倍,而且编码器数据和相机数据具有相同的时间戳可以对应上,因此可以获得当前帧到上一帧的变换矩阵
Figure BDA0002196061310000111
假设pc是当前帧某一个像素的相机坐标,u(·)定义相机针孔模型中,将2d像素坐标转换为3d点相机坐标的函数操作;则将当前帧像素pc投影到前一帧的投影结果可以表示为
Figure BDA0002196061310000112
其中
Figure BDA0002196061310000113
为机器人的外参矩阵,由机器人和相机的相对位姿决定的;然后就可以在pc′中3σ的像素区域内寻找匹配的特征点,编码器误差服从正态分布,其中σ为该正态分布的标准差;
(3)然后选取区域内描述子匹配得分最高的关键点为匹配点;遍历所有匹配点,对匹配点的深度值进行重投影,剔除因为动态环境所造成的误匹配;首先将匹配好的特征点对投影到世界坐标得到3d点p,然后将3d点投影到最近的一帧关键帧上,在关键帧上重建这个地图点
Figure BDA0002196061310000121
如果这个匹配点对应的地图点是静态的,p′和p之间的深度值是没变化的,所以如果深度值之差大于一个经验阈值dth,则认为这个匹配点是动态点,把它的深度值置零;可以由以下公式得到dth=db+kd*z′,其中kd与尺度相关,db是一个基础阈值,一般让db=0.2m和kd=0.025;
(4)调用OpenCV中提供的PNP函数,利用ePNP和匹配好的关键点,算出两帧图片之间的位姿;
(5)最后是关键帧的判定,判断当前帧是否满足称为关键帧的条件,如果同时满足以下条件就认为是关键帧;其中地图点是将关键帧上特征点转化到世界坐标下所得到的;
①距离上一次全局重定位超过20帧;
②局部建图线程处于空闲,或者距离上一次关键帧***超过20帧;
③当前帧至少能追踪50个地图点;
④当前帧能追踪到的地图点要少于参考关键帧中地图点的90%。
步骤二,追踪模块通过最近一次全局优化离当前帧是否已经过去20帧以上和当前帧是否能检测到50个地图点的原则,判定当前帧是否应选取为关键帧,然后将关键帧传到动态物体剔除模块,动态物体剔除模块使用网络对关键帧进行语义分割;
其中,动态物体剔除模块的工作步骤如下:
当追踪模块产生新的关键帧之后,会以ros***话题形式将关键帧对应的彩色图和深度图发布出去,然后动态物体剔除模块线程就会接受这个话题,从而获得需要剔除动态像素的彩色图和深度图;因为关键帧动态物体剔除模块中所用到的语义分割网络是在pytorch平台上实现的,必须用Python语言实现,其他模块都是用c++实现的,因此跨平台之间需要用到ros通信机制;
在进行语义分割之前,必须要对语义分割的网络进行训练,这里采用vocpascal2012数据集对ICNet网络进行训练,选用的原因在于该数据集将背景标注为一类,将其他不同物体,如人、桌子和椅子标成其他类,方便对图像进行语义分割的时候,将背景和动态物体分离;
接收到彩色图像和深度图之后就可以用ICNet对彩色图进行图像分割,分割后的结果是单通道的灰度图,必须先用OpenCV将它处理成三通道的彩色图,然后使用经过预先制作好的色条为彩色图像上标注的标签着色,着色完成后就是最终语义分割的结果;
语义分割会将图片以预先标注好的标签分类进行分割,其中第0类标签为背景,第15类为人,对于室内的动态场景,要剔除的动态对象主要是人;因此先对图像进行二值化,将属于第15类的标签灰度值设为255,然后使用OpenCV区域膨胀函数,使得15类标签的像素区域扩大;然后在深度图中,将对应二值化图像中为255的像素的深度值置为零,实现动态像素的剔除;
最后将剔除动态像素的深度图和经过语义分割处理的彩色图以话题形式发回给slam***。
步骤三,追踪模块选取的关键帧在局部地图优化模块投影得到地图点,然后使用lacol BA进行优化;然后在回环检测模块中使用DBow2词袋模型进行回环检测,将之前所有的地图点和关键帧用BA进行全局优化,既优化机器人的位姿也优化地图点;
其中,局部地图优化模块主要是管理地图点和关键帧,同时通过local BA优化地图点和关键帧之间的转换矩阵;局部地图优化模块的工作步骤如下:
(1)地图点剔除,将不满足下列条件的地图点从***中剔除:
①这个点要在可预测到能够观察到该点的关键帧中,有超过25%的关键帧能够跟踪到这个点;
②它必须被超过三个关键帧观察到;
(2)创建新的地图点;当产生一帧新的关键帧之后,将次关键帧和与之相连的关键帧进行特征匹配,将产生的特征点对进行三角化得到的3d点就是新的地图点;
(3)局部地图的BA优化,利用地图点和关键帧特征点之间重投影的关系,建立关于地图点和特征点之间的一个代价函数,然后相机外参数使得代价函数的误差值最小;
(4)关键帧剔除,如果90%关键点能被超过3个关键帧观察到,那么就认为多出来的关键帧是冗余的关键帧,将它们剔除。
其中,回环检测模块的工作步骤如下:
局部地图优化模块结束之后,会将关键帧传到回环检测模块,然后回环检测模块会调取当前关键帧的词袋向量,和其他关键帧的词袋向量作相似性检验,如下述公式所示:
Figure BDA0002196061310000141
其中v1和v2是词袋向量,反映的是一副图像中所具有的特征点信息,可以通过调用词袋模型的库函数计算得出;如果当前关键帧和之前某一帧关键帧的相似度,比一个相似度阈值还要高1.1倍,则认为当前关键帧和之前的关键帧具有相同的位姿,回环检测成功,以此作为全局关键帧优化的一个条件;相似度阈值是通过关键帧和邻近四个关键帧进行相似度计算得出的,相似度最高的值被设为相似度阈值。
步骤四,接收全局优化后的关键帧和语义分割后的结果,将关键帧投影到3d点云,根据不同的语义分割的标签为点云着色,然后在语义八叉树地图模块中建立语义八叉树地图。
其中,语义八叉树地图模块的工作步骤如下:
当回环检测结束之后,语义八叉树地图模块接收语义分割后得到的彩色图和深度图;pa=[xa ya 1]T为彩色图像中的一个像素,将pa转化到世界坐标下
Figure BDA0002196061310000151
遍历彩色图中的每一个像素将它们都转换到世界坐标之下,得到世界坐标系下的3d点;然后将3d点转化为彩色点云数据类型pcl::PointXYZRGB,这个点云数据类型是一个六维变量,其中前三维是点云的世界坐标,后三维是点云的颜色;分割后不同标签在彩色图像上有不同的颜色,根据这个结果为点云数据着色;第0类标签为背景,因此第0类标签对应的像素转化为点云数据之后,就将这些点云设为银白色;其他标签依次设为不同颜色;
有了包含语义信息的点云数据之后,就可以直接转换为八叉树地图;调用八叉树地图在c++中的库,创建一个ColorOcTree的八叉树对象,然后将点云数据***这个八叉树地图中,最后将八叉树地图分辨率设为0.05,命中概率设为0.7,未命中概率设为0.55;然后将建立好的八叉树以ros话题/octomap形式发布出来。
传统的语义分割slam一般是基于caffe框架下的,caffe框架下可选择的语义分割网络不多,不仅速度慢分割效果也不好;而本发明如图2所示,横坐标为每秒钟处理的帧数,纵坐标为图像的精度分割,单位是mloU%,ICNet(ours)无论是在网络前向运行时间还是在精确度上都远远领先于传统语义分割框架用的Segnet网络,而且性能可以达到实时性。
相对于现有技术中动态环境下基于激光雷达的SLAM方法、动态稀疏环境下机器人SLAM物体状态检测方法和基于SLAM与步态IMU融合的室内人员自主定位方法,本发明的主要创新点在于:
1、使用了一种创新性融合编码器数据的方法,仅把编码器数据作为相机当前帧和关键帧之间重投影的变换矩阵,实现了编码器数据和相机数据的浅层融合;避免了编码器数据因打滑存在误差的时候对***的巨大影响。
2、利用ros***实现c++和Python多节点通信,从而创新性地将TensorFlow框架下的语义分割网络加入到slam***中,有效提高了语义分割的性能。
3、创新性地剔除了语义八叉树地图,充分利用语义分割得到的图像信息,建立一个更完整更实用性的语义地图。
本发明追踪部分使用了编码器数据作为相机重投影时的初始位姿,实现了在动态环境中精准定位追踪,比传统的语义slam追踪模块需要每一帧剔除动态像素,节省了大量时间;把语义分割部分仅放在了关键帧,能够剔除地图中的动态像素,建立可靠的静态地图;同时创新性地将语义分割部分放在了TensorFlow平台,有别于传统语义slam的caffe平台,不仅提高语义分割的时间,还提高了语义分割的精度。
和融合编码器的slam方案不一样,本发明仅把编码器作为一个“恒速模型”——在重投影彩色图特征点的时候用到,传统的融合编码器数据的动态环境slam会将编码器作为主传感器,在地图局部优化和回环检测里面都会优化编码器数据;但由于编码器容易发生打滑,数据有可能会失效,因此把编码器当作主传感器可能会在某些场景存在相当大的误差,而仅把编码器当作恒速模型就可以有效的避免这个问题。
上述为本发明较佳的实施方式,但本发明的实施方式并不受上述内容的限制,其他的任何未背离本发明的精神实质与原理下所作的改变、修饰、替代、组合、简化,均应为等效的置换方式,都包含在本发明的保护范围之内。

Claims (4)

1.一种适用于动态环境的即时定位与地图构建方法,其特征在于,包括下述步骤:
步骤一,首先对深度相机和编码器进行外参标定,获得编码器坐标到深度相机坐标的一个变换矩阵;然后对深度相机采集的每一帧图像使用图像金字塔分层,然后从图像金字塔的每一层提取ORB特征点;将编码器获得的数据作为追踪模块的恒速模型,然后将前一帧关键帧的特征点投影到当前帧上,与当前帧的特征点进行匹配,匹配成功的关键点通过三角测量得到两帧之间的位姿;
步骤二,追踪模块通过最近一次全局优化离当前帧是否已经过去20帧以上和当前帧是否能检测到50个地图点的原则,判定当前帧是否应选取为关键帧,然后将关键帧传到动态物体剔除模块,动态物体剔除模块使用网络对关键帧进行语义分割;
当追踪模块产生新的关键帧之后,会以ros***话题形式将关键帧对应的彩色图和深度图发布出去,然后动态物体剔除模块线程就会接受这个话题,从而获得需要剔除动态像素的彩色图和深度图;因为关键帧动态物体剔除模块中所用到的语义分割网络是在pytorch平台上实现的,必须用Python语言实现,其他模块都是用c++实现的,因此跨平台之间需要用到ros通信机制;
在进行语义分割之前,必须要对语义分割的网络进行训练,这里采用vocpascal2012数据集对ICNet网络进行训练,选用的原因在于该数据集将背景标注为一类,将其他不同物体,包括人、桌子和椅子标成其他类,方便对图像进行语义分割的时候,将背景和动态物体分离;
接收到彩色图像和深度图之后就用ICNet对彩色图进行图像分割,分割后的结果是单通道的灰度图,必须先用OpenCV将它处理成三通道的彩色图,然后使用经过预先制作好的色条为彩色图像上标注的标签着色,着色完成后就是最终语义分割的结果;
语义分割会将图片以预先标注好的标签分类进行分割,其中第0类标签为背景,第15类为人,对于室内的动态场景,要剔除的动态对象是人;因此先对图像进行二值化,将属于第15类的标签灰度值设为255,然后使用OpenCV区域膨胀函数,使得15类标签的像素区域扩大;然后在深度图中,将对应二值化图像中为255的像素的深度值置为零,实现动态像素的剔除;
最后将剔除动态像素的深度图和经过语义分割处理的彩色图以话题形式发回给slam***;
步骤三,追踪模块选取的关键帧在局部地图优化模块投影得到地图点,然后使用局部地图BA进行优化;然后在回环检测模块中使用DBow2词袋模型进行回环检测,将之前所有的地图点和关键帧用BA进行全局优化,既优化机器人的位姿也优化地图点;
步骤四,接收全局优化后的关键帧和语义分割后的结果,将关键帧投影到3d点云,根据不同的语义分割的标签为点云着色,然后在语义八叉树地图模块中建立语义八叉树地图;
所述追踪模块的工作步骤如下:
深度相机以30帧每秒的频率采集彩色图像和深度图像,通过ros中iai_kinect2软件包将彩色图和深度图以话题形式发布出来,然后slam***就监听这两个话题来接收采集到的彩色和深度图;移动机器人以90hz频率发布编码器数据,slam***通过监听话题获取编码器数据,然后***分别对编码器数据和图像进行预处理;
对图像进行预处理分为对彩色图像和深度图像进行预处理,具体为:
从话题中获得的彩色图像是三通道的彩色图像,必须使用OpenCV库函数将彩色图像转为单通道的灰度图像;同时深度图也是三通道的图像,需要通过一个映射因子,将深度图转化为CV_32F的单通道图像;
对数据进行预处理后就进入追踪模块的初始化部分,将第一帧图像选取为关键帧;然后每当有新的一帧到来时,进入追踪模块的主线程包括步骤(1)至(5):
(1)使用图像金字塔,在12个变换尺度下,提取orb特征点,包括orb关键点和描述子;
(2)使用编码器模型重投影特征点;数据预处理中得到了t到t+1时刻机器人坐标的变换矩阵,编码器采集频率是相机采集频率的3倍,而且编码器数据和相机数据具有相同的时间戳对应上,因此获得当前帧到上一帧的变换矩阵
Figure FDA0003769698190000021
Trr表示t到t+1时刻机器人坐标的变换矩阵;假设pc是当前帧某一个像素的相机坐标,u(·)定义相机针孔模型中,将2d像素坐标转换为3d点相机坐标的函数操作;则将当前帧像素pc投影到前一帧的投影结果表示为
Figure FDA0003769698190000031
其中
Figure FDA0003769698190000032
为机器人的外参矩阵,由机器人和相机的相对位姿决定的;然后就在pc′中3σ的像素区域内寻找匹配的特征点,编码器误差服从正态分布,其中σ为该正态分布的标准差;
(3)然后选取区域内描述子匹配得分最高的关键点为匹配点;遍历所有匹配点,对匹配点的深度值进行重投影,剔除因为动态环境所造成的误匹配;首先将匹配好的特征点对投影到世界坐标得到3d点p,然后将3d点投影到最近的一帧关键帧上,在关键帧上重建这个地图点
Figure FDA0003769698190000033
如果这个匹配点对应的地图点是静态的,p′和p之间的深度值是没变化的,所以如果深度值之差大于一个经验阈值dth,则认为这个匹配点是动态点,把它的深度值置零;由以下公式得到dth=0.2+0.025*z′;
(4)调用OpenCV中提供的ePNP函数,利用ePNP函数和匹配好的关键点,算出两帧图片之间的位姿;
(5)最后是关键帧的判定,判断当前帧是否满足称为关键帧的条件,如果同时满足以下条件就认为是关键帧;其中地图点是将关键帧上特征点转化到世界坐标下所得到的;
①距离上一次全局重定位超过20帧;
②局部建图线程处于空闲,或者距离上一次关键帧***超过20帧;
③当前帧至少能追踪50个地图点;
④当前帧能追踪到的地图点要少于参考关键帧中地图点的90%;
所述语义八叉树地图模块的工作步骤如下:
当回环检测结束之后,语义八叉树地图模块接收语义分割后得到的彩色图和深度图;pa=[xa ya 1]T为彩色图像中的一个像素,将pa转化到世界坐标下
Figure FDA0003769698190000034
遍历彩色图中的每一个像素将它们都转换到世界坐标之下,得到世界坐标系下的3d点;然后将3d点转化为彩色点云数据类型pcl::PointXYZRGB,这个点云数据类型是一个六维变量,其中前三维是点云的世界坐标,后三维是点云的颜色;分割后不同标签在彩色图像上有不同的颜色,根据这个结果为点云数据着色;第0类标签为背景,因此第0类标签对应的像素转化为点云数据之后,就将这些点云设为银白色;其他标签依次设为不同颜色;
有了包含语义信息的点云数据之后,就直接转换为八叉树地图;调用八叉树地图在c++中的库,创建一个ColorOcTree的八叉树对象,然后将点云数据***这个八叉树地图中,最后将八叉树地图分辨率设为0.05,命中概率设为0.7,未命中概率设为0.55;然后将建立好的八叉树以ros话题/octomap形式发布出来。
2.根据权利要求1所述的适用于动态环境的即时定位与地图构建方法,其特征在于,所述对编码器数据预处理具体为:
首先在t时刻,机器人的位姿为ξt=[xt yt θt]T,根据里程计运动模型,得出t+1时刻机器人的位姿为:
Figure FDA0003769698190000041
其中Δs为机器人中心移动的距离,Δθ为机器人移动的角度值;通过监听编码器话题获得编码器左右码盘的读数,编码器左右码盘读数和机器人移动之间满足以下关系:
Figure FDA0003769698190000042
其中b为两轮之间的轴距,Δsr为t到t+1时刻的左码盘的读数差,Δsl为t到t+1时刻的右码盘的读数差;因此得出t到t+1时刻机器人坐标的变换矩阵为:
Figure FDA0003769698190000043
3.根据权利要求1所述的适用于动态环境的即时定位与地图构建方法,其特征在于,所述局部地图优化模块用于管理地图点和关键帧,同时通过局部地图BA优化地图点和关键帧之间的转换矩阵;局部地图优化模块的工作步骤如下:
A.地图点剔除,将不满足下列条件的地图点从***中剔除:
①这个点要在可预测到能够观察到该点的关键帧中,有超过25%的关键帧能够跟踪到这个点;
②它必须被超过三个关键帧观察到;
B.创建新的地图点;当产生一帧新的关键帧之后,将次关键帧和与之相连的关键帧进行特征匹配,将产生的特征点对进行三角化得到的3d点就是新的地图点;
C.局部地图的BA优化,利用地图点和关键帧特征点之间重投影的关系,建立关于地图点和特征点之间的一个代价函数,然后相机外参数使得代价函数的误差值最小;
D.关键帧剔除,如果90%关键点能被超过3个关键帧观察到,那么就认为多出来的关键帧是冗余的关键帧,将它们剔除。
4.根据权利要求1所述的适用于动态环境的即时定位与地图构建方法,其特征在于,所述回环检测模块的工作步骤如下:
局部地图优化模块结束之后,会将关键帧传到回环检测模块,然后回环检测模块会调取当前关键帧的词袋向量,和其他关键帧的词袋向量作相似性检验,如下述公式所示:
Figure FDA0003769698190000051
其中s(v1,v2)表示相似性检验结果,v1和v2是词袋向量,反映的是一幅 图像中所具有的特征点信息,通过调用词袋模型的库函数计算得出;如果当前关键帧和之前某一帧关键帧的相似度,比一个相似度阈值还要高1.1倍,则认为当前关键帧和之前的关键帧具有相同的位姿,回环检测成功,以此作为全局关键帧优化的一个条件;相似度阈值是通过关键帧和邻近四个关键帧进行相似度计算得出的,相似度最高的值被设为相似度阈值。
CN201910848375.6A 2019-09-09 2019-09-09 一种适用于动态环境的即时定位与地图构建方法 Active CN110827395B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910848375.6A CN110827395B (zh) 2019-09-09 2019-09-09 一种适用于动态环境的即时定位与地图构建方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910848375.6A CN110827395B (zh) 2019-09-09 2019-09-09 一种适用于动态环境的即时定位与地图构建方法

Publications (2)

Publication Number Publication Date
CN110827395A CN110827395A (zh) 2020-02-21
CN110827395B true CN110827395B (zh) 2023-01-20

Family

ID=69547981

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910848375.6A Active CN110827395B (zh) 2019-09-09 2019-09-09 一种适用于动态环境的即时定位与地图构建方法

Country Status (1)

Country Link
CN (1) CN110827395B (zh)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113326716B (zh) * 2020-02-28 2024-03-01 北京创奇视界科技有限公司 面向装配现场环境装配指导ar应用定位的回环检测方法
CN113009453B (zh) * 2020-03-20 2022-11-08 青岛慧拓智能机器有限公司 矿山路沿检测及建图方法及装置
CN111402336B (zh) * 2020-03-23 2024-03-12 中国科学院自动化研究所 基于语义slam的动态环境相机位姿估计及语义地图构建方法
CN111563442B (zh) * 2020-04-29 2023-05-02 上海交通大学 基于激光雷达的点云和相机图像数据融合的slam方法及***
CN111652933B (zh) * 2020-05-06 2023-08-04 Oppo广东移动通信有限公司 基于单目相机的重定位方法、装置、存储介质与电子设备
CN111664842A (zh) * 2020-05-07 2020-09-15 苏州品坤智能科技有限公司 一种无人扫地机的即时定位与地图构建***
CN112116657B (zh) * 2020-08-07 2023-12-19 中国科学院深圳先进技术研究院 基于表检索的同时定位与建图方法和装置
CN112132893B (zh) * 2020-08-31 2024-01-09 同济人工智能研究院(苏州)有限公司 一种适用于室内动态环境的视觉slam方法
CN112132857B (zh) * 2020-09-18 2023-04-07 福州大学 动态环境混合视觉***的动态物检测和静态地图重建方法
CN112233180B (zh) * 2020-10-23 2024-03-15 上海影谱科技有限公司 基于地图的slam快速初始化方法、装置和电子设备
CN112200874B (zh) * 2020-10-30 2022-06-21 中国科学院自动化研究所 狭窄空间的多层次场景重建和快速分割方法、***及装置
CN112378409B (zh) * 2020-12-01 2022-08-12 杭州宇芯机器人科技有限公司 动态环境下基于几何与运动约束的机器人rgb-d slam方法
CN113284224B (zh) * 2021-04-20 2024-06-18 北京行动智能科技有限公司 基于单纯码的自动建图方法和装置、定位方法及设备
CN113362363B (zh) * 2021-06-18 2022-11-04 广东工业大学 一种基于视觉slam的图像自动标注方法、装置及存储介质
CN113763551B (zh) * 2021-09-08 2023-10-27 北京易航远智科技有限公司 一种基于点云的大规模建图场景的快速重定位方法
CN113902847B (zh) * 2021-10-11 2024-04-16 岱悟智能科技(上海)有限公司 基于三维特征约束的单目深度图像位姿优化方法
CN115267746B (zh) * 2022-06-13 2024-06-28 广州文远知行科技有限公司 激光雷达点云投影错误的定位方法及相关设备
CN114926536B (zh) * 2022-07-19 2022-10-14 合肥工业大学 一种基于语义的定位与建图方法、***及智能机器人
CN115120346B (zh) * 2022-08-30 2023-02-17 中国科学院自动化研究所 目标点定位装置、电子设备及支气管镜***
CN118097030A (zh) * 2024-04-23 2024-05-28 华南农业大学 一种基于BundleFusion的三维重建方法

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106123890A (zh) * 2016-06-14 2016-11-16 中国科学院合肥物质科学研究院 一种多传感器数据融合的机器人定位方法
CN107516326A (zh) * 2017-07-14 2017-12-26 中国科学院计算技术研究所 融合单目视觉和编码器信息的机器人定位方法和***
CN108594816A (zh) * 2018-04-23 2018-09-28 长沙学院 一种通过改进orb-slam算法实现定位与构图的方法和***
CN108596974A (zh) * 2018-04-04 2018-09-28 清华大学 动态场景机器人定位建图***及方法
CN109753913A (zh) * 2018-12-28 2019-05-14 东南大学 计算高效的多模式视频语义分割方法
CN110095111A (zh) * 2019-05-10 2019-08-06 广东工业大学 一种地图场景的构建方法、构建***及相关装置
CN110097553A (zh) * 2019-04-10 2019-08-06 东南大学 基于即时定位建图与三维语义分割的语义建图***

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100877071B1 (ko) * 2007-07-18 2009-01-07 삼성전자주식회사 파티클 필터 기반의 이동 로봇의 자세 추정 방법 및 장치
KR101572851B1 (ko) * 2008-12-22 2015-11-30 삼성전자 주식회사 동적 환경에서 모바일 플랫폼의 지도 작성방법

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106123890A (zh) * 2016-06-14 2016-11-16 中国科学院合肥物质科学研究院 一种多传感器数据融合的机器人定位方法
CN107516326A (zh) * 2017-07-14 2017-12-26 中国科学院计算技术研究所 融合单目视觉和编码器信息的机器人定位方法和***
CN108596974A (zh) * 2018-04-04 2018-09-28 清华大学 动态场景机器人定位建图***及方法
CN108594816A (zh) * 2018-04-23 2018-09-28 长沙学院 一种通过改进orb-slam算法实现定位与构图的方法和***
CN109753913A (zh) * 2018-12-28 2019-05-14 东南大学 计算高效的多模式视频语义分割方法
CN110097553A (zh) * 2019-04-10 2019-08-06 东南大学 基于即时定位建图与三维语义分割的语义建图***
CN110095111A (zh) * 2019-05-10 2019-08-06 广东工业大学 一种地图场景的构建方法、构建***及相关装置

Non-Patent Citations (6)

* Cited by examiner, † Cited by third party
Title
DRE-SLAM: Dynamic RGB-D Encoder SLAM for a Differential-Drive Robot;Dongsheng Yang et al;《remote sensing》;20190213;第1-29页 *
ICNet for Real-Time Semantic Segmentation on High-Resolution Images;Zhao H et al;《Proceedings of the European conference on computer vision (ECCV)》;20181231;第405-420页 *
基于单目视觉的同时定位与稀疏地图构建的研究与实现;吴勇;《中国优秀硕士学位论文全文数据库 信息科技辑》;20180115;第I138-1304页 *
基于激光雷达的农业移动机器人果树干检测和导航研究;张莹莹;《中国优秀硕士学位论文全文数据库 信息科技辑》;20170615;第I140-174页 *
基于视觉的语义SLAM关键技术研究;王泽民;《中国优秀硕士学位论文全文数据库 信息科技辑》;20190515;第I138-1503页 *
移动***中的实时图像处理算法的研究;马超群;《中国优秀博硕士学位论文全文数据库(硕士)信息科技辑》;20180415;第I138-2363页 *

Also Published As

Publication number Publication date
CN110827395A (zh) 2020-02-21

Similar Documents

Publication Publication Date Title
CN110827395B (zh) 一种适用于动态环境的即时定位与地图构建方法
CN111462135B (zh) 基于视觉slam与二维语义分割的语义建图方法
CN109345588B (zh) 一种基于Tag的六自由度姿态估计方法
CN108229366B (zh) 基于雷达和图像数据融合的深度学习车载障碍物检测方法
CN112734852B (zh) 一种机器人建图方法、装置及计算设备
WO2019153245A1 (en) Systems and methods for deep localization and segmentation with 3d semantic map
CN110706248A (zh) 一种基于slam的视觉感知建图算法及移动机器人
CN113506318B (zh) 一种车载边缘场景下的三维目标感知方法
CN110688905B (zh) 一种基于关键帧的三维物体检测与跟踪方法
CN114413881B (zh) 高精矢量地图的构建方法、装置及存储介质
CN113743391A (zh) 应用于低速自主驾驶机器人的三维障碍物检测***与方法
CN112825192B (zh) 基于机器学习的对象辨识***及其方法
CN112101160B (zh) 一种面向自动驾驶场景的双目语义slam方法
CN111179344A (zh) 一种修复语义信息的高效移动机器人slam***
CN114821507A (zh) 一种用于自动驾驶的多传感器融合车路协同感知方法
CN114140527A (zh) 一种基于语义分割的动态环境双目视觉slam方法
CN116468786B (zh) 一种面向动态环境的基于点线联合的语义slam方法
CN112541423A (zh) 一种同步定位与地图构建方法和***
CN109934873A (zh) 标注图像获取方法、装置及设备
CN116643291A (zh) 一种视觉与激光雷达联合剔除动态目标的slam方法
CN117523461B (zh) 一种基于机载单目相机的运动目标跟踪与定位方法
CN115147344A (zh) 一种增强现实辅助汽车维修中的零件三维检测与跟踪方法
WO2020199072A1 (en) Autonomous driving dataset generation with automatic object labelling methods and apparatuses
CN113628334A (zh) 视觉slam方法、装置、终端设备及存储介质
CN112509110A (zh) 一种陆地对抗智能体的图像数据集自动采取与标注框架

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant