|  |  |  | #ifndef MODEL_H
 | 
					
						
							|  |  |  | #define MODEL_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // gate this here
 | 
					
						
							|  |  |  | #define TEMPORAL
 | 
					
						
							|  |  |  | #define DESIRE
 | 
					
						
							|  |  |  | #define TRAFFIC_CONVENTION
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "common/mat.h"
 | 
					
						
							|  |  |  | #include "common/util.h"
 | 
					
						
							|  |  |  | #include "common/modeldata.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "commonmodel.h"
 | 
					
						
							|  |  |  | #include "runners/run.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include <czmq.h>
 | 
					
						
							|  |  |  | #include <memory>
 | 
					
						
							|  |  |  | #include "messaging.hpp"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define MODEL_WIDTH 512
 | 
					
						
							|  |  |  | #define MODEL_HEIGHT 256
 | 
					
						
							|  |  |  | #define MODEL_FRAME_SIZE MODEL_WIDTH * MODEL_HEIGHT * 3 / 2
 | 
					
						
							|  |  |  | #define MODEL_NAME "supercombo_dlc"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define DESIRE_LEN 8
 | 
					
						
							|  |  |  | #define TRAFFIC_CONVENTION_LEN 2
 | 
					
						
							|  |  |  | #define LEAD_MDN_N 5 // probs for 5 groups
 | 
					
						
							|  |  |  | #define MDN_VALS 4 // output xyva for each lead group
 | 
					
						
							|  |  |  | #define SELECTION 3 //output 3 group (lead now, in 2s and 6s)
 | 
					
						
							|  |  |  | #define MDN_GROUP_SIZE 11
 | 
					
						
							|  |  |  | #define TIME_DISTANCE 100
 | 
					
						
							|  |  |  | #define POSE_SIZE 12
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #define MODEL_FREQ 20
 | 
					
						
							|  |  |  | #define MAX_FRAME_DROP 0.05
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | struct ModelDataRaw {
 | 
					
						
							|  |  |  |     float *path;
 | 
					
						
							|  |  |  |     float *left_lane;
 | 
					
						
							|  |  |  |     float *right_lane;
 | 
					
						
							|  |  |  |     float *lead;
 | 
					
						
							|  |  |  |     float *long_x;
 | 
					
						
							|  |  |  |     float *long_v;
 | 
					
						
							|  |  |  |     float *long_a;
 | 
					
						
							|  |  |  |     float *desire_state;
 | 
					
						
							|  |  |  |     float *meta;
 | 
					
						
							|  |  |  |     float *pose;
 | 
					
						
							|  |  |  |   };
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | typedef struct ModelState {
 | 
					
						
							|  |  |  |   ModelFrame frame;
 | 
					
						
							|  |  |  |   float *output;
 | 
					
						
							|  |  |  |   float *input_frames;
 | 
					
						
							|  |  |  |   RunModel *m;
 | 
					
						
							|  |  |  | #ifdef DESIRE
 | 
					
						
							|  |  |  |   std::unique_ptr<float[]> prev_desire;
 | 
					
						
							|  |  |  |   std::unique_ptr<float[]> pulse_desire;
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | #ifdef TRAFFIC_CONVENTION
 | 
					
						
							|  |  |  |   std::unique_ptr<float[]> traffic_convention;
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | } ModelState;
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void model_init(ModelState* s, cl_device_id device_id,
 | 
					
						
							|  |  |  |                 cl_context context, int temporal);
 | 
					
						
							|  |  |  | ModelDataRaw model_eval_frame(ModelState* s, cl_command_queue q,
 | 
					
						
							|  |  |  |                            cl_mem yuv_cl, int width, int height,
 | 
					
						
							|  |  |  |                            mat3 transform, void* sock, float *desire_in);
 | 
					
						
							|  |  |  | void model_free(ModelState* s);
 | 
					
						
							|  |  |  | void poly_fit(float *in_pts, float *in_stds, float *out);
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | void model_publish(PubMaster &pm, uint32_t vipc_frame_id, uint32_t frame_id,
 | 
					
						
							|  |  |  |                    uint32_t vipc_dropped_frames, float frame_drop, const ModelDataRaw &data, uint64_t timestamp_eof);
 | 
					
						
							|  |  |  | void posenet_publish(PubMaster &pm, uint32_t vipc_frame_id, uint32_t frame_id,
 | 
					
						
							|  |  |  |                      uint32_t vipc_dropped_frames, float frame_drop, const ModelDataRaw &data, uint64_t timestamp_eof);
 | 
					
						
							|  |  |  | #endif
 |