25_R1_chassis/User/device/map.c

110 lines
2.2 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
*地图,存储全场定位点位
*
*/
#include "map.h"
/* Private variables -------------------------------------------------------- */
Path_t path_state;
point_t path_1;
sick_t sick_1;
point_t path_2;
sick_t sick_2;
point_t path_3;
sick_t sick_3;
//点位坐标x轴朝前y轴朝右
void block_select(Action_POS_t*pos,CMD_t*cmd){
//1
path_1.x = 0;
path_1.y = 0;
path_1.angle=0;
sick_1.sick_qian = 0;
sick_1.sick_you = 0;
sick_1.sick_hou = 0;
sick_1.sick_zuo = 0;
sick_1.sick_flag = 0;
//2
path_2.x = 2000;
path_2.y = -2000;
path_2.angle=0;
sick_2.sick_qian = 1873;
sick_2.sick_you = 2180;
sick_2.sick_hou = 0;
sick_2.sick_zuo = 3350;
sick_2.sick_flag = 1;
//3
path_3.x = pos->pos_x;
path_3.y = pos->pos_y;
//path_3.angle= 10;
sick_3.sick_qian = 0;
sick_3.sick_you = 0;
sick_3.sick_hou = 0;
sick_3.sick_zuo = 0;
sick_3.sick_flag = 0;
// 状态控制变量
static float fixed_yaw = 0;
static int is_calibrating = 0;
static float prev_camera_yaw = 0;
// 非NAVI模式直接重置状态
if (cmd->C_cmd.mode != NAVI) {
is_calibrating = 0;
}
if (cmd->camera_yaw != 0) {
// 只有未校准时才更新固定值
if (is_calibrating == 0) {
fixed_yaw = pos->pos_yaw + cmd->camera_yaw;
is_calibrating = 1;
}
// 校准期间始终使用fixed_yaw
path_3.angle = fixed_yaw;
prev_camera_yaw = cmd->camera_yaw;
}
}
/**
* 路径选择
*
* path_state.target
*/
void path_select(CMD_t*cmd){
static int8_t last_pos = -1;
if (cmd->C_cmd.pos != last_pos) {
switch (cmd->C_cmd.pos){
case POS_1:
path_state.target = &path_1;//选择路径
path_state.sick = &sick_1;
break;
case POS_2:
path_state.target = &path_2;//选择路径
path_state.sick = &sick_2;
break;
case POS_3:
path_state.target = &path_3;//选择路径
path_state.sick = &sick_3;
break;
}
path_state.points_flag = 0;
}
last_pos = cmd->C_cmd.pos; // 更新上一次的位置
if(cmd->C_cmd.mode != NAVI){
path_state.points_flag = 0;
}
}
Path_t *get_map_pointer(void){
return &path_state;
}