Skip to content

Commit

Permalink
添加传感器示例
Browse files Browse the repository at this point in the history
  • Loading branch information
nongfugengxia committed Jun 12, 2024
1 parent 8d1283f commit f628309
Show file tree
Hide file tree
Showing 7 changed files with 1,107 additions and 13 deletions.
16 changes: 8 additions & 8 deletions docs/ref_sensors.md
Original file line number Diff line number Diff line change
Expand Up @@ -782,14 +782,14 @@ raw_image.save_to_disk("path/to/save/converted/image",carla.cityScapesPalette)

---

## DVS 相机
## 动态视觉传感器相机

* __蓝图:__ sensor.camera.dvs
* __输出:__ 每步 [carla.DVSEventArray](python_api.md#carla.DVSEventArray) (除非`sensor_tick`另有说明)。

动态视觉传感器或事件相机是一种工作方式与传统相机完全不同的传感器。事件相机不是以固定速率捕获强度图像,而是以事件流的形式异步测量强度变化,对每个像素的亮度变化进行编码。与标准摄像机相比,事件摄像机具有独特的属性。它们具有非常高的动态范围(140 dB 与 60 dB)、无运动模糊和高时间分辨率(微秒级)。因此,事件相机是即使在具有挑战性的高速场景和高动态范围环境下也能提供高质量视觉信息的传感器,为基于视觉的算法提供了新的应用领域。
[动态视觉传感器](https://baike.baidu.com/item/%E5%8A%A8%E6%80%81%E8%A7%86%E8%A7%89%E4%BC%A0%E6%84%9F%E5%99%A8/23490201) (Dynamic Vision Sensor, DVS)或事件相机是一种工作方式与传统相机完全不同的传感器。事件相机不是以固定速率捕获强度图像,而是以事件流的形式异步测量强度变化,对每个像素的亮度变化进行编码。与标准摄像机相比,事件摄像机具有独特的属性。它们具有非常高的动态范围(140 dB 与 60 dB)、无运动模糊和高时间分辨率(微秒级)。因此,事件相机是即使在具有挑战性的高速场景和高动态范围环境下也能提供高质量视觉信息的传感器,为基于视觉的算法提供了新的应用领域。

DVS 摄像机输出事件流。当对数强度的变化达到预定义的恒定阈值(通常在 15% 到 30% 之间)时,在时间戳处的像素处`e=(x,y,t,pol)`触发事件。
动态视觉传感器摄像机输出事件流。当对数强度的变化达到预定义的恒定阈值(通常在 15% 到 30% 之间)时,在时间戳处的像素处`e=(x,y,t,pol)`触发事件。

``
L(x,y,t) - L(x,y,t-\delta t) = pol C
Expand All @@ -799,19 +799,19 @@ L(x,y,t) - L(x,y,t-\delta t) = pol C

![DVSCameraWorkingPrinciple](img/sensor_dvs_scheme.jpg)

DVS 摄像机的当前实现在两个连续同步帧之间以统一采样方式工作。因此,为了仿真真实事件相机的高时间分辨率(微秒级),传感器需要以高频率执行(比传统相机的频率高得多)。实际上,Carla 汽车行驶速度越快,事件数量就会增加。因此,传感器频率应随着场景的动态而相应增加。用户应该在时间精度和计算成本之间找到平衡。
动态视觉传感器摄像机的当前实现在两个连续同步帧之间以统一采样方式工作。因此,为了仿真真实事件相机的高时间分辨率(微秒级),传感器需要以高频率执行(比传统相机的频率高得多)。实际上,Carla 汽车行驶速度越快,事件数量就会增加。因此,传感器频率应随着场景的动态而相应增加。用户应该在时间精度和计算成本之间找到平衡。

提供的脚本[`manual_control.py`]使用 DVS 摄像头来展示如何配置传感器、如何获取事件流以及如何以图像格式(通常称为事件框架)描述此类事件。
提供的脚本 [`manual_control.py`](https://github.com/OpenHUTB/carla_doc/blob/master/src/examples/manual_control.py) 使用动态视觉传感器摄像头来展示如何配置传感器、如何获取事件流以及如何以图像格式(通常称为事件框架)描述此类事件。

[manual_control]: https://github.com/carla-simulator/carla/blob/master/PythonAPI/examples/manual_control.py

请注意,由于 DVS 摄像机的采样方法,如果两个连续同步帧之间没有像素差异,摄像机将不会返回图像。这总是发生在第一帧中,因为没有前一帧可供比较,并且在帧之间没有移动的情况下也是如此。
请注意,由于动态视觉传感器摄像机的采样方法,如果两个连续同步帧之间没有像素差异,摄像机将不会返回图像。这总是发生在第一帧中,因为没有前一帧可供比较,并且在帧之间没有移动的情况下也是如此。

![DVSCameraWorkingPrinciple](img/sensor_dvs.gif)

DVS 是一个相机,因此具有 RGB 相机中可用的所有属性。然而,事件摄像机的工作原理几乎没有什么独有的属性。
动态视觉传感器是一个相机,因此具有 RGB 相机中可用的所有属性。然而,事件摄像机的工作原理几乎没有什么独有的属性。

#### DVS 相机属性
#### 动态视觉传感器相机属性

| 蓝图属性 | 类型 | 默认 | 描述 |
| ---------------------- | ---------------------- | ---------------------- | ---------------------- |
Expand Down
1 change: 1 addition & 0 deletions src/examples/manual_control.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
#!/usr/bin/env python
# 参考:https://github.com/marcgpuig/carla_py_clients/blob/master/imu_plot.py

# Copyright (c) 2019 Computer Vision Center (CVC) at the Universitat Autonoma de
# Barcelona (UAB).
Expand Down
10 changes: 5 additions & 5 deletions src/examples/rgb_camera_example.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@


def initialize_world(args):
"""Create world instance and create/retrieve hero actor"""
"""创建世界实例并创建/获取英雄参与者"""
client = carla.Client(args.host, args.port)
carla_world = CarlaWorld(client)
if args.map:
Expand Down Expand Up @@ -182,10 +182,10 @@ def dvs_callback(data: carla.Image, data_dict: dict):
)
sensor_data = setup_callbacks(camera_dict)

# OpenCV named window for display
# OpenCV 窗口中显示的名字
cv2.namedWindow("All cameras", cv2.WINDOW_AUTOSIZE)

# Tile all data in one array
# 在一个数组中平铺所有的数据
top_row = np.concatenate(
(sensor_data["rgb_image"], sensor_data["sem_image"], sensor_data["inst_image"]),
axis=1,
Expand All @@ -200,13 +200,13 @@ def dvs_callback(data: carla.Image, data_dict: dict):
)
tiled = np.concatenate((top_row, lower_row), axis=0)

# Display with imshow
# 使用 imshow 函数显示
cv2.imshow("All cameras", tiled)
cv2.waitKey(1)

try:
while True:
# Tile camera images into one array
# 将相机图像平铺进一个数组
top_row = np.concatenate(
(
sensor_data["rgb_image"],
Expand Down
Loading

0 comments on commit f628309

Please sign in to comment.