构建一个楼层导航 :给定任意房间号码,系统将使用A*算法进行路径规划,并通过MPC导航到达该位置
我们项目的核心想法是设计一个机器人,能够接收电子与通信工程系三楼任意房间号的输入,并从SE423实验室(3080)出发前往该房间。本项目包含将整个楼层的地图系统集成进来,并实现平面图与真实空间之间的坐标转换。我们采用A*算法,从起始房间(3080)到用户指定的目的地之间规划一系列路径点。这些路径点通过运行在机器人树莓派上的网络界面/路径规划器进行设定,可帮助可视化机器人所走的路径以及是否成功到达各目标点。路径生成完成后,路径点会被发送至红板上的状态机,由MPC服务器解析处理,该服务器负责在各个路径点之间导航以及避障。
总体而言,我们的项目取得了成功,并让我们充分掌握了本学期所学的许多基本技术,将其扩展到更复杂的逻辑、状态机以及与更多组件的集成。在遇到坐标变换、信号量错误、数据管理等问题时,我们得以练习并提升了解决问题和调试的能力。我们成功地将所有组件整合起来,最终开发出一个机器人,能够通过障碍物碰撞实现最小偏差地导航至指定房间,但偶尔会遇到超出激光雷达传感器范围的物体导致运行异常的情况。
组件
预测控制模型
通过模型预测控制(MPC)实现了机器人在动态环境中的实时导航。MPC是本应用的理想控制器选择,因为它能够预测到达目标点以及遇到的障碍物时应采取的操作。MPC通过实时求解一个优化问题来实现这一目标,通常为二次规划(QP)。在满足多个约束条件(包括初始条件、控制器范围,以及最重要的是系统的线性化动力学)的前提下,最小化一个二次成本函数。将最小化过程限制在系统动力学范围内,可生成在给定预测时间窗口内动态可行的轨迹,但通常仅使用该窗口内的第一个控制输入进行控制。由于我们使用计算能力较低的树莓派,因此当问题求解耗时过长时,会缓存窗口内最多三个控制输入。此外,在成本函数中增加了一个额外项:与激光雷达检测到的五个最近障碍物之间的距离成反平方关系的项。该功能使计划的视野范围在生成接近障碍物的大量成本时,不会向空间中的空旷区域添加错误的成本。总体而言,MPC 主要是一个通信问题,因为它需要将激光雷达扫描数据、当前机器人姿态以及启用或禁用标志发送到控制器,并从控制器接收优化后的控制输入。
映射
为了生成传递给A*算法的地图,我们编写了一个脚本来处理三楼的平面图。首先,该脚本加载一张灰度黑白的平面图图像,并将其转换为二值地图,使墙壁和空地清晰分离。接着,我们使用NumPy根据像素是黑色还是白色来判断哪些方格可通行、哪些不可通行。然后,将像素转换为英尺单位,使图像中的距离与真实世界距离相对应。最后,脚本在墙壁周围添加了一层缓冲区,使其尺寸比实际更大。这可以补偿机器人的宽度,并为路径增加一定的容差。
A*
我们使用的A*算法是一种八方向的A*算法,能够返回x、y坐标的最优路径。在ECEB中给定一个有效的房间编号后,该算法可以找到从实验室房间到达该目的地的最优路径。这些x、y坐标被称为航点(waypoints),也是MPC用来设定导航目标的位置依据。整个过程中的A*算法均在离线状态下完成,因为如果在线运行,会导致与控制机器人(MPC)之间的数据传输过载。最初,由于地图数组将每个像素表示为0.205英尺,A*路径算法会返回数百个航点。为避免发送大量航点,通过过滤机制解决了这一问题:当x轴或y轴方向发生微小变化时,该航点会被添加到返回列表中。这样一来,最终返回的航点数量从数百减少到了几十个。
状态机
状态机决定何时将机器人移动到下一个航点。在主情况1中,我们更新vref和turnref,并计算机器人与当前航点之间的欧几里得距离。如果机器人与航点的距离达到0.3英尺,就会切换到情况30,此时将航点递增至下一个位置并关闭MPC。关闭MPC是为了防止机器人过度补偿以到达航点,否则可能导致机器人来回摆动。一旦移动到下一个航点后,系统会返回情况1,此时MPC会重新校准以适应新的目标。
网页界面
运行在树莓派上的网络界面,负责管理我们的Astar路径规划代码与红板之间的连接,同时提供房间导航控制的用户界面以及路径和导航的可视化功能。
网页界面负责在提供房间编号后调用AStar路径规划器进行管理。获取路径规划器返回的航点后,Web服务器负责将这些航点传输到红板上。为此,我们以“数据包”的形式逐个发送每个航点。首尾航点会被标记,以便红板能按顺序依次填充数组。为减少数据包丢失,每个航点会发送三次。红板仅会一次性填充数组中的每个航点,而三次发送则是为了冗余,以防其中某个航点被丢弃。
最后,网络服务器的用户界面会显示所有房间及其编号的地图,并与路径规划器进行匹配。当用户输入房间编号后,系统会将信息发送至红色指示板,路径随即在屏幕上显示。
本文编译自hackster.io





