虚拟现实驾驶模拟器
欢迎来到针对行为和交互研究的虚拟现实驾驶模拟器。
该项目扩展了 Carla
模拟器,增加了虚拟现实集成、第一人称可操纵的自我车辆、眼动追踪支持和多种沉浸感增强功能。
如果您有任何疑问,希望我们的常见问题解答 F.A.Q. 维基页面 和 问题页面 可以解答其中的一些问题。
重要提示: 目前 DReyeVR 仅支持 Carla 版本:0.9.13 和 Unreal Engine 4.26
亮点
自我车辆
集成 SteamVR 的完全可驾驶虚拟现实自我车辆(参见 EgoVehicle.h ) - SteamVR HMD 头部跟踪 (朝向 & 位置) - 我们已经使用以下设备进行了测试:
设备 | 虚拟现实支持 | 眼动跟踪 | 操作系统 |
---|---|---|---|
HTC Vive Pro Eye | :white_check_mark: | :white_check_mark: | Windows, Linux |
Quest 2 | :white_check_mark: | :x: | Windows |
- 虽然我们还没有测试其他耳机,但如果 SteamVR 支持,它们仍然可以用于基本的虚拟现实用途(非眼动追踪)。
- 由于我们使用 SRanipal 作为眼动追踪器 SDK,因此眼动追踪目前仅支持 HTC Vive Pro Eye。我们很乐意通过贡献添加其他 SDK 来支持更多设备。
- 车辆控制:
- 通用键盘 WASD + 鼠标
- 使用此开源 LogitechWheelPlugin 支持 Logitech 方向盘
- 包括方向盘的力反馈。
- 我们使用了 Logitech G923 赛车方向盘和踏板
- 虽然我们可以在没有经过测试的情况下保证开箱即用的功能,但是可以在 此处 找到受支持设备的完整列表。
- 逼真的(可参数化的)后视镜和侧视镜
- 警告:非常耗性能
- 车辆仪表板:
- 速度计(默认单位为英里/小时)
- 档位指示器
- 转向信号
- 动力学方向盘
- 可调节参数,响应转向输入
- 请在 此处 查看我们的相关文档
- “以自我为中心”的音频
- 响应式发动机转速(基于油门)
- 转向灯咔嗒声
- 档位切换
- 碰撞
- 与现有的 Carla PythonAPI 和 ScenarioRunner 完全兼容
- 进行了微小修改。请参阅 Usage.md 文档。
- 与 Carla Recorder 和 Replayer 完全兼容
- 能够将控制权移交给/接管 Carla 的 AI 轮式车辆控制器
- 基于 Carla 的语义分割相机(参见
Shaders/README.md
)
自我传感器
与 Carla 兼容的自我车辆传感器(参见 EgoSensor.h )是一种“隐形传感器”,可跟踪以下信息:
- 使用 HTC Vive Pro Eye VR 耳机进行实时眼动跟踪
- 眼动仪数据包括:
- 时间信息(基于耳机、世界和眼动仪)
- 三维眼睛凝视光线(左、右及组合)
- 2D 瞳孔位置(左和右)
- 瞳孔直径(左和右)
- 眼睛睁开度(左和右)
- 世界中的焦点及命中的参与者信息
- 完整列表请参见 DReyeVRData.h:EyeTracker
- 实时眼标线可视化
- 实时用户输入(油门、转向、刹车、转向信号等)
- 基于摄像头的图像(截图)帧捕获
- 由于性能密集程度高,通常用于重播而不是实时。
- 与 LibCarla 数据序列化完全兼容,可流式传输到 PythonAPI 客户端(参见 LibCarla/Sensor )
- 我们还测试并验证了对(
rospy
)ROS 集成传感器数据流的支持
其他补充:
- 用于一次性运行时参数的自定义 DReyeVR 配置文件。请参阅 DReyeVRConfig.ini
- 特别适用于无需重新编译所有内容即可更改参数。
- 使用标准 c++ io 管理来读取文件,对性能的影响最小。请参阅 DReyeVRUtils.h 。
- 世界环境音频
- 鸟鸣声、风声、烟雾声等(参见 interbehavior/Tutorials/Sounds.md )
- 非自我为中心的音频(非自我车辆的发动机转速)
- 同步重放并逐帧捕获以进行事后分析(参见 interbehavior/Usage.md )
- 记录器/重放器媒体功能
- 添加了游戏内键盘命令播放/暂停/前进/后退/等。
- 用于自然导航的静态环境方向标志
- 将天气信息添加到 Carla 记录器/重放器/查询中(参见此 Carla PR )
- 自定义动态 3D 参与者,具有全面录制支持(例如方向的头显指示器、AR 边界框、视觉目标等)。有关更多信息,请参阅 CustomActor.md 。
- (仅调试)注视点渲染可通过注视感知(或固定)可变速率着色来提高性能
安装/构建
查看 interbehavior/Install.md
:
- 在可运行的 Carla
存储库上安装并构建 DReyeVR
。
- 下载 DReyeVR
所需的插件,以实现以下精彩功能:
- 眼动跟踪 (SRanipal)
- 方向盘/踏板 (Logitech)
- 为 DReyeVR PythonAPI 设置 conda
环境
操作系统兼容性
操作系统 | 虚拟现实 | 眼动跟踪 | 音频 | 键盘+鼠标 | 赛车方向盘 | 注视点渲染(编辑器) |
---|---|---|---|---|---|---|
Windows | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: |
Linux | :white_check_mark: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: |
MacOS | :x: | :x: | :white_check_mark: | :white_check_mark: | :x: | :x: |
- 虽然建议使用 Windows(10)来优化虚拟现实支持,但除了眼动跟踪和硬件集成(它们仅依赖于 Windows)之外,我们所有的工作都转移到了 Linux 系统。
- 不幸的是,眼动追踪固件是专有的,无法在 Linux 上运行
- 由于 HTC SRanipal SDK 和 Tobii 的 SDK 之间存在一些专有依赖关系,因此目前仅支持 Windows。对 HTC Vive Pro 眼动追踪的 Linux 讨论感兴趣的人可以关注 此处 (Vive) 、此处 (Vive) 和 此处 (Tobii) 的主题。
- 此外,我们使用的 LogitechWheelPlugin 目前仅支持 Windows。不过,根据 Arch Wiki ,应该可以在 Linux 上使用 G923。
- 此外,尽管 CARLA 并未正式支持 MacOS,但我们在 Apple Silicon 机器上进行了开发,并且拥有 CARLA + UE4.26 的活跃分支,支持 MacOS 12+。请注意,这主要用于开发,因为它是迄今为止最受限制的系统。
在最新的版本上编译
原来适配的虚幻引擎的提交记录只到 Commit d40ec35 。
1.运行DReyeVR/Scripts/install.py
将必要的代码复制到carla目录中;
2.调整代码,比较复杂的是:Unreal/CarlaUE4/Config/DefaultEngine.ini
原始仓库拷贝到目的目录存在Scripts/Paths/DReyeVR.csv
中,
carla\Unreal\CarlaUE4\Source\CarlaUE4\DReyeVR/FlatHUD.h 的结构体HUDLine 和 carla/rpc/DebugShape.h 中的 HUDLine 重命,将其改为 VRLine
为什么不能在头文件定义static变量 可以通过编译,但是使用static定义变量证明该变量的作用域范围仅在该源文件内,其他源文件不能访问。如果在头文件中定义static变量,证明包含了所有这个头文件的源文件都定义了该变量,会造成变量多次定义浪费内存,而且不是真正的全局变量。
参考链接 解决静态方法在其他文件中找不到的问题。 Unreal/CarlaUE4/Plugins/Carla/Source/Carla/Sensor/V2X/CaService.cpp 导入.cpp文件
carla\LibCarla\source\carla\streaming\detail\tcp/ServerSession.h中的
template <typename... Buffers>
static auto MakeMessage(Buffers... buffers) {
static_assert(
are_same<BufferView, Buffers...>::value,
"This function only accepts arguments of type BufferView.");
return std::make_shared<const Message>(buffers...);
}
注释掉 carla\Unreal\CarlaUE4\Source\CarlaUE4\DReyeVR中的:
Replayer->Restart();
Replayer->Advance(1.0);
Replayer->Advance(-1.0);
DReyeVRGameMode.cpp.obj : error LNK2019: 无法解析的外部符号 "public: void __cdecl CarlaReplayer::Restart(void)"
执行生成交通报错:
Assertion failed!
Program:...4\Plugins\Carla\BinarieslWin64\UE4Editor-Carla.dllFile: D:\workworkspacelcarlalLibCarlalso...ServerS..ion.cppLine: 106
Expression: (bytes)==(sizeof(message_size_type) +message->size())
carla\LibCarla\source\carla\streaming\detail\tcp\ServerSession.cpp
中的这一行报错:
DEBUG_ASSERT_EQ(bytes, sizeof(message_size_type) + message->size());
文档 & 指南
使用方法: 直接启动:车辆控制(带声音)、带参数启动原始模式
- 请参阅
F.A.Q. wiki
,了解我们的常见问题 wiki 页面。 - 请参阅
Install.md
来安装和构建 DReyeVR - 请参阅
Usage.md
了解如何使用我们提供的 DReyeVR 功能 - 请参阅
Development.md
以开始 DReyeVR 开发并添加新功能 - 请参阅
interbehavior/Tutorials/
查看多个 DReyeVR 教程,例如自定义 EgoVehicle、添加自定义标志/道具等。 - 功能实现分析参阅 链接 。
引用
如果你想使用该工作,请参考对应的 论文:
- 此 repo 包含来自 Hewlett-Packard Development Company, LP 的一些代码。请参阅 nvidia.ph 。