常见问题
DReyeVR 安装和使用的大多数问题都列在这里。如果这份文档不是最新的,请查看我们的 GitHub 问题 页面,如果你遇到新的问题,可以创建一个新问题。
什么是自车和自车传感器?
我们使用自车的概念来区分 AI 控制的车辆和玩家驾驶的车辆。当你第一次启动 VR 驾驶时,你会在世界中生成一辆车,这就是自车(EgoVehicle)。
除了“EgoVehicle”之外,我们还使用一种名为 EgoSensor 的组件(即“DReyeVR-sensor”);该组件继承自 Carla 传感器 ,但具备专为 DReyeVR 设计的特性。EgoSensor 负责追踪多种数据,包括用户输入(键盘/鼠标/方向盘)、VR 头显(HMD)的朝向与位置(6 自由度)、第一人称视角的摄像机画面,以及眼动追踪传感器的数据。EgoSensor 所使用的底层数据结构定义在 DReyeVRData.h 文件中,具体位于 DReyeVR::AggregateData 结构体内。
EgoVehicle 是由玩家控制的车辆,而 EgoSensor 是一个包含我们关注并需实时追踪的所有 DReyeVR 核心数据的传感器。
DReyeVR 中支持哪些 Carla 功能?
由于 DReyeVR 的 EgoVehicle 继承自 ACarlaWheeledVehicle,大多数标准的 Carla 车辆功能均可直接使用。我们需要修改记录与回放模块,以确保 EgoSensor 的各项功能(如头戴式显示器(Head-Mounted Display, HMD)位置/旋转、眼动追踪数据、用户输入等)都能被准确地记录和回放。
然而,VR 驾驶贯穿始终的一个主要假设是:场景中同一时刻仅存在一辆“自车”(EgoVehicle)。这是因为每辆自车都会占用 VR 头显(HMD)系统和眼动追踪器资源,且属于开销极大的参与者(例如涉及实时后视镜渲染)。因此,我们不允许通过 Python API 生成新的自车参与者;若需访问自车,我们已通过 DReyeVR_utils.py 提供了一种实现机制,具体如下:
from DReyeVR_utils import find_ego_vehicle
...
world = client.get_world()
...
DReyeVR_vehicle = find_ego_vehicle(world)
支持的 Carla 功能汇总。
| 功能 | 是否支持 | 笔记 |
|---|---|---|
| 键盘手动控制 | √ | |
| 方向盘手动控制 | ✓ | |
| 世界的记录/回放 | ✓ | |
| EgoSensor 的记录/回放 | ✓ | 专为 DReyeVR 设计 |
| EgoSensor PythonAPI 流式传输 | ✓ | 专为 DReyeVR 设计 |
| 在运行时切换地图 | ✓ | |
| 改变天气 | ✓ | |
| 生成自车(EgoVehicle) | × | 理应已在地图中生成。具备持久性。 |
| 销毁自车(EgoVehicle) | × | 在地图上应始终保持活跃。具备持久性。 |
| EgoVehicle Carla AI 自动驾驶 | ✓ | |
ScenarioRunner --route |
✓ | 我们迄今为止使用 ScenarioRunner 的方式 |
ScenarioRunner --scenario |
× | 尚未实现 |
ScenarioRunner --agent |
× | 尚未实现 |
有哪些 Python API 脚本已在 DReyeVR 上进行了测试?
以下 Python API 脚本已通过测试,应能与 DReyeVR 配合使用:
| 脚本 | 是否支持 | 笔记 |
|---|---|---|
| DReyeVR_AI.py | ✓ | 使用 DReyeVR 自动驾驶功能的示例 |
| DReyeVR_logging.py` | ✓ | 实时记录 VR 驾驶的 EgoSensor 数据 |
| schematic_mode.py | ✓ | 类似于 no_rendering_mode.py,但增加了眼动追踪(EyeTracker)可视化功能。 |
scenario_runner.py --route |
✓ | |
scenario_runner.py --scenario |
× | 未实现 |
scenario_runner.py --agent |
× | 未实现 |
| show_recorder_collisions.py | ✓ | |
| show_recorder_file_info.py | ✓ | |
| start_recording.py | ✓ | |
| start_replaying.py | ✓ | |
| dynamic_weather.py | ✓ | |
| no_rendering_mode.py | 有点 | 应该改用 schematic_mode.py,这是我们针对 no_rendering_mode.py 封装的 DReyeVR 接口。 |
| show_recorder_actors_blocked.py | 有点 | |
| automatic_control.py | × | 使用 DReyeVR_AI.py |
| client_bounding_boxes.py | 有点 | |
| draw_skeleton.py | 有点 | |
| generate_traffic.py | 有点 | |
| lidar_to_camera.py | 有点 | |
| manual_control.py | × | 通常无需此操作,手动控制是通过服务器进行的。 |
| manual_control_carsim.py | × | |
| manual_control_chrono.py | × | |
| manual_control_steeringwheel.py | × | |
| open3d_lidar.py | 有点 | |
| sensor_synchronization.py | 有点 | |
| synchronous_mode.py | 有点 | |
| tutorial.py | × | 生成另一个自车(EgoVehicle) |
| vehicle_gallery.py | × | |
| vehicle_physics.py | 有点 | |
| visualize_multiple_sensors.py | 有点 |
如何更改自车(ego-vehicle)的网格?
目前,我们为自车(EgoVehicle)使用了 Carla 提供的 BP_TeslaM3 网格模型,因为该模型具有高度精细的内部细节,且比例非常适合我们的应用场景。
不过,自车(EgoVehicle)并不非得是特斯拉;事实上,它甚至不必是汽车,完全可以是摩托车手、消防车,或是其他继承自 ACarlaWheeledVehicle 的“参与者”(Actor)。
目前我们还没有关于更换 EgoVehicle 网格的最新文档,但参考我们最初设计 EgoVehicle 并选定网格时的早期配置可驾驶的 VR 玩家的指南 ,应该不难理解其中的操作。由于 AEgoVehicle 是一个基于 C++ 实现的蓝图类,因此任何 Carla 蓝图都可以通过更改父类(reparent)来适配该类,并继承其所有功能。
不过,您需要修改一些针对我们特定网格模型预先设定的默认参数。例如,驾驶员头部位置、方向盘、仪表盘、后视镜等的位置都是相对于网格模型的,因此您需要相应地进行调整。
笔记
与之前的那些教程不同,您无需担心在蓝图中添加 UCameraComponent,因为这已由 DReyeVR_Pawn 处理。
安装 DReyeVR 后,如何修改其文件?
安装 DReyeVR 后(请参阅 make install),相关文件将作为源代码存在于您的 Carla 目录中,并能与 Carla 及 UE4 良好兼容。
您可以查阅我们的 对应关系文件 ,了解 DReyeVR 仓库中的文件在 Carla 仓库中的具体存放位置。
例如,若要编辑 EgoVehicle.cpp 文件,应修改位于 Unreal/CarlaUE4/Source/CarlaUE4/DReyeVR/EgoVehicle.cpp 的文件。请忽略任何中间文件或生成的文件,因为它们本质上属于缓存内容,且会被重新生成。
对于包括 DReyeVR 参数 、PythonAPI 文件、ScenarioRunner 等在内的所有文件,操作流程均相同。
另一种方法是直接修改 DReyeVR 仓库中的文件,然后再次运行 make install 以覆盖旧文件。
遇到罗技硬件问题?
首先,请确认您的罗技赛车硬件是否受我们使用的 LogitechWheelPlugin 支持(支持的设备列表请参见 README 文件)。
确认硬件兼容后,我们建议您使用 Logitech G Hub 并确保操作系统能够检测到您的硬件。
如果您的硬件在 DReyeVR 中出现异常(或完全没有反应),请尝试在 UE4 编辑器中启用 Logitech 详细日志记录模式。具体操作是,将 配置文件 [Hardware] 部分中的 LogUpdates 参数值设置为 True。
在启用详细日志记录的情况下,再次运行 make launch 以在 UE4 编辑器中启动 Carla。依次打开 Window -> Developer Tools -> Output Log,查看该关卡输出的所有日志。运行关卡,并确保打印出了以下字符串之一:
# is detected
Found a Logitech device (XYZ) connected on input 0
# not detected
Could not find Logitech device connected on input 0
建议您查看日志;现在,无论是否检测到状态变化(如按下按钮、旋转轴或踩下踏板),日志都会在每个节拍(更新周期)输出信息。如果系统能检测到这些操作却没有任何响应,请提交 Issue 告知我们 :)
ModuleNotFoundError: No module named 'DReyeVR_utils'
当运行 DReyeVR 专用的 PythonAPI 脚本,且您的 Python 环境无法找到 DReyeVR_utils.py 时,就会出现这种情况。
我们可以通过将 PythonAPI/examples 添加到 PYTHONPATH 来解决这个问题,具体如下:
# 在 Linux/MacOS 上
export CARLA_ROOT=/PATH/TO/carla/
export SCENARIO_RUNNER_ROOT=/PATH/TO/scenario_runner/
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla/dist/carla-0.9.13-py3.7-linux-x86_64.egg
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla/agents
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/examples # <-- 确保包含示例
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI/carla
export PYTHONPATH=$PYTHONPATH:${CARLA_ROOT}/PythonAPI
# 在 Windows x64 Visual C++ Toolset
set CARLA_ROOT=C:PATH\TO\carla\
set SCENARIO_RUNNER_ROOT=C:PATH\TO\scenario_runner\
set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI\carla\dist\carla-0.9.13-py3.7-win-amd64.egg
set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI\carla\agents
set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI\examples # <-- 确保包含示例
set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI\carla
set PYTHONPATH=%PYTHONPATH%;%CARLA_ROOT%\PythonAPI
注意
如果您使用 conda,将这些路径添加到 PYTHONPATH 的方式可能会有所不同。如果是这种情况,请参阅 Install.md#using-conda-for-pythonapi (相关问题:#16)。
make: *** No rule to make target 'install'. Stop.
如果您在 Carla 目录下运行 make install 命令,则很可能出现这种情况。
make install 命令仅在从 DReyeVR 目录调用时才有效。
相关问题:#7。
Assertion failed: px != 0, file shared_ptr.hpp
如果在安装 DReyeVR 后运行 PythonAPI 脚本时未重新执行 make PythonAPI 命令,可能会出现这种情况。
将 DReyeVR 安装到 Carla 后,您还需要重新构建 PythonAPI(此过程也会重新构建 LibCarla),以确保 DReyeVR 与 PythonAPI 之间的兼容功能正常运作。
# 在 Carla 中安装 DReyeVR 之后
cd /PATH/TO/DReyeVR
make install CARLA=/PATH/TO/CARLA SR=/PATH/TO/SR
# 现在回到了 Carla,需要重新构建 PythonAPI 和 CarlaUE4
make PythonAPI && make launch
相关问题:#12
error: invalid command 'bdist_wheel'
当您构建 PythonAPI 且输出包含以下内容时,会出现这种情况:
error: invalid command 'bdist_wheel'
-[BuildPythonAPI]: Carla lib for python has been successfully installed in "..."!
虽然日志 [BuildPythonAPI] 显示"successfuly installed",但这其实是 (carla) 的一个 bug,安装实际上失败了,错误信息如上所述。您应该检查构建日志中是否出现任何错误信息。
(感谢 @SteadyBits 的解答!)您应该确保通过 pip install wheel 安装 wheel 包。您可以检查 PYTHONPATH 来确认 wheel 包是否已安装。
然后,重新构建 PythonAPI (make PythonAPI) 应该会成功,而不会出现error: invalid command的错误信息。
相关问题:#19