1.规划控制之轨迹拼接
2.Ubuntu20+ROS+px4 无人机仿真环境——环境搭建
3.NAV2-Velocity Smoother 速度平滑器理解
4.2021 开源驾驶仿真平台测评
规划控制之轨迹拼接
自动驾驶系统中,轨迹规划轨迹规划planning模块输出轨迹信息作为control模块输入。源码源码这些信息包括一系列点的下载位置(x, y, θ)、曲率(κ)、轨迹规划轨迹规划时间(t)、源码源码速度(v)和加速度(a)。下载水晶源码control模块频率通常高于planning频率,轨迹规划轨迹规划因此,源码源码平滑的下载轨迹转换至关重要以避免控制抖动。
规划起点的轨迹规划轨迹规划选取直接影响控制稳定性。通常,源码源码一些同学可能直接使用当前车辆位置作为起点。下载理论上,轨迹规划轨迹规划如果控制跟踪和定位完美,源码源码这种方法可行。下载然而,实践中,由于各种定位误差和控制误差/滞后问题的累积,使用当前位置作为起点会导致控制抖动。
考虑如图所示的情况。pos_last为上一帧车辆的实际位置,红线为规划轨迹。在下一帧,车辆移动到pos_cur,若规划起点选择pos_cur,轨迹终点保持不变,规划的轨迹变为蓝色曲线。两条曲线在起点附近存在差异,这将引起控制抖动,导致轨迹不连续。
此外,使用实际位置作为起点还可能导致车辆发散,跟踪误差逐渐增加,偏离初始参考线。以一维速度跟踪为例,假设当前为减速过程。如果使用上一帧的实际速度规划减速曲线,经过一帧,由于实际速度跟踪或解算存在误差,目标速度m/s变为m/s;使用实际速度作为起点,下一帧将按照m/s速度重规划轨迹;若目标速度进一步变为m/s,实际自车将加速,而非预期的系统官网源码减速效果。
引入实际速度导致了这一问题,实际速度包含了跟踪误差和定位误差。如果以实际速度重规划,可能导致误差进一步发散,产生相反效果。因此,规划起点在允许的跟踪误差范围内不应选择实际位置。
理想的实践方式是,在终点(参考线)不变的情况下,无障碍等场景下,规划输出的轨迹线保持不变(至少位置不变)。在经过一帧后,从pos_last到pos_cur,为了保证轨迹连续性,当前帧规划起点应选择在last_traj与pos_cur最近的投影点上,一般需增加dt的向前预测量。得到投影点信息后,即可规划出与上一帧轨迹完全重合的cur_traj曲线。即使当前位置不在轨迹上,但连续性得到保证,使得控制连贯,避免了跳变。
在设置pos_cur和投影点的偏差阈值时,若两者距离过大,说明控制难以跟上规划轨迹。此时,应考虑实际位置进行进一步规划。例如,设定阈值为cm,当车辆位置距离轨迹线cm时,可将起点设定为离投影点cm的位置。这样做主要是为了避免使用投影点规划导致的控制超调,从而产生更大的轨迹偏差。
基于Python的简单实现展示了轨迹拼接算法。实际工程实现时,方法类似,可参考Apollo源码。轨迹规划使用样条曲线设计。初始时,设置起点和终点信息,计算三阶样条曲线系数,规划出S型曲线last_traj。抽象话生成源码经过一帧,车辆从pos_last移动到pos_cur,在红色last_traj曲线上求得最近点作为当前帧规划起点,终点仍为设定值,使用三阶样条曲线求系数,得到蓝色的cur_traj。last_traj和cur_traj高度重合,实现了上下帧轨迹间的无缝衔接。在实际应用中,需要考虑时间、速度等维度的信息,但该方法的思想保持一致。
Python源码如下:
Ubuntu+ROS+px4 无人机仿真环境——环境搭建
Ubuntu+ROS+px4 无人机仿真环境搭建教程
本文旨在引导你搭建一个高效验证无人机轨迹规划和控制算法的仿真环境,我们将逐步构建基础环境并验证算法效果。首先,让我们来了解环境搭建的三个关键步骤。环境搭建步骤
1. 安装ROS Noetic: Ubuntu .对应的ROS版本为Noetic,建议在安装前设置终端代理以避免网络问题。以下是简要步骤:
换源并更新源
设置ROS源和密钥
安装curl(如需)
选择安装全功能包ros-noetic-desktop-full
设置环境变量和rosdep
进行简单测试
2. PX4环境安装: 包括下载编译px4源码、安装mavros和qground。参考详细的安装教程,注意px4和相关软件的安装路径。
3. 显卡驱动: 如果Gazebo运行卡顿,可能是缺少显卡驱动,参考相关链接进行安装。可能需要在恢复模式下进行驱动管理。
以上步骤完成后,你将拥有一个适合验证无人机控制算法的仿真环境。后续文章将深入探讨轨迹规划和控制算法的实现与测试。祝你搭建顺利!NAV2-Velocity Smoother 速度平滑器理解
NAV2 Velocity Smoother 是一个用于平滑由 NAV2 框架发送给机器人控制器速度的功能包。主要目的是通过平滑加速减少机器人电机和硬件控制器的磨损。平滑处理包括对速度、加速度和死区的控制。个人理解其核心功能有以下几点:
1. 确保发布的速度在容许的速度区间内。
2. 保证指令速度与机器人当前速度所计算得到的加速度在容许的区间内。
3. 在[x, y, theta]坐标轴上考虑同比例变化。
4. 考虑闭环控制,通过使用 odometry 数据来保证平滑过程的准确性。
Velocity Smoother 参数设定如下:
1. **smoothing_frequency**:设置平滑频率(Hz),决定如何使用最后接收到的速度命令进行速度、加速度和死区约束的易支付2020源码平滑处理。根据局部轨迹规划器的速率调整平滑效果,设置较高频率时进行插值并提供平滑的硬件控制命令。
2. **scale_velocities**:是否按照同比例调整其他速度组件,以适应加速限制带来的变化。确保所有组件方向一致,同时严格遵守加速限制,即使这意味着稍微偏离命令轨迹。
3. **feedback**:使用当前状态反馈,OPEN_LOOP 模式下使用上一次发布的速度作为当前速度,适合开环控制;CLOSED_LOOP 模式下使用 odometry 信息估计速度,要求 odometry 高速率低延迟。
4. **max_velocity**:在[x, y, theta]轴上的最大速度。
5. **min_velocity**:在[x, y, theta]轴上的最小速度,且为负值,表示逆向。
6. **deadband_velocity**:发送给硬件控制器的最小速度,防止由于无法达到该速度而损坏硬件控制器的情况。
7. **velocity_timeout**:速度接收的超时时间,即原始速度接收频率。
8. **max_accel**:每个轴[x, y, theta]上的最大加速度。
9. **max_decel**:每个轴[x, y, theta]上的最小减速度,应为负值。
. **odom_topic**:用于闭环控制的 odometry 主题。
. **odom_duration**:在闭环模式下,缓冲 odometry 命令以估计机器人速度的时间。
源码注解涉及的主要函数为 void VelocitySmoother::smootherTimer(),该函数接收由局部路径规划器或运动控制器发布的速度指令,并发布经过平滑处理后的速度。
开源驾驶仿真平台测评
终于,在沉迷论文之外,我开始上手生疏了快一年的实验和代码。一个萌新,空降驾驶决策方向,除了真车以外,最大的吸引力必然来自驾驶仿真器了。想想吧,每天的工作仿佛像是在给GTA V写合法外挂,心不心动?因此,尽管学长们安利了CARLA,但是,既然电脑装得下,我还是乐清麻将花源码决定要把近几年新出的仿真器全试一试,再决定用最好的那个。
作为一个贫穷的研究人员,我心目中理想的驾驶仿真器是这样的(优先度排列):
描绘出理想的模样,就该开始找候选人了。《年自动驾驶仿真蓝皮书》基本把现有的驾驶仿真器都列举了一遍,经过快速的检查,首先排除以下商业仿真平台:
CarSim, CarMaker, Cognata, rFpro, VTD, AAI, TAD Sim (腾讯,未找到开放网址), Metamotor (年被收购), GaiA, Sim-One, PanoSim, Parallel Domain (这个的demo是真的好看), CarCraft (Waymo内部使用,不对外开放), VI-WorldSim, PTV Vissim
许愿一个大佬测评以上软件,如果大家众筹让我测评也不是不可以(手动狗头)。
顺带一体,所有基于GTA V的仿真器似乎在几年前已经被R星叫停了,考虑到版权因素,应该在有发表需求的研究里是不能用了(但私底下谁不想拿它玩一玩呢)。
在剔除了海量精美的付费软件之后,清单上剩余的免费/开源仿真器就屈指可数了。
接下来,将从应用场景,用户体验,安装难易度等方面对这些软件进行测评,部分仿真器提供视频展示(流量预警)
测试环境:Ubuntu . + CUDA .2 + NVIDIA Driver ..
硬件配置:i9-X CPU + GB RAM + RTX Super GPU (8GB)
警告 CARLA
仿真器简介:Carla是一个开源的驾驶仿真器,由C++ 和虚幻引擎构成。通常适用于驾驶决策仿真任务。可输出的数据模态包括图像,激光雷达,雷达,语义,GPS,IMU等,可自由配置。
安装指南: CARLA Simulator
Carla官方的安装文档已经非常成熟了,如果只是运行仿真器,下载可运行程序就够了。想自己折腾的就从源码开始编译,我写文章的时候0.9.还不够稳定,推荐0.9.,无脑跟教程走只会遇到一个bug。就是make build的时候libboost目前调用的是1..0版本:
首先,你需要手动下载boost-1..0的压缩包;其次,如果你在编译过程中遇到了什么字符相关的库找不到的报错,可能是因为boost-1..0某些版本中这个悲伤的bug导致的,就是自定义的函数命名和默认C语言库起了冲突(大致是这个原理,具体细节还请放过一个三年没写C的孩子)。处理方法要参考 这里,解压boost-1..0,将自定义的string.h 和调用这个库的所有地方改成其他名字,然后再打包,扔到/Build 下面;最后,记得在/Util/BuildTools/setup.sh 的对应行进行修改,以防build过程中自动删了你改过的包。
如果是走Linux Build路线又想要可直接运行的./CarlaUE4.sh,在make launch成功后跑一下make package就行了。这一个细节不知道为什么官方文档上写得不是特别清楚,可能是他们觉得太简单,我们可以自行领悟吧。
用户体验:
在体验完一圈驾驶仿真器之后,看到CARLA我真是感动得泪流满面,简直是出走后四处碰壁的游子回到了温暖的家。经典果然还是经典,CARLA的动力学仿真确实是所有仿真器中最正常的,天气系统和NPC的行为也非常正常,应该是一直在优化的。基本上驾驶决策常用的数据模态都有提供(事件相机和红外相机没有,这是AirSim的独门绝技),获取也很方便,总之一句话,赞美CARLA。
仿真器展示:
SUMO
仿真器简介:SUMO 全称 Simulation of Urban MObility,是一个开源的驾驶仿真器,主要用于交通流仿真,也可用于车间通讯仿真、验证交通模型等任务。
安装指南:sudo apt-get install sumo sumo-doc sumo-tools
仿真器部分功能展示:
最开始,看到这个软件简陋的界面时,我以为大概没什么好说的,然而,很快,我看到了前人的SUMO使用心得。对不起,是我头抬得太高了。
SUMO仿真文档_妈妈说不要造轮子-CSDN博客
SUMO使用技巧_妈妈说不要造轮子-CSDN博客
由于SUMO的仿真任务和我没有太大关联,而且仿真大程度上依赖于用户自己导入的数据,而我手头暂时没有,所以就放一张从 OpenStreetMap导入到SUMO的地图吧~
看起来很简陋?放大地图后,每个路口的细节都标注得一清二楚。我开始心动了。
而从年开始,CARLA开始支持和SUMMO,VISSIM 联合仿真。我觉得自己好了,自己行了,下一期测评就它吧(如果没有教程的话可以考虑写一版了)。
MATLAB - 自动驾驶工具包 & RoadRunner
码着,过两周有空再写。计划要用RoadRunner和CARLA快乐联动,不过好像地图太大会导入事故,反正卫星先放着。
LGSVL
仿真器简介:这是由LG公司基于Unity开发的驾驶仿真器。适用于驾驶决策任务。输出的数据模态包括图像,激光雷达,雷达,语义,GPS,IMU等,可以通过json文件自由配置。
安装指南: Installation procedure - SVL Simulator
确认配置符合要求之后,直接下载即可。Linux下记得右键性质,允许程序运行。
用户体验:
从可视化交互界面来说,LGSVL是做的最好的。一键变天,一键加传感器,包括上传代码,全部可以在网页界面完成。但是呢,车的动力学着实有点迷惑,您的车是完全没有摩擦力的吗?按下前进键之后,即使松开,地面也仿佛没有摩擦力一般,车辆会一直保持匀速前进。但是如果想用这个仿真器来做模仿学习,录入数据大概会很痛苦。点云的仿真很有问题,肉眼可见的有误差。npc也是非常迷惑,比如,骑自行车的人比开车的还快;过马路的时候只要绿灯了,npc车辆就直接从npc附近碾过去。而目前还没有提供改npc的接口。此外,目前提供的地图还太少了。如果再过几年,可能会成长成一个厉害的仿真平台,目前只能持观望态度了。
Apollo
仿真器简介:由百度-阿波罗开发的驾驶仿真平台。少数既可以在线仿真,也可以自己电脑安装运行的仿真器。适用于驾驶规划仿真,路径预测等任务。
安装流程:
用户体验:
革命尚未成功,同志仍需努力。离成为一款成熟的仿真器,Apollo还有很长时间要走。官方提供的场景比较少,大型地图屈指可数,文档支持也不够完善。封装得比较严实,不过改地图,放npc的自由设置空间还是有的。再过几年,还是有潜力成长成一个优秀的仿真器的。
仿真器展示:
AirSim
仿真器简介:由微软开发的仿真器,基于虚幻引擎。主要面向无人机仿真,也提供了驾驶仿真的接口。适用于驾驶决策仿真任务。输出的数据模态包括GPS,IMU,RGB图像,深度图,语义分割,红外相机,事件相机,点云(需要额外配置)。
安装指南: Welcome to AirSim
用户体验:
这款仿真器更适合Windows系统用户。Github上提供的地图适用于驾驶仿真的寥寥无几,而虽然AirSim可以从 Unreal Engine Market中获取更多可用于自动驾驶的地图,其中绝大多数都只兼容Windows,最终导致在Linux中适用于自动驾驶任务的只有一款非洲大草原。
仿真器展示 启动任意地图都会加载setting.json 文件的配置,子窗口的内容需要按0 才会显示。
SUMMIT
论文: SUMMIT: A Simulator for Urban Driving in Massive Mixed Traffic
适用任务:驾驶决策仿真
输出数据:RGB图像,点云,深度图,语义分割,碰撞判定等,CARLA有的它都有。
安装指南: Ubuntu .安装基于CARLA的SUMMIT无人驾驶仿真平台
不建议在.上安装,可能会因为clang版本出现大问题。Ubuntu ./.挺好的。
用户体验:
在测评开始之前,我期望值最高的一款仿真器就是SUMMIT,按照论文所宣称的,这是“CARLA的改进版“,”能够模拟更为复杂的交通情况“,”利用SUMO轻松导入世界地图“。而实际情况呢?这款软件很大程度上照搬了CARLA 0.9.8,对应了两年前的UE4.,这一前置条件已然导致了虚幻引擎在现有的Ubuntu上闪退概率更高。而在我千辛万苦装上之后,原创的demo程序一个也跑不起来,根据写得奇烂无比的官方文档——我第一次看到民间教程能比官方写得更详细靠谱的,只能模模糊糊猜它的地图导入方法——依旧繁琐复杂。最终,不祥的预感在我查到了论文的发表时间时达到了顶峰,年ICRA accept,大概从投稿之后,作者就没有再积极地维护过整个路径,最新的更新(.)只是改了改依赖的SUMO版本和PythonAPI中的小细节。可以看出,作者根本没有随着引擎更新和CARLA更新进度改进仿真器的动力。对于任何试图长期使用这款仿真器的人来说,这都是一个危险的信号。
Udacity
Term 1 - 车道保持;Term 2 - 轨迹定位 & 追踪;Term 3 - 高速场景下的轨迹规划。
适用任务:驾驶决策任务体验与教学
安装指南:
如果顺利的话,会看到这样的界面,选择分辨率和画质,然后就能开始仿真了。
用户体验:
作为一款和在线课程绑定的驾驶仿真平台,Udacity的优点和缺点都很明显:安装最为方便快捷,几乎对电脑配置没有要求。另一方面,场景少得可怜,动力学模拟差到悲伤。只适合用于了解自动驾驶决策模型的设计原理和流程,无法实际应用。
此外,Udacity有一个致命问题,它在Ubuntu下并不稳定。我是并行安装所有平台的,结果刚打开最先安装好的Udacity,它就快乐地崩了,电脑重启,我+GB的内容全部得重新下载(╯-_-)╯╧╧
TORCS
适用任务:驾驶决策任务体验与教学
仿真器简介:TORCS本职是一款游戏,但是优秀的前辈们通过各种蛇皮操作,让它同样可以应用于驾驶仿真中。最开始,我对TORCS非常嫌弃,这都年了,怎么还有人会用这种分辨率的软件。但是,考虑到现实中,很多本科生是买不起显卡的,而这是为数不多不需要显卡就能跑的仿真器,还拥有过相当大的用户基数和多样的地图库,所以,对于特定人群来说,这个仿真器恐怕还是无可替代的。
安装流程: Ubuntu.搭建 TORCS无人驾驶训练 开发环境
gcc版本如果太高会编译失败,我用gcc-5过了,注意,Ubuntu .不支持低于gcc-7的版本。
仿真器展示: