# 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