本文参考资料:
Development Environment (cmu-exploration.com)https://www.cmu-exploration.com/
前言
(以下转载自【泡泡机器人SLAM】微信公众号)
一个机器人要实现“智能”,总是绕不开几个困扰着人类的哲学问题: 我是谁(轮式,足式,空中机器人),我在哪(状态估计),我要到哪里去(任务规划),我该怎么去 (路径规划)。所幸对于机器人来说,解决这几个问题要比人类简单得多。上述问题适用于绝大多数机器人,甚至包括底盘固定的工业机械臂,但在这里我们只讨论移动机器人,以及它们在空间中的智能移动。与时下大火的自动驾驶相比,一个更普遍且更难的问题是如何让机器人在没有人为划分可行驶区域的地方甚至在未知的环境里自主地运动及完成任务。这一问题的解决将有助于真正将机器人技术应用在更复杂的现实世界,包括但不限于物流,农业,勘测,搜救等行业和应用之中。接下来我们将针对这个问题给出我们的思考和解答。
通常来说,移动机器人的“智能”系统包含四个部分(如下图所示):
运动控制(Motion control),状态估计(State estimation),自主导航(Autonomous navigation)和上层规划算法(High-level planning module)。其中运动控制和状态估计分别解答“我是谁”和“我在哪”两个问题,包括控制机器人的移动方式及估计其当前的位置和姿态。对于有着不同运动模式的机器人,比如轮式、足式和空中机器人,其运动控制差别很大。但只要是能支持差动模型(generic differential motion model)的机器人都能使用我们提供的开发平台和算法,包括轮式、履带式,甚至是足式和万向移动底盘。状态估计本身是机器人学科里一个被研究了很长时间的问题,目前也已有相对成熟的定位和建图解决方案。我们开源的系统中不包括状态估计算法,但是给出了一套通用接口和在仿真环境中的模拟输出。用户可以在仿真环境中利用这个模拟输出来开发自己的上层应用。如果想将应用跑在真实的机器人上,只需将硬件平台上的状态估计输出与给定的接口相对应,便能像在仿真环境中一样继续使用我们提供的自主导航和上层规划算法等功能。我们会在文章的结尾给出目前支持的一些主流的状态估计算法和与其对接的方法(教程链接)。自主导航和上层规划算法是我们推出的这个平台的核心,它主要解决两个层次的问题:
● 局部规划:如何安全高效地到达一个近距离目标点;
● 全局规划:如何在没有已知地图的环境里建图和规划长距离路径。
为了方便大家进行移动机器人上层应用算法的开发,我们制作了五个仿真环境,分别对应现实世界中的五种特征突出的环境。此外我们还提供了一些可视化和评估算法性能的工具。
首先介绍一下我们搭建的五种仿真环境,室内环境/校园/停车场/隧道以及森林。在我们最初的开发环境中其实没有这些仿真环境,我们只是使用gazebo中现有的模块实现一些简单的仿真实 验。但是在进行上层算法开发,尤其是后续要说的探索算法时,我们发现很难找到真正符合实际而又足够复杂的仿真环境来进行测试,导致需要花费大量的时间做实验来完善我们的算法。所以我们根据移动机器人适合作业的五种真实环境分别搭建了相应的仿真环境。这些环境可以用来测试机器人的自主导航能力,也可以用来测试上层的规划算法。下面是五种环境各自的图片以及他们相对应的一些典型特征。
● 校园环境(340m*340m): 根据卡内基梅隆大学(Carnegie Mellon University)的部分校园环境重建得到,包含一些上下坡以及盘绕的地形。
● 室内环境(130m*100m): 包含长且窄的走廊以及许多桌子/椅子等障碍物,其中还有一个护栏,由于其中间可以穿透的特性,会对机器人的感知(perception)模块增加挑战性。
● 停车场(140m*130m, 5层): 包含多层楼且有上下坡,会对机器人3D导航任务增加难度。
● 隧道(330m*250m): 错综复杂的隧道构成的一个庞大的网格结构,这个环境来自内华达大学( University of Nevada, Reno) 的Tung Dang。
● 森林(150m*150m): 包含无规律分布的树木以及几栋房子。
当然,我们的开发环境最核心的还是我们推出的一整套自主导航算法,如上面所说的,包括障碍物规避,路径跟随和可行驶区域分析。
障碍物规避是移动机器人实现“智能”必须具备的能力。自有机器人以来这个问题就在被人们研究,但直到最近由于状态估计算法的成熟让机器人对自身状态和对环境有了更精确的感知,才使快速高效的障碍物规避算法成为可能。我们提供的避障算法优势在于能实时高效地应对复杂环境,同时最大化到达目标点的概率。算法的主要思想在于尽可能地让计算在线下完成。具体来说,一个避障算法最耗时的计算一般在于检测机器人在未来时间点与环境发生碰撞的可能。我们的算法先通过离线生成一个庞大的轨迹库(trajectory library)来模拟机器人在未来一段时间内可能走过的轨迹。接下来对于所有轨迹覆盖的空间,我们计算其内部所有点(在一定解析度下)与所有轨迹发生碰撞的可能性。经过这样的离线计算,我们可以得到一个空间内3D点到轨迹的对应关系。在实时运行的过程中,一旦空间内的某个点上有障碍物,我们可以马上知道哪些轨迹将会受到影响。我们的算法会降低选择这些轨迹作为最终路径的可能性。因为大量的计算都在线下进行,线上运行的时候只需要实时选择无碰撞的轨迹,我们的算法可以在几毫秒之内规划出一条无碰撞而最接近目标点的路径。为了便于大家理解,我们截取了一张机器人行进过程中的无碰撞路径的示意图。所有的黄线都是当前时刻机器人周围的无碰撞路径,会导致碰撞的路径因为白色障碍物的影响已经被剔除。在实际的自主导航过程中,我们避障模块接收上层的算法提供的目标点来引导其行驶。如果大家有兴趣,可以参考我们的论文和代码来进一步理解这部分的原理。
可行驶区域(地形)分析是我们提供的开发环境中的另一个亮点。这个模块可以帮助机器人区分可通过和不可通过区域。我们的算法借助一个区域相对于周围区域的高度差来判断一个区域可行驶与否。计算的结果会被存在一个随机器人滚动的局部地图中,以作为更高层的路径规划算法的输入。上面右侧图中,红色的点代表不可通行的区域而绿色点覆盖的区域则代表可通行区域。
如前面所提到的,我们的团队基于这个开发环境开发了一些探索算法。为了能够更好的监测探索过程中机器人的状态以及算法的效果,我们开发了一些可视化的工具,包括显示所使用环境(上述五种环境)的完整点云地图(浅白色点)以及已探索区域的点云地图(蓝色点),机器人的轨迹(彩色曲线)以及绘制机器人行驶距离,已探索区域的体积和规划时间随着时间变化的曲线等。如果是做探索算法的开发,相信这些工具一定能给大家带来一些帮助。而其他的上层算法和应用也能够在这些工具的基础上很简单地开发出适合自己的小工具。
我们推出这个开发环境的目的还是希望帮助更多从事机器人导航和上层算法开发的人快速拥有一个稳定实用且普适性强的仿真和实验的平台,为他们节省更多的时间。本文只是对我们开发环境做了一个简要的介绍,如果真的希望使用我们的开发环境,可以参考我们的详细教程。在这里我们提供了两种教程获取方式,最简单的是访问我们的网站(cmu-exploration.com),上面有很详细的步骤。
安装开发环境:
(以下翻译自Development Environment (cmu-exploration.com))
在安装了Ubuntu20.04、ROS noetic以及Rviz、Gazebo、Mashlab等必须的软件之后,我们就可以开始安装CMU的开发环境了。
1、输入下列命令:
sudo apt update
sudo apt install libusb-dev
2、克隆开源存储库:
git clone https://github.com/HongbiaoZ/autonomous_exploration_development_environment.git
3、在终端中,转到autonomous_exploration_development_environment文件夹并签出与计算机设置匹配的分支,然后编译。
cd autonomous_exploration_development_environment
git checkout noetic
catkin_make
4、运行脚本以下载模拟环境 (~500MB)。这可能需要几分钟时间。
./src/vehicle_simulator/mesh/download_environments.sh
如果脚本未开始下载,用户可以通过Windows下载模拟环境(下方链接),并将文件解压缩到"autonomous_exploration_development_environment/src/vehicle_simulator/mesh"中。
5、启动 ROS 工作区并启动系统:
source devel/setup.sh
roslaunch vehicle_simulator system_garage.launch
此时会加载出地图,用户可以通过单击RVIZ中左上角的"Waypoint"按钮,然后单击一个点来设置航点来发送航点。车辆将导航到航点,避免沿途的障碍物。请注意,航点应可到达且在车辆附近。
存储库包含一组不同类型和规模的模拟环境。要启动具有特定环境的系统,请使用下面的命令行。用环境名称代替'environment',即'campus', 'indoor', 'garage', 'tunnel', 和 'forest'。 现在,用户可以使用RVIZ中的"航点"按钮来导航车辆。要在 Gazebo GUI 中查看环境中的车辆,请在启动文件中设置"gazebo_gui = true",该文件位于"src/vehicle_simulator/launch"中。
roslaunch vehicle_simulator system_environment.launch
//用环境名称代替environment,例如你想打开indoor的环境,那么输入的命令应该是:
roslaunch vehicle_simulator system_indoor.launch
模拟环境保存在"src/vehicle_simulator/mesh"中。'preview'文件夹位于每个环境文件夹中,其中'overview.png'用于快速概述环境,"pointcloud.ply"是带有整体地图的点云。点云可以在3D处理软件中查看,例如CloudCompare和meshlab。需要事先绘制环境地图的自主导航系统也可以利用点云。