C++责任敏感安全库
目录
简介
该库旨在为自动驾驶车辆提供责任敏感安全(RSS)模型的C++实现。
RSS在以下论文中有详细描述。建议该C++库的潜在用户阅读这些论文,以熟悉库提供的概念和功能。
- 《安全且可扩展的自动驾驶汽车的形式化模型》,S. Shalev-Shwartz, S. Shammah, A. Shashua, Mobileye, arXiv:1708.06374, https://arxiv.org/abs/1708.06374
该库中的RSS模块接收(经处理的)传感器信息作为输入,并提供执行器命令限制作为输出。RSS模块的输入是一个对象列表,包含了自车周围环境中所有对象(道路代理)的信息。对于每个对象,RSS模块创建一个描述对象-自车对及其属性的"情境"。对每种情境,执行相关的RSS安全检查并计算适当的响应。最后,通过结合为每个对象-自车情境计算的响应,得出一个总体响应。最终的执行命令限制以纵向和横向加速度限制的形式作为输出提供。
ad_rss库包含RSS模块的独立C++实现。
- 将自动驾驶传感器数据转换为RSS模块所需的输入对象列表不在ad_rss库的范围内。这包括将笛卡尔世界坐标系中的对象位置和运动转换为基于星座的坐标系。
- 将输出的适当响应和加速度限制转换为实际自动驾驶车辆的执行命令(强制执行限制)不在该库的范围内。这种转换在很大程度上取决于实际(或模拟)车辆的软件和硬件设置。
该RSS C++库的范围、设计和架构在随发布包含的以下文档中有更详细的描述。该文档包括有关RSS库使用及其集成到自动驾驶系统中的指导。强烈建议该库的用户在集成库之前阅读此文档。
将RSS与自动驾驶地图集成
当RSS要集成到更大的系统中时,通常由用户实现根据系统中可用的环境信息提供RSS所需的输入。ad_rss_map_integration库提供了一个将RSS与自动驾驶地图集成的C++实现示例。
ad-rss-lib的使用
如果您在任何出版物中使用ad-rss-lib,请引用IV'2019论文:
@INPROCEEDINGS{
title={Towards Standardization of AV Safety: C++ Library for Responsibility Sensitive Safety}
author={Gassmann, Bernd and Oboril, Fabian and Buerkle, Cornelius and Liu, Shuang and Yan, Shoumeng and Elli, Maria Soledad and Alvarez, Ignacio and Aerrabotu, Naveen and Jaber, Suhel and van Beek, Peter and Iyer, Darshan and Weast, Jack}
booktitle={2019 IEEE Intelligent Vehicles Symposium (IV)}
year={2019}
}
与Python一起使用
从v1.6版本开始,也可以在Python中使用ad-rss-lib库。 更多信息请参见ad_rss的Python绑定文档或ad_rss_map_integration_python。
在CARLA中使用
该库可以与开源驾驶模拟器CARLA一起使用,以研究RSS的行为。以下视频序列展示了第一个版本:
在百度Apollo中使用
此外,该库已集成并在百度的Apollo开放平台中使用:
许可证
该软件库根据LGPL-2.1开源许可证提供:https://opensource.org/licenses/LGPL-2.1。
此外,以下条款也适用: 发布说明和免责声明。
文档
访问项目的GitHub页面以获取该库完整文档的在线版本。其中包括:
如果你还有其他未解答的问题,可以在常见问题中找到更多信息。
发布
一般发布说明和变更可以在更新日志中找到。
4.x.x 版本
这些版本在3.x版本的基础上扩展了非结构化道路和行人的处理。
3.x.x 版本
这些版本改进了2.x版本在场景创建方面的能力。
2.x.x 版本
这些版本通过地图集成扩展了1.x版本,提高了可用性。
1.x.x 版本
RSS的C++软件库的初始版本实现了已发布RSS论文中指定的部分规则和计算。这意味着该版本处理了以下所述的一部分自动驾驶场景。其他场景无法处理。
特性和限制
此版本实现了对应以下场景的RSS计算和规则:
- 多车道道路,即纵向和横向安全距离以及适当响应的确定;
- 交叉路口,即两条或多条不同几何形状的路线,路线交叉的规则,包括优先权/通行权,以及纵向和横向适当响应的确定。但是,在交叉路口的情况下,假设总是存在横向冲突;
- 非结构化道路和行人。
以下RSS部分在此版本的库软件中未实现:
- 遮挡;
- RSS定义的纵向或横向避让机动;
- 没有横向冲突的交叉路口。
注意:此库中的RSS模块不会主动进行避让机动。同时,只要符合所需的RSS适当响应,它不会妨碍AV驾驶策略和规划模块执行的避让机动。
入门
安装依赖项
目前,重点支持的操作系统是Ubuntu 20.04和Ubuntu 22.04。不过,该库应该也能在其他Linux操作系统上以类似方式工作。 要在Ubuntu 20.04/22.04上安装基本依赖项,请执行以下命令:
user$> sudo apt-get install git build-essential cmake libboost-dev libpugixml-dev libgtest-dev libpython-dev libproj-dev
如果你想使用doxygen生成API文档,请也安装:
user$> sudo apt-get install doxygen graphviz
获取库
要下载该库,你可以运行:
user$> git clone https://github.com/intel/ad-rss-lib.git
user$> cd ad-rss-lib
支持的系统
开发系统为Ubuntu 20.04和Ubuntu 22.04 以下编译器和Python组合持续进行测试:
Ubuntu 20.04 | Ubuntu 22.04 | |
---|---|---|
GCC 9 | x | |
Clang 10 | x | |
GCC 11 | x | |
Clang 14 | x | |
Python 3.8 | x | |
Python 3.10 | x | x |
重要提示:cmake版本至少需要3.5!
构建库
请参阅详细的构建说明。
贡献
非常欢迎贡献!
在提交拉取请求之前,请确保你的代码能够成功编译,并且测试能够成功运行。 如果添加了新功能,请也注意添加适当的单元测试。报告的代码覆盖率不应低于80%。
请同时检查你的代码格式是否符合提供的clang样式。为此,你可以运行:
ad-rss-lib$> sudo apt-get install clang-format-14
ad-rss-lib$> find -iname *.cpp -o -iname *.hpp | xargs clang-format-14 -style=file -i
这个命令将自动更新代码格式以符合我们的样式。
此外,如果可能的话,请执行静态代码分析。
ad-rss-lib$> sudo apt-get install clang-tidy
ad-rss-lib$> cmake -DBUILD_STATIC_ANALYSIS=ON
ad-rss-lib$> make clang-tidy
这可能会提供一系列可能的改进建议,你可以考虑在拉取请求中采纳这些建议。