目前国内各高校和研究所做移动机器人导航理论的研究人员很多,但是很多在研究的入门阶段,并没有受过系统的课程学习,都是自己摸索,因此走了很多弯路,并且很多人都无法掌握学术前沿研究现状,不断在做简单重复性研究。本课程向学生讲述移动机器人导航理论的入门基本知识,其中重点介绍学术最前沿的基于概率学的机器人定位与制图理论,使得学生快速入门移动机器人的导航研究,从而为后续最前沿导航理论的深入研究打好基础。此外该课程所教授的内容涵盖大量概率学和状态估计器的知识,可以为机器人学和其他一些交叉学科(如计算机视觉等)的学生打下稳固的数学基础。
单纯理论知识的学习不能使学生有效掌握课程核心知识点,为此我们增设课程SLAM大作业,让学生通过实际的编程实现,了解并掌握SLAM技巧,提升工程实现能力。以下是每组学生(2-3人)大作业课题的简介和部分实验结果。
第一组的内容:
本次课设我们主要使用ORB-SLAM2的代码:
首先我们搭建ORB-SLAM2平台:安装必备软件,如git、cmake、Pangolin 和opencv等等;然后我们在GitHub网站上下载并且编译了ORB-SLAM2;接下来我们对ORB-SLAM2进行了测试,成功的跑通了在网上下载的一个单目相机的测试数据集。
第二步是安装Kinect1的驱动,我们安装了libfreenect-dev和freenect-launch;通过roslaunch freenect_launch freenect.launch 验证表示kinect驱动安装成功。
第三步是对相机进行标定,我们大概使用了二十多张图片在MATLAB上对相机进行了标定,
最后一步就是实时建图与定位,通过运行roslaunch kinect_orbslam2.launch 可以实时构建地图,此时系统不停地定位相机,构建新的地图,并且试图闭合环形路径。当构建地图完成后,保存,重新加载地图,使用定位模式,系统在你提供的地图上定位相机 (此地图不再更新), 在必要时使用重定位。
最后,非常感谢陈老师对我们的课程讲解,这学期通过学习移动机器人导航这门课程,使我们对移动机器人的SLAM有了更加深入的了解,而本次SLAM的课程设计更是增强了我们的动手能力,理解了移动机器人在导航过程中很多细节部分。当然,以后我们会更加努力,争取把我们做的东西应用到实体机器人上。
第二组的内容:
建立了ORB-SLAM运行的实验条件,安装各种依赖环境。运行网络上的公开数据集,体验ORB-SLAM的效果。对比不同的数据集在ORB-SLAM上的表现。
同时标定手机摄像头,录制真实环境视频上传到电脑上,仿照ORB-SLAM上公开数据集的格式将视频转换成图片,并且将图片按时间顺序命名,生成rgb.txt文件(以上工作用python,opencv完成)。在SLAM上跑自己的数据集,发现ORB-SLAM的优缺点。同时发现通过修改orb特征参数能够比较好的避免丢失的状态(或者是丢失后更加容易重定位)。并且调试了各种orb参数来对比效果
第三组的内容:
本项目以建立一个无人机-手机联通的SLAM系统为目标,分别搭建了手机端的ORB SLAM软件以及PC端的运行环境,同时为了完成对目标的检测在PC端配置了deep learning的环境,也对DJI Spark小型无人机的视频输出进行了处理。在对设备进行标定之后,分别实现了手机端ORBslam的正常运行,可以明显看到手机位姿的变化。PC端的单目以及AR模式在实验室具体环境下的运行,验证了ORBSLAM的relocalization以及loop closure的功能,在AR模式下也能很好的运作。最后对视频流中的图像通过deep learning进行识别,遗憾的是这几个分离的小框架由于硬件设备和时间限制的原因并没有很好的连接在一起,与预期目标有一定的差距。
第四组的内容:
本次课设基于ORB-SLAM开源代码,实现了3D点云实时建图。具体实现思路如下:利用实验室现有的相机Multisense S7,得到环境的RGB图像和深度图。根据ORB-SLAM的RGBD接口实现相机姿态的估计和优化,并实时建立稀疏的特征地图用来后期定位使用。利用ORB-SLAM中的关键帧信息,将对应的深度图像按相机的姿态进行拼接,得到环境的3D点云图。后期对拼接的3D点云进行滤波以剔除孤立点和多视角下的重合冗余部分。根据需要,将3D点云地图转化为更加灵活、方便使用的八叉树地图。八叉树地图表达了空间被占用的概率,可以为移动机器人导航和避障提供环境信息。
第五组的内容:(优秀)
本课程设计首先针对ORB SLAM进行源码分析,在一些公开的数据集上进行了实验测试,ORB SALM是目前框架较为完善的一个slam框架,所有的slam基本上都是在这个框架上进行拓展和应用,首先我们用自己的单目网络摄像头进行实验,容易发生帧丢失,同时单目也存在尺度问题,无法与groundtruth进行对比,在项目快结束时我们发现可以利用imu里程计信息恢复平移尺度,紧接着我们进行双目zed实验,首先我们是采用opencv3.0的方法进行双目标定,发现精度并不是像描述的那么好,后来我们尝试使用zed官方库提供的标定方法,仍然无法满足需求,最后我们尝试着使用RGBD相机,各方面都取得了良好的效果。为了服务与后期的导航与跟踪控制,我们实现了地图存储以及离线地图的导入功能,同时利用关键帧信息结合彩色图、深度图、位姿关系构建全局,其效果相当不错,可以用于将来八叉树地图生成、路径规划。紧接着我们利用深度学习构建语义地图的目标识别和避障,这里我们采用faster-RCNN做目标物的实时检测,其平均精度达到85%以上,这里我们构建了自己的数据集,除ImageNet已有类型,我们添加了杯子、显示器,其检测和分类精度都很好,我们将物体在像素平面的坐标映射到3D空间,并根据位姿关系将其统一到世界坐标系下。由于受限于硬件平台,我们无法在同一台主机上运行,我们采用了ROS、UDP进行双机通信都没有解决问题,同时传输的速率也很慢,每秒只有两到三帧无法满足实时要求。最终我们将整套方案在turtlebot进行实现,采用PD控制实现了turtlebot轨迹跟踪控制,其误差在7cm左右。这个项目是我们三人共同完成,从中得到了很多启发和感想,对我们从事slam研究工作有很大帮助,有了这次经验,任何slam框架基本都能很快上手,实现应用。
第六组的内容:(优秀)
本设计完成的是使用vio进行建图并进行路径规划,首先从vio的研究和应用出发,我们搭建了无人机平台,并在在校园内进行长距离的手持测试,获得相当精确的轨迹信息。随后在室内用vio获得的位姿信息,使飞机按照设定的轨迹飞行,并将运动轨迹与运动捕捉系统做了比较。进一步,我们使用vio的信息建图并进行路径规划,在室内使用vio的里程计信息并结合RGBD相机的图像信息获得周围环境的点云地图,并进一步处理为八叉树地图。使机器人可以在地图中利用rrt路径规划算法获得一条从起始点到目标点的路径,同时在机器人运动过程中,可以检测动态障碍物,实现动态避障,最终使机器人到达目标点。