1. ROS基础通讯的手写代码实践:
因ROS基础较差,假期是通过别人已经编写好的ROS程序包来实现的小车仿真,因此准备自己从头开始实现一下ROS的基础节点通讯,了解节点之间的通讯机制。
通过参考“ROS机器人开发实践”,为了解订阅--发布的话题topic通讯机制,进行了创建Pulisher节点和Subscriber节点,实现了基于自定义话题消息类型和common_msgs功能包中消息类型的的通讯。又为了解客户端--服务端的服务service通讯机制,进行了创建Server节点和Client节点,并创建自定义服务数据实现通讯。
在话题topic通讯时编译出下如下问题:
为CMakeLists文件中存在错误,如下图为改正前的内容。检查发现大小写错误,且另外发现注释掉下图中第3和6行代码也可正常运行,即“add_dependencies(*** ${PROJECT_NAME}_generate_messege_cpp)”内容。
2. 在和宇哥做赵师兄交给的rosbag转换工作的时候,实现文件转换的程序可以编译通过,但在运行时终端显示 “已放弃 (核心已转储)ros” 的错误,且文件转换工作没有完成。
初次分析以为是工作空间目录在“下载”目录下,存在中文路径而造成的程序中路径无法识别问题,因此将工作空间转移到系统根目录下重试,结果仍然出现相同错误。
最后找出错误原因是用于实现文件转换的代码段中文件读取路径有问题,程序中写的文件路径是从主文件夹开始的,即没有包括更上级的系统根目录等。后在代码段中添加了从根目录 “/” 开始的路径,并重新编译和运行,问题得到解决,且文件完成了转换。
3. 因我的SLAM基础较差,本周还阅读了《移动机器人SLAM、目标跟踪及路径规划》中的 “基于卡尔曼滤波机器衍生的同步定位与地图构建算法” 章节内容。主要了解了基于扩展卡尔曼滤波的EKF-SLAM、基于无迹卡尔曼滤波的UKF-SLAM和基于容积卡尔曼滤波的CKF-SLAM算法及对应的改进算法的原理、性能和优缺点。
本文提出的DSP-SLAM是一个面向对象的SLAM系统,可以在单目、双立目或双目+激光雷达三种输入模式下以10帧/秒的速度进行工作。特点在于该方法利用前景对象的形状先验,可对前景对象构建出较为精确的稠密3D模型,并用稀疏的地标点来表示背景环境形成联合地图。
其先利用基于特征的SLAM系统(如ORB-SLAM2)进行三维点云重建,双目+激光雷达系统利用ORB-SLAM2作为SLAM主干网,将重建的三维点云作为输入,该方法通过语义实例分割来检测对象,利用类别特定深度形状嵌入作为先验,通过一种新的二阶优化方法来估计对象的形状和姿态。通过利用对象形状先验,为前景对象构建了一个丰富而精确的稠密3D模型的联合地图。在物体形状和姿势估计方面,在定量和定性上改进了自动标记,这是一种最先进的基于先验知识的物体重建方法。另外,地图还用稀疏的地标点来表示背景环境。在联合因子图中对其进行优化,将基于特征的方法和对象感知SLAM(高级语义地图)的最佳特性结合起来。
与之类似的Node-SLAM也在实时SLAM系统中纳入了形状先验知识,但它使用稠密的深度图像进行形状优化,而DSP-SLAM可以仅使用RGB单目图像流进行计算,并且每个对象只需要50个3D点即可获得准确的形状估计。尽管FroDO和DSP-SLAM都可以在单目RGB设置下运行,但FroDO是一种缓慢的批量方法,需要提前获取所有帧并与它们的相机姿态关联,而DSP-SLAM是一种在线、连续的方法,可以每秒运行10帧。
本文针对地图构建和维护过程中可能遇到的环境变化问题,提出了一种适用于城市环境的开源、模块化的基于激光雷达的终身地图构建和维护框架。特点在于该方法将地图构建问题划分为连续的子问题来实现,包括:多会话(多节)SLAM(multi-session SLAM,MSS),高低动态变化检测,正负变化管理。该方法不需要准确的初始校准,该方法也提供了在大规模点云地图中自动分离出目标的功能,另外对比现有的终身地图构建方法,该方法在所需内存和计算复杂度方面也具有优势(实验验证所用的数据集为MulRan和作者自己的LT-Parkinglot数据集)。
框架包括可独立运行的三个模块:LT-SLAM子模块,其可在共享帧中融合多个会话(节)并保证伸缩性,通过锚节点(anchor node)弹性处理各个会话(节)。子模块LT-removert可沿空域轴和时域轴调用remove-then-revert 算法,实现会话内/会话间的变化检测,区分高动态对象(清除)和低动态对象(保留),克服了各个会话之间对齐的多义性。子模块LT-map主要管理地图的维护,在地图中提取稳定结构,可以有效地生成最新实时地图和长期元地图,并变换为增量地图进行存储,而增量地图的形式保证了在内存和计算成本方面的高效性(与维护整个会话相比,使用增量映射的LT-map节省了近60%的内存,并且获得了比从头计算低动态点变化快8.9倍的性能)。
针对自动驾驶和3D地图中车辆或移动机器人的6自由度姿态估计准确性低、实时性差的问题,本文受HDL方法的启发,提出了一个开源、快速、准确(及时在没有形成回环的场景下)的模块化激光雷达SLAM系统,可以同时进行高精度的批量和在线位姿估计。另外,ART-SLAM不受任何框架的约束,可以一直到不同的操作系统上,并且可以进行自定义的改进。在KITTI里程计数据集上的测试结果显示,无论短,中或长序列,该方法比LOAM,LeGO-LOAM,A-LOAM,LeGO-LOAM-BOR的误差都小,而在KITTI00序列上的测试显示本方法的精度与HDL相仿,但实时性更好。
ART-SLAM的结构如下图所示:
该系统可以分为两个部分,图中灰色部分为ART-SLAM的核心部分,包括了在输入点云(橙色)上执行SLAM的所有模块。图中的其他模块是可选的,他们用于将来自不同传感器的数据或经处理的数据输入集成到主系统中。给定入射激光扫描,第一步是在预滤波器中进行处理,减小其尺寸并去除噪声。过滤后的点云同时发送到两个模块。最重要的模块是跟踪器,与先前滤波的扫描进行scan-to- scan匹配(比如实用方法 ICP, GICP, VGICP 和 NDT),估计机器人当前位移。另一个是地面检测器,发现机器人相对地面的姿势,增加对轨迹的高度和旋转一致性。当前姿势估计连同其对应点云一起发送到闭环检测器(基于SC算法)模块,在新点云和以前点云之间找到闭环,再次执行scan-to- scan匹配。此外,用姿势、闭环和地面系数(由地面检测器模块估计)构建位置图,表征机器人的轨迹。最后,对位置图进行优化,以提高姿态估计精度。此外,预先计算的里程数(例如,通过不同的传感器或系统)可以作为扫描匹配的初始猜测提供给跟踪器。最后,pre-tracker模块(绿色部分)进行多级scan-to- scan匹配,在进行跟踪步骤之前快速估计机器人的运动:这个估计将被广播给跟踪器,作为scan-to- scan匹配的初始猜测,以提高模块的准确性和性能。