{ "cells": [ { "cell_type": "markdown", "id": "0a5575ba", "metadata": {}, "source": [ "# Sensors\n", "\n", "[![Click and Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/metadriverse/metadrive/blob/main/documentation/source/sensors.ipynb)\n", "\n", "\n", "Sensors are important for collecting information about surroundings.\n", "By default, all environments provide 3 basic sensors:\n", "\n", "- Lidar\n", "- SideDetector\n", "- LaneLineDetector\n", "\n", "which are used for detecting moving objects, sidewalks/solid lines, and broken/solid lines respectively.\n", "As these sensors are built based on ray test and don't need graphics support, they can be used in all modes.\n", "Also, you don't need to recreate them again, as they are not binded with any objects until `perceive()` is called and the target object is specified. After collecting results, those ray-based sensors are detached and ready for next use.\n", "\n", "You can access them at anywhere through the `engine.get_sensor(sensor_id)`:" ] }, { "cell_type": "code", "execution_count": 1, "id": "d07cb731-8a81-4fbe-827e-1ca2d4b150e8", "metadata": { "tags": [] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Available sensors are: dict_keys(['lidar', 'side_detector', 'lane_line_detector'])\n" ] } ], "source": [ "from metadrive.envs.base_env import BaseEnv\n", "\n", "env = BaseEnv(dict(log_level=50))\n", "env.reset()\n", "\n", "lidar = env.engine.get_sensor(\"lidar\")\n", "side_lidar = env.engine.get_sensor(\"side_detector\")\n", "lane_line_lidar = env.engine.get_sensor(\"lane_line_detector\")\n", "print(\"Available sensors are:\", env.engine.sensors.keys())\n", "\n", "env.close()" ] }, { "cell_type": "markdown", "id": "d33b3e7a-223a-4a89-bb9d-040f3c233adc", "metadata": {}, "source": [ "## Add New Sensor\n", "To add new sensors, you should request them by using `env_config`.\n", "If an sensor is defined as follows:\n", "```python\n", "class MySensor(BaseSensor):\n", "\n", " def __init__(self, args_1, args_2, engine)\n", "```\n", "Then we can create it by:\n", "```python\n", "env_cfg = dict(sensors=dict(new_sensor=(MySensor, args_1, args_2)))\n", "env = MetaDriveEnv(env_cfg)\n", "```\n", "The following example shows how to create a RGBCamera whose buffer size are width=32, height=16.\n", "**Note: for creating cameras or any sensors requiring rendering, please turn on `image_observation`**." ] }, { "cell_type": "code", "execution_count": 2, "id": "425d66f9-118f-4b91-a343-ef1385281ba8", "metadata": { "tags": [ "skip_execution" ] }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Available sensors are: dict_keys(['lidar', 'side_detector', 'lane_line_detector', 'rgb'])\n" ] } ], "source": [ "from metadrive.envs.base_env import BaseEnv\n", "from metadrive.component.sensors.rgb_camera import RGBCamera\n", "import cv2\n", "import os\n", "size = (256, 128) if not os.getenv('TEST_DOC') else (16, 16) # for github CI\n", "\n", "env_cfg = dict(log_level=50, # suppress log\n", " image_observation=True,\n", " show_terrain=not os.getenv('TEST_DOC'),\n", " sensors=dict(rgb=[RGBCamera, *size]))\n", "\n", "env = BaseEnv(env_cfg)\n", "env.reset()\n", "print(\"Available sensors are:\", env.engine.sensors.keys())\n", "cam = env.engine.get_sensor(\"rgb\")\n", "img = cam.get_rgb_array_cpu()\n", "cv2.imwrite(\"img.png\", img)\n", "\n", "env.close()" ] }, { "cell_type": "code", "execution_count": 3, "id": "1dd842e2-c89f-4715-af17-4a2d00f7bdd9", "metadata": { "tags": [ "skip_execution" ] }, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from IPython.display import Image\n", "Image(open(\"img.png\", \"rb\").read())" ] }, { "cell_type": "markdown", "id": "a15f6912-500b-433e-a69a-74660028b3d6", "metadata": {}, "source": [ "The log message shows that not only the `rgb` is created, but a `main_camera` is provided automatically, which is also an RGB camera rendering into the pop-up window. It can serve as a sensor as well." ] }, { "cell_type": "markdown", "id": "8caacfa8-0d10-4dc2-8a6c-494dc7524b0d", "metadata": { "tags": [] }, "source": [ "## Graphics-based Sensors\n", "\n", "We provide the following sensors:\n", "\n", "* Main Camera\n", "* RGB Camera\n", "* Depth Camera\n", "* Semantic Camera\n", "* Instance Camera\n", "* Lidar (Cloud Point)\n", "\n", "The following example mainly uses the semantic camera, but the same method can be applied to other sensors including the point cloud." ] }, { "cell_type": "markdown", "id": "e4a9ad44-4beb-473d-9870-dcb76be25643", "metadata": {}, "source": [ "### Using semantic camera as observation" ] }, { "cell_type": "code", "execution_count": 8, "id": "fda11246-5c14-44ed-8e20-b6054940b51e", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "{'image': (128, 256, 3, 3), 'state': (19,)}\n" ] } ], "source": [ "from metadrive.envs import MetaDriveEnv\n", "from metadrive.component.sensors.semantic_camera import SemanticCamera\n", "import matplotlib.pyplot as plt\n", "import os\n", "\n", "size = (256, 128) if not os.getenv('TEST_DOC') else (16, 16) # for github CI\n", "\n", "env = MetaDriveEnv(dict(\n", " log_level=50, # suppress log\n", " image_observation=True,\n", " show_terrain=not os.getenv('TEST_DOC'),\n", " sensors={\"sementic_camera\": [SemanticCamera, *size]},\n", " vehicle_config={\"image_source\": \"sementic_camera\"},\n", " stack_size=3,\n", "))\n", "obs, info = env.reset()\n", "for _ in range(5):\n", " obs, r, d, t, i = env.step((0, 1))\n", "\n", "env.close()\n", "\n", "print({k: v.shape for k, v in obs.items()}) # Image is in shape (H, W, C, num_stacks)" ] }, { "cell_type": "code", "execution_count": 10, "id": "450f8f1a-c062-4d1f-953d-cee030617bf2", "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 10, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "plt.subplot(131)\n", "plt.imshow(obs[\"image\"][:, :, :, 0])\n", "plt.subplot(132)\n", "plt.imshow(obs[\"image\"][:, :, :, 1])\n", "plt.subplot(133)\n", "plt.imshow(obs[\"image\"][:, :, :, 2])" ] }, { "cell_type": "markdown", "id": "e57901be-8953-4b50-9a91-c79aad9d4f92", "metadata": {}, "source": [ "### Retrieve semantic images" ] }, { "cell_type": "code", "execution_count": 1, "id": "2df2fb16-8252-493c-b8f7-fc643dbd21b9", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Available sensors are: dict_keys(['lidar', 'side_detector', 'lane_line_detector', 'sementic_camera'])\n" ] }, { "data": { "image/png": "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", "text/plain": [ "" ] }, "execution_count": 1, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from metadrive.envs import MetaDriveEnv\n", "from metadrive.component.sensors.semantic_camera import SemanticCamera\n", "import cv2\n", "import os\n", "size = (256, 128) if not os.getenv('TEST_DOC') else (16, 16) # for github CI\n", "\n", "env = MetaDriveEnv(dict(\n", " log_level=50, # suppress log\n", " image_observation=True,\n", " show_terrain=not os.getenv('TEST_DOC'),\n", " sensors={\"sementic_camera\": [SemanticCamera, *size]},\n", " vehicle_config={\"image_source\": \"sementic_camera\"}\n", "))\n", "env.reset()\n", "print(\"Available sensors are:\", env.engine.sensors.keys())\n", "cam = env.engine.get_sensor(\"sementic_camera\")\n", "img = cam.get_image(env.agent)\n", "cv2.imwrite(\"semantics.png\", img)\n", "\n", "env.close()\n", "\n", "from IPython.display import Image\n", "Image(open(\"semantics.png\", \"rb\").read())" ] }, { "cell_type": "markdown", "id": "fc44367c-90e9-4e70-b8fb-41788205e2e0", "metadata": {}, "source": [ "### Demo on RGB camera" ] }, { "cell_type": "code", "execution_count": null, "id": "5ca9f335-a128-4767-b2d2-813968e43b96", "metadata": {}, "outputs": [], "source": [ "from metadrive.envs.base_env import BaseEnv\n", "from metadrive.component.sensors.rgb_camera import RGBCamera\n", "import cv2\n", "import os\n", "size = (256, 128) if not os.getenv('TEST_DOC') else (16, 16) # for github CI\n", "\n", "env_cfg = dict(log_level=50, # suppress log\n", " image_observation=True,\n", " show_terrain=not os.getenv('TEST_DOC'),\n", " sensors=dict(sementic_camera=[RGBCamera, *size]))\n", "\n", "env = BaseEnv(env_cfg)\n", "env.reset()\n", "print(\"Available sensors are:\", env.engine.sensors.keys())\n", "cam = env.engine.get_sensor(\"sementic_camera\")\n", "img = cam.get_rgb_array_cpu()\n", "cv2.imwrite(\"semantics.png\", img)\n", "\n", "env.close()\n", "\n", "from IPython.display import Image\n", "Image(open(\"semantics.png\", \"rb\").read())" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.13" }, "mystnb": { "execution_mode": "force" } }, "nbformat": 4, "nbformat_minor": 5 }