干货分享 | 2023最新决策规划控制面试题汇总!

作者 | 深蓝学院  编辑 | 汽车人

原文链接:https://zhuanlan.zhihu.com/p/602319997

点击下方卡片,关注“自动驾驶之心”公众号

ADAS巨卷干货,即可获取

点击进入→自动驾驶之心【规划控制】技术交流群

后台回复【规划控制综述】获取自动驾驶、智能机器人规划控制最新综述论文!

最近一年,深蓝学院与60多家自动驾驶与机器人企业达成了求职招聘的合作,现整理了100余道2022年与2023年的规控面试题,以及相应的解题思路。希望对有志于进入规控岗的同学们有些许帮助。

面试资料包括面试题目、解题思路两部分。受限于篇幅,本文仅仅展示了少部分题目,详细的面试资料请自行获取。

点击链接领取100道面试题及解题思路
https://www.shenlanxueyuan.com/page/160

  1. 请说出几个应用在自动驾驶决策规划中常见的几种非线性优化方法。

  2. Apollo中,参考线是如何获取的?并简述参考线的平滑算法。

  3. 请写出a*算法的伪代码。

  4. 局部路径规划与全局路径规划本质区别是什么?

  5. hybrid A* 算法的原理是什么?和A* 算法相比有哪些改进或者优化?

  6. 介绍下RRT和RRT* 算法,如何进行碰撞检测的,生成的轨迹不满足车辆动力学约束怎么办。

  7. 编程题:一个机器人位于一个m* n网格的左上角,机器人每次只能向下或者向右移动一步,机器人试图到达网格的右下角,请问有多少种不同的路径?

  8. 启发搜索算法中启发式函数有哪些构建方法?如何设计对应的代价函数?

  9. 机器人常用的决策方法你熟悉吗?例如决策树或者状态机或者行为树,能否举例说明一下?

  10. 常用的控制方法都有哪些,能否举例说明?例如pid或者lqr方法。

  11. 常用的全局路径规划方法都有哪些?能否讲一下astar算法的工作流程?

  12. 轨迹插值的中间点如何保证可行?

  13. 对于实际道路上动态障碍物较多的场景,可以采用什么算法进行路径规划?

  14. 在路径规划的应用中,哪些场景中会应用到混合A*算法?

  15. 请用最小二乘法解决以下问题:

1)已知点集P0(x0,y0),P1(x1,y1),…,Pn(xn,yn),请拟合直线y=ax+b,在什么情况下一定会拟合失败?

2)已知点集P0(x0,y0,z0),P1(x1,y1,z1),…,Pn(xn,yn,zn),请拟合平面Ax+By+Cz=0(ABC不同时为0)

参考答案

  1. 请说出几个应用在自动驾驶决策规划中常见的几种非线性优化方法。

常见的非线性优化方法如下:
1.梯度下降法:对目标函数进行一阶泰勒近似。
2.牛顿法:对目标函数进行二阶泰勒近似,需要计算Hessain矩阵。
3.高斯牛顿法:针对最小二乘问题,采用一定的方法对牛顿法中的Hessain矩阵进行近似,从而简化了计算量。
4.列文伯格-马夸尔特法:针对高斯牛顿法的不足,在求解增量时,对其设置了信赖区域;在求得增量对其近似效果进行了量化,并根据量化结果对信赖区域进行调整,再重新计算增量,直到近似效果量化结果达到阈值。

  1. Apollo中,参考线是如何获取的?并简述参考线的平滑算法。

参考线的获取方法:1.创建参考线首先获取routing的消息,然后生成routingsegment,之后结合车辆状态,扩展和分割参考线。2.更新参考线根据是否更新了routing,重新给参考线进行赋值。平滑算法:1.QpSpline Smoother;2.SpiralReferenceLine Smoother;3.DiscretePoints Smoother。

  1. 请写出a*算法的伪代码。

初始化open_set和close_set

  • 将起点加入open_set中,并设置优先级为0(优先级最高);

  • 如果open_set不为空,则从open_set中选取优先级最高的节点n:

  • 如果节点n为终点,则:

  • 从终点开始逐步追踪parent节点,一直达到起点;

  • 返回找到的结果路径,算法结束;

  • 如果节点n不是终点,则:

  • 将节点n从open_set中删除,并加入close_set中;

  • 遍历节点n所有的邻近节点:

  • 如果邻近节点m在close_set中,则:

  • 跳过,选取下一个邻近节点

  • 如果邻近节点m也不在open_set中,则:

  • 设置节点m的parent为节点n

  • 计算节点m的优先级

  • 将节点m加入open_set中

  1. 局部路径规划与全局路径规划本质区别是什么?

全局路径规划和局部路径规划是根据对环境信息获取程度的划分的。在已知环境中的路径规划称为全局路径规划,这是一种事前规划,全局路径规划可以找到最优解,但是其精度需要取决于环境信息的准确度,一旦环境发生变化,而未及时更新地图,该方法就不能达到预期效果。由于环境地图事先已知,所以对系统的实时计算能力要求不高,但是鲁棒性较差。在未知或部分已知的环境中的路径规划称为局部路径规划,系统根据多种传感器实时获取环境障碍物信息, 并作出相应的规划。这就要求系统高速的实时计算和实时处理能力,鲁棒性要比较好。但是由于缺乏全局环境信息,所以规划结果有可能不是最优的,甚至可能找不到正确路径或完整路径。全局路径规划和局部路径规划并没有本质的区别,很多适用于全局路径规划的方法经过改进也可以用于局部路径规划,而适用于局部路径规划的方法同样经过改进后也可适用于全局路径规划。两者协同工作,机器人可更好的规划从起始点到终点的行走路径。

  1. hybrid A算法的原理是什么?和A算法相比有哪些改进或者优化?

混合A是一种图搜索算法,改进于A 算法。其考虑了车辆的运动学约束,即满足车辆的最大曲率约束。
核心在于 结点权重的确定(路径代价的设置)。常用的启发式函数包含:non-holonomic without obstacles 和 holonomic with obstacles

  1. 介绍下RRT和RRT*算法,如何进行碰撞检测的,生成的轨迹不满足车辆动力学约束怎么办。

120877093bfd0e3d57a5dfd29cfb2bf3.png
  1. 编程题:一个机器人位于一个m*n网格的左上角,机器人每次只能向下或者向右移动一步,机器人试图到达网格的右下角,请问有多少种不同的路径?

int uniquePaths(int m, int n) {
        // 每次只能选择向右或者向下, 问一共有多少个可能的路径。
        vector<vector<int>> dp(m ,vector<int>(n, 0));
        for (int j = 0; j < n; j++) {
            dp[0][j] = 1;
        }
        for (int i = 0; i < m; i++) {
            dp[i][0] = 1;
        }
        for (int i = 1; i < m; i++) {
            for (int j = 1; j < n; j++) {
                dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
            }
        }
        return dp[m - 1][n - 1];
    }
  1. 启发搜索算法中启发式函数有哪些构建方法?如何设计对应的代价函数?

对于栅格地图,启发式函数包括以下三种:

定义:dx = abs(node.x - goal.x) , dy = abs(node.y - goal.y)

  1. 曼哈顿距离:只允许上下左右四个方向移动:L = dx + dy

  2. 对角距离:允许想斜边移动:L = dx + dy + (根号2 - 2)* min(dx,dy);

  3. 欧几里得距离:允许朝向任意方向移动 直线距离:L = sqrt(dx * dx + dy * dy)

  1. 机器人常用的决策方法你熟悉吗?例如决策树或者状态机或者行为树,能否举例说明一下?

机器人常见的决策方法如有限状态机模型,通过设置一系列的状态来实现决策。如从启动的初始状态开始,在沿着轨迹行进的过程中,如果识别到障碍物,切换到避障的状态,然后如果通过了障碍物,那么又切换回沿着轨迹行进的状态。

  1. 常用的控制方法都有哪些,能否举例说明?例如pid或者lqr方法。

PID控制:随处可见的控制方法,优点就是控制律简单,易于实现,不用建模;缺点是难以保证机器人具有良好的动态和静态品质,并且需要较大的控制量;自适应控制:根据要求的性能指标与实际系统的性能指标相比较所获得的信息来修正控制规律或控制器参数,使系统能保持最优或次优的工作状态的控制方法。简单的说,就是控制器能及时修正自己的特性以适应控制对象和外部扰动的动态特性变化。鲁棒控制:仅需知道限制不确定性的最大可能性的边界即可,鲁棒控制可同时补偿结构和非结构的不确定性影响。而且鲁棒控制相比自适应控制实现简单,没有自适应律,对时变参数及非结构非线性不确定性的影响有更好的补偿效果,更易于保证稳定性。神经网络和模糊控制:具有高度的非线性逼近映射能力,神经网络和模糊系统可解决复杂的非线性,不确定性及不确知系统的控制,而且可实现对机器人动力学方程中未知部分精确逼近,从而可通过在线建模和前馈补偿,实现机器人的高精度跟踪。迭代学习控制:具有严格的数学描述,适合于解决非线性,强耦合,建模难,运动具有重复性的对象的高精度控制问题。不依赖于系统的精确数学模型,算法简单,机器人轨迹跟踪是其典型代表。变结构控制:通过控制量的切换使变系统状态沿滑模面滑动,本质上是一类特殊的非线性控制,非线性表现为不连续性。滑动模态可以进行设计且与对象参数及扰动无关,所以变结构控制具有快速响应,对参数变化及扰动不领命。

  1. 常用的全局路径规划方法都有哪些?能否讲一下astar算法的工作流程?

A*,RRT,Dijkstra算法。Astar算法工作流程:创建两个集合OPEN集,CLOSED集,算法核心是从OPEN集中选择最优(f值小最优,或f相同时,h小的更优)的节点到CLOSED集中,然后将其后继节点放入OPEN集中,然后重复操作选取最优节点,直到到达目标,或者OPEN为空为止。最后再CLOSED集中根据目标G所包含的前序节点逆序查找最后到达起点S,这个链路的逆序即最优路径。

  1. 轨迹插值的中间点如何保证可行?

根据实际应用对于“平滑”的要求,通常会有以下不同的约束:
1.要求生成的参考曲线是连续的;
2.在1的基础上,要求参考曲线的速度是连续的;
3.在1和2的基础上,要参考曲线的加速度是连续的;
通常情况下,在机器人高速运动的时候,想要得到非常连续、平滑、噪音低的运动控制,第3个约束条件是必不可少的,有的甚至还要求加速度的导数jerk都是连续的。

  1. 对于实际道路上动态障碍物较多的场景,可以采用什么算法进行路径规划?

对于动态障碍物多的情况,通过摄像头和雷达等信息,以及高精地图等进行动态障碍物的轨迹预测,如采用Vectornet或者Chauffernet的算法。采用EMplanner算法,将动态障碍物未来时刻的轨迹投影到sl图中,基于此进行路径的DP和QP,接下来投影到st图中,进行速度的DP和QP,最终得到自车规划的未来时刻轨迹。

  1. 在路径规划的应用中,哪些场景中会应用到混合A*算法?

混合A*的应用包括泊车、取车(例如特斯拉的Smart Summon),也可以用于低速清扫车的运动规划。

  1. 请用最小二乘法解决以下问题:

1)已知点集P0(x0,y0),P1(x1,y1),…,Pn(xn,yn),请拟合直线y=ax+b,在什么情况下一定会拟合失败?

2)已知点集P0(x0,y0,z0),P1(x1,y1,z1),…,Pn(xn,yn,zn),请拟合平面Ax+By+Cz=0(ABC不同时为0)

利用最小二乘法可以实现拟合,如果矩阵A^TA不可逆的情况下一定会拟合失败。  
#include<iostream>  
#include<vector>  
using namespace std;  
struct Param {  
double k;  
double b;  
};  
// cost = sum((yi - k * xi - b)^2)  
// \partial{cost}/\partial{b} = 0  
// \partial{cost}/\partial{k} = 0  
// \partial{ cost } / \partial{ b } = \sum{ 2 * (yi - k * xi - b) } = 0  
// ==> b = mean(y) - k * mean(x)  
// \partial{ cost } / \partial{ k } = \sum{ 2 * (yi - k * xi - b) * (-xi) } = 0
Param get_line(vector<vector<int>> points) {  
double y_sum = 0, x_sum = 0;  
int num_points = points.size();  
for (int i = 0; i < num_points; ++i) {  
y_sum += points[i][1];  
x_sum += points[i][0];  
}  
double y_mean = y_sum / num_points, x_mean = x_sum / num_points;  
double sum1 = 0, sum2 = 0;  
for (int i = 0; i < num_points; ++i) {  
sum1 += (points[i][1] - y_mean) * points[i][0];  
sum2 += (points[i][0] - x_mean) * points[i][0];  
}  
Param res;  
res.k = sum1 / (sum2 + 1e-6);  
res.b = y_mean - res.k * x_mean;  
return res;  
}  
int main() {  
vector<vector<int>> points = { {0,1},{1,2},{2,3},{3,4} };  
Param res = get_line(points);  
cout << res.k << " " << res.b << endl;  
return 0;  
}

(一)视频课程来了!

自动驾驶之心为大家汇集了毫米波雷达视觉融合、高精地图、BEV感知、传感器标定、传感器部署、自动驾驶协同感知、语义分割、自动驾驶仿真、L4感知、决策规划、轨迹预测等多个方向学习视频,欢迎大家自取(扫码进入学习)

4c873808da2f42f9863ab1caf8caa93b.png

(扫码学习最新视频)

视频官网:www.zdjszx.com

(二)国内首个自动驾驶学习社区

近1000人的交流社区,和20+自动驾驶技术栈学习路线,想要了解更多自动驾驶感知(分类、检测、分割、关键点、车道线、3D目标检测、Occpuancy、多传感器融合、目标跟踪、光流估计、轨迹预测)、自动驾驶定位建图(SLAM、高精地图)、自动驾驶规划控制、领域技术方案、AI模型部署落地实战、行业动态、岗位发布,欢迎扫描下方二维码,加入自动驾驶之心知识星球,这是一个真正有干货的地方,与领域大佬交流入门、学习、工作、跳槽上的各类难题,日常分享论文+代码+视频,期待交流!

90c349910e7d0d2c3b0c2b71195a022c.jpeg

(三)自动驾驶之心】全栈技术交流群

自动驾驶之心是首个自动驾驶开发者社区,聚焦目标检测、语义分割、全景分割、实例分割、关键点检测、车道线、目标跟踪、3D目标检测、BEV感知、多传感器融合、SLAM、光流估计、深度估计、轨迹预测、高精地图、NeRF、规划控制、模型部署落地、自动驾驶仿真测试、产品经理、硬件配置、AI求职交流等方向;

3e32563438187ecfb3e7059e61d6e948.jpeg

添加汽车人助理微信邀请入群

备注:学校/公司+方向+昵称

  • 0
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很好,以下是程序员常访问的国外技术交流网站汇总: 1. Stack Overflow:这是最受欢迎的技术问答网站之一,有大量的程序员在这里寻求帮助和提供答案。 2. GitHub:这是一个代码托管平台,许多开源项目都在这里托管,程序员可以在这里学习和贡献代码。 3. Reddit:这是一个社交新闻网站,有各种技术相关的子版块,程序员可以在这里交流和分享经验。 4. Hacker News:这是一个由Y Combinator创办的社区,聚集了许多技术创业者和程序员,讨论各种技术和商业话题。 5. CodePen:这是一个在线代码编辑器,程序员可以在这里创建和分享自己的代码片段,还可以参加各种编程挑战和竞赛。 6. Medium:这是一个博客和内容分享平台,有许多技术作者在这里发布文章和教程,程序员可以在这里学习新技术和分享自己的经验。 7. Dev.to:这是一个由开发者社区创建的博客平台,有许多技术作者在这里发布文章和教程,还可以参与各种讨论和交流。 8. Codecademy:这是一个在线编程学习平台,提供各种编程语言和技术的课程和项目,程序员可以在这里提升自己的技能。 9. Udacity:这是一个在线教育平台,提供各种计算机科学和技术相关的课程和项目,程序员可以在这里深入学习和实践。 10. Coursera:这是一个在线教育平台,提供各种计算机科学和技术相关的课程和项目,还有许多知名大学和企业提供的课程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值