|
|
|
@ -3,10 +3,10 @@ import os |
|
|
|
|
import zmq |
|
|
|
|
import cv2 |
|
|
|
|
import copy |
|
|
|
|
import math |
|
|
|
|
import json |
|
|
|
|
import numpy as np |
|
|
|
|
import selfdrive.messaging as messaging |
|
|
|
|
from selfdrive.locationd.calibration_values import Calibration, Filter |
|
|
|
|
from selfdrive.swaglog import cloudlog |
|
|
|
|
from selfdrive.services import service_list |
|
|
|
|
from common.params import Params |
|
|
|
@ -17,8 +17,6 @@ from common.transformations.camera import view_frame_from_device_frame, get_view |
|
|
|
|
eon_intrinsics, get_calib_from_vp, normalize, denormalize, H, W |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
MIN_SPEED_FILTER = 7 # m/s (~15.5mph) |
|
|
|
|
MAX_YAW_RATE_FILTER = math.radians(3) # per second |
|
|
|
|
FRAMES_NEEDED = 120 # allow to update VP every so many frames |
|
|
|
|
VP_CYCLES_NEEDED = 2 |
|
|
|
|
CALIBRATION_CYCLES_NEEDED = FRAMES_NEEDED * VP_CYCLES_NEEDED |
|
|
|
@ -42,12 +40,6 @@ c_code += "\n" + open(os.path.join(EXTERNAL_PATH, "get_vp.c")).read() |
|
|
|
|
ffi, lib = ffi_wrap('get_vp', c_code, c_header) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Calibration: |
|
|
|
|
UNCALIBRATED = 0 |
|
|
|
|
CALIBRATED = 1 |
|
|
|
|
INVALID = 2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def increment_grid_c(grid, lines, n): |
|
|
|
|
lib.increment_grid(ffi.cast("double *", grid.ctypes.data), |
|
|
|
|
ffi.cast("double *", lines.ctypes.data), |
|
|
|
@ -131,8 +123,8 @@ class Calibrator(object): |
|
|
|
|
|
|
|
|
|
def update(self, uvs, yaw_rate, speed): |
|
|
|
|
if len(uvs) < 10 or \ |
|
|
|
|
abs(yaw_rate) > MAX_YAW_RATE_FILTER or \ |
|
|
|
|
speed < MIN_SPEED_FILTER: |
|
|
|
|
abs(yaw_rate) > Filter.MAX_YAW_RATE or \ |
|
|
|
|
speed < Filter.MIN_SPEED: |
|
|
|
|
return |
|
|
|
|
rot_speeds = np.array([0.,0.,-yaw_rate]) |
|
|
|
|
uvs[:,1,:] = denormalize(correct_pts(normalize(uvs[:,1,:]), rot_speeds, self.dt)) |
|
|
|
|