原创: 阿波君 Apollo开发者社区 6月6日
运动规划(Motion Planning)就是在给定的位置A与位置B之间为机器人找到一条符合约束条件的路径。这个约束可以是无碰撞、路径最短、机械功最小等。具体的案例可以是为移动机器人规划出到达指定地点的最短距离,或者是为机械臂规划出一条无碰撞的运动轨迹,从而实现物体抓取等。
基本的运动规划就是在起始构型与目标构型之间找到一条连续运动轨迹,同时避开环境中的障碍物。
上周阿波君为大家详细介绍了「进阶课程⑳Apollo感知之旅——机器学习与感知的未来」。
通过介绍了感知中的机器学习、未来以及课后思考,其中详细的介绍了感知里的机器学习问题,如何应对corner case,除深度学习外、还有其他算法,深度学习+仿真数据+车载Al芯片成为一种趋势,智能交通设施、V2X的普及等知识,还思考了延时是如何来影响自动驾驶安全的,ACC自适应巡航的功能是如何实现的等问题。
本周阿波君将与大家分享Apollo规划技术详解——Basic Motion Planning and Overview。下面,我们一起进入进阶课程第21期。
规划问题本质上是一个搜索问题,即对一个给定的函数,寻找最优解。相对于无人车而言,规划问题就是给定现在的状态,找到无人车移动的最优解。通常最优解目标函数F(x)定义。
从内容考虑,规划问题涉及三个领域,机器人领域,控制领域和人工智能。不同的领域对问题的理解不同。
- robotic fields,规划就是如何产生轨迹以完成目标,涉及RRT, A*,D* lite等。
- 控制领域,规划理解为到达目标状态的动态系统,涉及MPC, LQR等。
- artificial intellegence(AI),是生成状态到动作的映射,涉及reinforcement learning,end-to-end imitation learning等。
从最简单问题出发,把运动规划抽象成一个path finding problem(路径查找问题),只关心无人车怎样走,周围环境是不变的。如图1所示,我们将其抽象成无数的网格,从绿色的点到红色的点的路径规划就是一个path finding problem 。如图想寻找最短路径,可通过广度优先的方法,也可以使用深度优先方法。但是对于最短路径优化问题,深度优先方法的效率太低。
图1 路径查找问题
另外,可以通过启发式方式对搜索问题进行优化。前面的广度优先方法没有利用起点和终点之间的信息,breadth first search(BFS)和 depth first search(DFS)都属于non-information search,问题就在于不知道目标在哪里。A-star算法是大概知道红点在右边,定义一个启发式函数,该函数猜测距离目标还有多远,通过这种方法先搜索一些比较近的点,然后从这个点出发逐渐扩大搜索圈。
图2 A-star算法
A-star花费时间比广度优先算法时间更短,因为它有信息支持,现在的一些路径搜索算法本质上都是从A-star算法出发,需要知道目标函数的样子。
目前,A-star算法还不能直接用在规划模块上,因为A-star算法本身要求对整个环境全知。而自动驾驶对周围环境是部分观察的,如图3所示。红色的点是小车,红色和绿色块是障碍物,对于无人车来说是看不见的,无人车的传感器(雷达、激光雷达、摄像机)系统能部分观察环境。
图3 无人车部分可见动态环境
对于部分观察我们可以使用贪心算法,其实就是一个增量搜索,就是在看见的情况下尽量走好。如图4所示,利用D-star算法对部分观察的数据进行控制规划。它利用当前能够看到的信息进行增量规划,D-star的特点是处理在看到的有限范围的条件下,如何到达预定地点的搜索问题方法。这种增量搜索很难通过一步步的迭代达到全局最优解。
图4 D-star算法
在现实生活中,人类开车是很少做90度直角转弯的,这样的折线并没有考虑无人车运动过程中的运动模型和动力学模型。更进一步,可以通过平滑性曲线的方式来优化折线,换成一些较为平滑的曲线来完成,如图5所示。
图5 曲线平滑
那么,上述介绍的搜索技术离自动驾驶运动规划还差多少?首先是在部分观察空间的动态障碍物,规划模块怎么处理动态障碍物是关键并且是有难度的。其次是自动驾驶汽车能否按照规划的行驶,可能需要一个动态模型。第三还缺少了遵守交通规则,它是道路安全的基本保证,将交通规则融入规划也是一个难点。第四是实时计算,目前来说百度要求规划模块运转周期是100毫秒。
图6 实现自动驾驶还缺什么
图7 自动驾驶运动规划
运动规划问题就是让自动驾驶车辆能够安全平稳到达终点,本质是一个三维规划问题,即 XY 坐标加上时间维度,叫做 3D Trajectory Optimization Problem(轨迹优化问题)。从车辆动力学模型来说,维度需要进一步上升,因为涉及到车头的方向,车的转向角、加速度等问题。
图8 自动驾驶汽车硬件系统
无人车硬件系统除了汽车之外,还涉及很多传感器,传感器感知汽车周围环境,即使是这样也只是部分搜索环境。还有 GPS 接收器可以做定位,以及 IMU 惯性导航系统,如上图所示。
图9 自动驾驶汽车系统软件
如上图所示,运动规划可以获得两部分信息,一部分是动态信息,包括从认知获得的信息,就是从感知模块和定位模块获得信息,另一部分是静态信息,就是高精地图。
图10 无人驾驶系统软件的组成
无人驾驶系统软件包括定位、感知、预测、运动规划和控制等。定位就是知道汽车在哪里。感知即是对周围环境信息的获取。预测就是感知到的障碍物的行进意图,例如旁边有无人超车。运动规划是在知道这些信息后,告知汽车如何运动。控制模块就是得到指令之后如何控制汽车。
图11 规划模块的工作原理
车辆状态、交通灯信息、障碍以及障碍轨迹、导航、高精地图都是规划模块能获得的信息。规划就是在这样的部分可见信息中给无人车找到一条轨迹。它不仅是一条路径,而是随着时间推移路径该怎么走,它包含两方面,一是路径信息,二是速度配置文件,需要保证速度和路径变化都是平滑的。
如图所示,整个规划模块将会介绍以下内容。包括使用的方法、环境认知、所解决的问题、构建运动规划以及如何构建一个通用生态系统。
图12 规划模块的组成