| | import cv2 |
| | import torch |
| | import numpy as np |
| | from scipy.spatial.transform import Rotation as SCR |
| | import math |
| | from navsim.common.dataclasses import AgentInput, EgoStatus, Cameras, Camera, Lidar |
| |
|
| | OPENCV2IMU = np.array([[0, 0, 1], [-1, 0, 0], [0, -1, 0]]) |
| | OPENCV2LIDAR = np.array([[1, 0, 0], [0, 0, 1], [0, -1, 0]]) |
| | nusc_cameras = ['CAM_FRONT', 'CAM_FRONT_RIGHT', 'CAM_FRONT_LEFT'] |
| | nuplan_cameras = ["cam_f0", "cam_r0", "cam_l0"] |
| |
|
| | def fov2focal(fov, pixels): |
| | return pixels / (2 * math.tan(fov / 2)) |
| |
|
| | def get_intrinsic(intrin_dict): |
| | fovx, fovy = intrin_dict['fovx'], intrin_dict['fovy'] |
| | h, w = intrin_dict['H'], intrin_dict['W'] |
| | K = np.eye(4) |
| | K[0, 0], K[1, 1] = fov2focal(fovx, w), fov2focal(fovy, h) |
| | K[0, 2], K[1, 2] = intrin_dict['cx'], intrin_dict['cy'] |
| | return K |
| |
|
| | def parse_raw(raw_data): |
| | obs, info = raw_data |
| | |
| | imgs = {} |
| | raw_imgs = {} |
| | |
| | for cam in nusc_cameras: |
| | im = obs['rgb'][cam] |
| | resize_im = cv2.resize(im, (1920, 1080)) |
| | raw_imgs[cam] = im |
| | imgs[cam] = resize_im |
| |
|
| | velo, acc = np.zeros(2), np.zeros(2) |
| | command = np.zeros(4) |
| | |
| | |
| | command[1] = 1 |
| | |
| | ego_pose = OPENCV2IMU @ info['ego_pos'] |
| | |
| | yaw = -info['ego_steer'] |
| | forward_velo = info['ego_velo'] |
| | forward_acc = info['accelerate'] |
| | velo[0] = forward_velo * np.cos(yaw) |
| | velo[1] = forward_velo * np.sin(yaw) |
| | acc[0] = forward_acc * np.cos(yaw) |
| | acc[1] = forward_acc * np.sin(yaw) |
| | ego_status = EgoStatus(ego_pose, velo, acc, command) |
| | |
| | cameras_dict = {} |
| | for nusc_cam, nuplan_cam in zip(nusc_cameras, nuplan_cameras): |
| | cameras_dict[nuplan_cam] = Camera(image=imgs[nusc_cam]) |
| | |
| | cameras = Cameras(*([None] * 8)) |
| | for cam_name, cam in cameras_dict.items(): |
| | setattr(cameras, cam_name, cam) |
| | |
| | lidar = Lidar(np.zeros((6, 100), dtype=np.float32)) |
| | |
| | agent_input = AgentInput([ego_status], [cameras], [lidar]) |
| | |
| | data = { |
| | 'input': agent_input, |
| | 'raw_imgs': raw_imgs, |
| | } |
| |
|
| | return data |
| |
|
| |
|