将Coursera官网的self driving car课程的part4的最终编程大作业题目翻译过来,仅供学习参考。
官网作业链接:https://www.coursera.org/learn/motion-planning-self-driving-cars/programming/wiGwg/course-4-final-project
在这个项目中,我们将实现课程4中讨论的行为规划和局部路径规划。该项目的目标是拥有一个功能性的运动规划栈,在跟踪车道的中心线时可以避免静态和动态障碍,同时还处理停车标志。为此,您将必须实施行为规划逻辑以及静态碰撞检查,路径选择和速度曲线生成。
要进行此作业,需要安装CARLA仿真器以及作业的代码(在其中填充你的算法)。请按照以下说明进行操作:
请遵循先前阅读的《 CARLA安装指南》来安装CARLA模拟器。
下载以下“ Course4FinalProject.zip”文件,并将其解压缩到“ CarlaSimulator”(根)文件夹内的子文件夹“ PythonClient”中。这将在“ PythonClient”下创建一个子文件夹“ Course4FinalProject”,其中包含作业文件。
将“ Course4FinalProject.zip”的内容放置在“ PythonClient \ Course4FinalProject ”文件夹(对于Windows)或“ PythonClient / Course4FinalProject ”文件夹(对于Ubuntu)下,这一点非常重要。将其安装到另一个目录可能会导致运行时问题。
成功下载CARLA和评估脚本后,您现在可以开始作业。
在这个项目中,您将编辑“ behavioural_planner.py ”,“ collision_checker.py ”,“ local_planner.py ”,“ path_optimizer.py ”和“ velocity_planner.py ”类文件(下称“中找到PythonClient \ Course4FinalProject ” (对于Windows)或“ PythonClient / Course4FinalProject ”(对于Ubuntu)文件夹)。这是您实施运动计划器的地方。您将需要实现计划程序的5个主要方面,行为规划逻辑,路径生成,静态碰撞检查,路径选择和速度曲线生成。让我们逐一介绍一下这些内容。
在项目的这一部分,您将实现处理停车标志所需的行为逻辑。就像在讲座视频中一样,您将实现一个状态机,当遇到停车标志时,该状态机将在车道跟随,减速到停车标志,保持停止以及在车道跟随之间转换。行为计划者的所有代码都包含在behavioural_planner.py中。
为此,您将首先实现辅助函数get_closest_index()和get_goal_index()。这些将使行为规划器知道它相对于全局路径的位置,并从全局路径计算当前目标点。完成这些操作后,您将实现transition_state()函数,其中包含行为状态机逻辑。有关每个功能的必需详细信息,请参见代码注释。请完成此任务的所有待办事项。
对于项目的路径生成部分,将提供大多数用于生成螺旋路径的数学代码。但是,您将需要使用get_goal_state_set()函数以及一些路径生成辅助函数来计算目标状态集(在规划路径选择之前规划路径的目标点集)。特别是,您将实现thetaf(),该函数在给定螺旋形的一组弧长点上计算汽车的偏航,optimize_spiral(),这将设置给定路径的优化问题。最后,一旦优化完成,将对得到的螺旋线进行采样以生成路径。此功能需要在sample_spiral()中实现。关于每个功能的必需详细信息在文件local_planner.py和path_optimizer.py中的代码注释中给出。
对于运动g规划器的这一部分,我们将编辑collision_checker.py。特别是,我们将使用 collision_check() 函数在计算路径集上实现基于圆的碰撞检查。您将为路径上的每个点实现圆的位置计算。有关更多详细信息,请参阅给定的代码注释。请完成此任务的所有待办事项。
项目的路径选择部分涉及您在生成的路径集上评估目标函数,以选择最佳路径。本部分的目的是消除与静态障碍物碰撞的路径,并选择跟踪全局路径中心线的路径。为了鼓励避开障碍物的鲁棒性,我们还需要添加一个惩罚项,以惩罚规划路径与其他存在静态障碍物碰撞的路径的接近程度。您将在collision_checker.py中的select_best_path_index()函数中实现路径选择。有关更多详细信息,请参阅给定的代码注释。请完成此任务的所有待办事项。
该项目的最后一步是速度曲线生成。该速度规划器不会处理所有边缘情况,但会处理停车标志,前方动态障碍物以及车道保持。所有这些都捕获在velocity_planner.py的compute_velocity_profile()函数中。您将在文件末尾实现物理功能,该物理功能将用于速度规划。有关更多详细信息,请参阅给定的代码注释。请完成此任务的所有待办事项。
完成给定功能的待办事项后,可以在“ module7.py ”中取消注释。完成所有TODO之后,您现在应该准备运行模拟器。
在一个终端(terminal)中,以30hz的固定时间步长启动CARLA模拟器:
Ubuntu:
./CarlaUE4.sh /Game/Maps/Course4 -windowed -carla-server -benchmark -fps=30
Windows:
CarlaUE4.exe /Game/Maps/Course4 -windowed -carla-server -benchmark -fps=30
请注意,如果您发现模拟运行太慢,则可以使用ResX =
在另一个终端中,更改目录以进入“ PythonClient”文件夹下的“ Course4FinalProject”文件夹。
运行控制器,在打开CARLA时执行以下命令:
Ubuntu (如CARLA安装指南中所述,如果以下命令不起作用,请使用其他python命令):
python3 module_7.py
Windows(如CARLA安装指南中所述,如果以下命令不起作用,请使用其他python命令):
python module_7.py
如果module_7.py客户端正确连接到服务器,则模拟器将开始运行。它将打开两个新的反馈窗口(除非禁用live_plotting,有关更多详细信息,请参见下面的“更改实时绘图仪刷新率”部分),其中一个显示自上而下的轨迹,另一个显示控件的反馈。
如果模拟运行缓慢,则可以尝试增加实时绘图仪刷新绘图的时间,或者完全禁用实时绘图。禁用实时绘图或更改其刷新率不会影响模拟结束时的绘图输出。
为此,请编辑“ Course1FinalProject”文件夹中的options.cfg文件以获取相关参数。下表说明了每个选项:
然后,这将开始仿真并运行您开发的Python客户端。一旦结束本场景,Python客户端将输出controller_output / trajectory.txt和controller_output / collision_count.txt。您应该将这两个文件都提交给Coursera进行评分。您将获得生成到目标的无碰撞路径的评分,而在速度和速度方面都不会偏离航路点太大。您还需要在指定的停车区域完全停车,也要在停车标志之前停车。