* modeld: configurable camera offset Negative Values: Shears the image to the left, moving the models center to the Right. Positive Value: Shears the image to the right, moving the models center to the Left. * modeld: camera offset class * verify zero offset I @ A = A * slithered and slunked * Update params_metadata.json * wait * Update model_renderer.py * Update model_renderer.py * requested changes * stricter * Update model_renderer.py * more * return default * Update params_metadata.json * final --------- Co-authored-by: Jason Wen <haibin.wen3@gmail.com>
40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
"""
|
|
Copyright (c) 2021-, Haibin Wen, sunnypilot, and a number of other contributors.
|
|
|
|
This file is part of sunnypilot and is licensed under the MIT License.
|
|
See the LICENSE.md file in the root directory for more details.
|
|
"""
|
|
import numpy as np
|
|
|
|
from openpilot.common.transformations.camera import DEVICE_CAMERAS
|
|
|
|
|
|
class CameraOffsetHelper:
|
|
def __init__(self):
|
|
self.camera_offset = 0.0
|
|
self.actual_camera_offset = 0.0
|
|
|
|
@staticmethod
|
|
def apply_camera_offset(model_transform, intrinsics, height, offset_param):
|
|
cy = intrinsics[1, 2]
|
|
shear = np.eye(3, dtype=np.float32)
|
|
shear[0, 1] = offset_param / height
|
|
shear[0, 2] = -offset_param / height * cy
|
|
model_transform = (shear @ model_transform).astype(np.float32)
|
|
return model_transform
|
|
|
|
def set_offset(self, offset):
|
|
self.camera_offset = offset
|
|
|
|
def update(self, model_transform_main, model_transform_extra, sm, main_wide_camera):
|
|
self.actual_camera_offset = (0.9 * self.actual_camera_offset) + (0.1 * self.camera_offset)
|
|
dc = DEVICE_CAMERAS[(str(sm['deviceState'].deviceType), str(sm['roadCameraState'].sensor))]
|
|
height = sm["liveCalibration"].height[0] if sm['liveCalibration'].height else 1.22
|
|
|
|
intrinsics_main = dc.ecam.intrinsics if main_wide_camera else dc.fcam.intrinsics
|
|
model_transform_main = self.apply_camera_offset(model_transform_main, intrinsics_main, height, self.actual_camera_offset)
|
|
|
|
intrinsics_extra = dc.ecam.intrinsics
|
|
model_transform_extra = self.apply_camera_offset(model_transform_extra, intrinsics_extra, height, self.actual_camera_offset)
|
|
return model_transform_main, model_transform_extra
|