|  |  |  | #pragma once
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <array>
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const int  TRAJECTORY_SIZE = 33;
 | 
					
						
							|  |  |  | const int LAT_MPC_N = 16;
 | 
					
						
							|  |  |  | const int LON_MPC_N = 32;
 | 
					
						
							|  |  |  | const float MIN_DRAW_DISTANCE = 10.0;
 | 
					
						
							|  |  |  | const float MAX_DRAW_DISTANCE = 100.0;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | template<typename T_SRC, typename  T_DST, size_t size>
 | 
					
						
							|  |  |  | const std::array<T_DST, size> convert_array_to_type(const std::array<T_SRC, size> &src) {
 | 
					
						
							|  |  |  |   std::array<T_DST, size> dst = {};
 | 
					
						
							|  |  |  |   for (int i=0; i<size; i++) {
 | 
					
						
							|  |  |  |     dst[i] = src[i];
 | 
					
						
							|  |  |  |   }
 | 
					
						
							|  |  |  |   return dst;
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const std::array<double, TRAJECTORY_SIZE> T_IDXS = {
 | 
					
						
							|  |  |  |         0.        ,  0.00976562,  0.0390625 ,  0.08789062,  0.15625   ,
 | 
					
						
							|  |  |  |         0.24414062,  0.3515625 ,  0.47851562,  0.625     ,  0.79101562,
 | 
					
						
							|  |  |  |         0.9765625 ,  1.18164062,  1.40625   ,  1.65039062,  1.9140625 ,
 | 
					
						
							|  |  |  |         2.19726562,  2.5       ,  2.82226562,  3.1640625 ,  3.52539062,
 | 
					
						
							|  |  |  |         3.90625   ,  4.30664062,  4.7265625 ,  5.16601562,  5.625     ,
 | 
					
						
							|  |  |  |         6.10351562,  6.6015625 ,  7.11914062,  7.65625   ,  8.21289062,
 | 
					
						
							|  |  |  |         8.7890625 ,  9.38476562, 10.};
 | 
					
						
							|  |  |  | const auto T_IDXS_FLOAT = convert_array_to_type<double, float, TRAJECTORY_SIZE>(T_IDXS);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | const std::array<double, TRAJECTORY_SIZE> X_IDXS = {
 | 
					
						
							|  |  |  |          0.    ,   0.1875,   0.75  ,   1.6875,   3.    ,   4.6875,
 | 
					
						
							|  |  |  |          6.75  ,   9.1875,  12.    ,  15.1875,  18.75  ,  22.6875,
 | 
					
						
							|  |  |  |         27.    ,  31.6875,  36.75  ,  42.1875,  48.    ,  54.1875,
 | 
					
						
							|  |  |  |         60.75  ,  67.6875,  75.    ,  82.6875,  90.75  ,  99.1875,
 | 
					
						
							|  |  |  |        108.    , 117.1875, 126.75  , 136.6875, 147.    , 157.6875,
 | 
					
						
							|  |  |  |        168.75  , 180.1875, 192.};
 | 
					
						
							|  |  |  | const auto X_IDXS_FLOAT = convert_array_to_type<double, float, TRAJECTORY_SIZE>(X_IDXS);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifdef __cplusplus
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "selfdrive/common/mat.h"
 | 
					
						
							|  |  |  | #include "selfdrive/hardware/hw.h"
 | 
					
						
							|  |  |  | const mat3 fcam_intrinsic_matrix =
 | 
					
						
							|  |  |  |     Hardware::EON() ? (mat3){{910., 0., 1164.0 / 2,
 | 
					
						
							|  |  |  |                               0., 910., 874.0 / 2,
 | 
					
						
							|  |  |  |                               0., 0., 1.}}
 | 
					
						
							|  |  |  |                     : (mat3){{2648.0, 0.0, 1928.0 / 2,
 | 
					
						
							|  |  |  |                               0.0, 2648.0, 1208.0 / 2,
 | 
					
						
							|  |  |  |                               0.0, 0.0, 1.0}};
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // without unwarp, focal length is for center portion only
 | 
					
						
							|  |  |  | const mat3 ecam_intrinsic_matrix = (mat3){{620.0, 0.0, 1928.0 / 2,
 | 
					
						
							|  |  |  |                                            0.0, 620.0, 1208.0 / 2,
 | 
					
						
							|  |  |  |                                            0.0, 0.0, 1.0}};
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | static inline mat3 get_model_yuv_transform(bool bayer = true) {
 | 
					
						
							|  |  |  |   float db_s = Hardware::EON() ? 0.5 : 1.0; // debayering does a 2x downscale on EON
 | 
					
						
							|  |  |  |   const mat3 transform = (mat3){{
 | 
					
						
							|  |  |  |     1.0, 0.0, 0.0,
 | 
					
						
							|  |  |  |     0.0, 1.0, 0.0,
 | 
					
						
							|  |  |  |     0.0, 0.0, 1.0
 | 
					
						
							|  |  |  |   }};
 | 
					
						
							|  |  |  |   return bayer ? transform_scale_buffer(transform, db_s) : transform;
 | 
					
						
							|  |  |  | }
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 |