#pragma once // 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 #include "messaging.hpp" constexpr int DESIRE_LEN = 8; constexpr int TRAFFIC_CONVENTION_LEN = 2; constexpr int MODEL_FREQ = 20; struct ModelDataRaw { float *plan; float *lane_lines; float *lane_lines_prob; float *road_edges; float *lead; float *lead_prob; float *desire_state; float *meta; float *desire_pred; float *pose; }; typedef struct ModelState { ModelFrame frame; std::unique_ptr output; std::unique_ptr input_frames; std::unique_ptr m; cl_command_queue q; #ifdef DESIRE float prev_desire[DESIRE_LEN] = {}; float pulse_desire[DESIRE_LEN] = {}; #endif #ifdef TRAFFIC_CONVENTION float traffic_convention[TRAFFIC_CONVENTION_LEN] = {}; #endif } ModelState; void model_init(ModelState* s, cl_device_id device_id, cl_context context); ModelDataRaw model_eval_frame(ModelState* s, cl_mem yuv_cl, int width, int height, const mat3 &transform, 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, float frame_drop, const ModelDataRaw &net_outputs, const float *raw_pred, uint64_t timestamp_eof, float model_execution_time); void posenet_publish(PubMaster &pm, uint32_t vipc_frame_id, uint32_t vipc_dropped_frames, const ModelDataRaw &net_outputs, uint64_t timestamp_eof);