# pragma once 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <eigen3/Eigen/Dense> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <fstream> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  <memory> 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  <string> 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "cereal/messaging/messaging.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "common/transformations/coordinates.hpp" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "common/transformations/orientation.hpp" 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "common/params.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "common/swaglog.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "common/timing.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "common/util.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								# include  "selfdrive/sensord/sensors/constants.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define VISION_DECIMATION 2 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define SENSOR_DECIMATION 10 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# include  "selfdrive/locationd/models/live_kf.h" 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# define POSENET_STD_HIST_HALF 20 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class  Localizer  { 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								public : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Localizer ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int  locationd_thread ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  reset_kalman ( double  current_time  =  NAN ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  reset_kalman ( double  current_time ,  Eigen : : VectorXd  init_orient ,  Eigen : : VectorXd  init_pos ,  Eigen : : VectorXd  init_vel ,  MatrixXdr  init_pos_R ,  MatrixXdr  init_vel_R ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  reset_kalman ( double  current_time ,  Eigen : : VectorXd  init_x ,  MatrixXdr  init_P ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  finite_check ( double  current_time  =  NAN ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  time_check ( double  current_time  =  NAN ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  update_reset_tracker ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  bool  isGpsOK ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  determine_gps_mode ( double  current_time ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  kj : : ArrayPtr < capnp : : byte >  get_message_bytes ( MessageBuilder &  msg_builder , 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								    bool  inputsOK ,  bool  sensorsOK ,  bool  gpsOK ,  bool  msgValid ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  build_live_location ( cereal : : LiveLocationKalman : : Builder &  fix ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Eigen : : VectorXd  get_position_geodetic ( ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  Eigen : : VectorXd  get_state ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Eigen : : VectorXd  get_stdev ( ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  handle_msg_bytes ( const  char  * data ,  const  size_t  size ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  handle_msg ( const  cereal : : Event : : Reader &  log ) ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  handle_sensor ( double  current_time ,  const  cereal : : SensorEventData : : Reader &  log ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  handle_gps ( double  current_time ,  const  cereal : : GpsLocationData : : Reader &  log ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  handle_car_state ( double  current_time ,  const  cereal : : CarState : : Reader &  log ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  handle_cam_odo ( double  current_time ,  const  cereal : : CameraOdometry : : Reader &  log ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  void  handle_live_calib ( double  current_time ,  const  cereal : : LiveCalibrationData : : Reader &  log ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  void  input_fake_gps_observations ( double  current_time ) ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								private : 
 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : unique_ptr < LiveKalman >  kf ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Eigen : : VectorXd  calib ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  MatrixXdr  device_from_calib ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  MatrixXdr  calib_from_device ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bool  calibrated  =  false ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  double  car_speed  =  0.0 ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  double  last_reset_time  =  NAN ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : deque < double >  posenet_stds ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  std : : unique_ptr < LocalCoord >  converter ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  int64_t  unix_timestamp_millis  =  0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  double  last_gps_fix  =  0 ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  double  reset_tracker  =  0.0 ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  bool  device_fell  =  false ; 
  
						 
					
						
							
								
							 
							
								
									
										 
								
							 
							
								 
							
							
								  bool  gps_mode  =  false ; 
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;