执行加速(部分动作连接处过快)

This commit is contained in:
kirl committed 2026-08-02 13:47:48 +08:00
1 parent 351e22e123
commit c3028a9433
5 files changed
+321 -44

No files matched your search

+20 -16
View File
@@ -41,7 +41,7 @@ static const char *TAG = "MAIN";
#define RECOGNIZE_TIMEOUT_MS 20000
#define RECOGNIZE_POLL_MS 100
/* 归零速度: XY 用 ACTUATOR_EXEC_VEL/ACC (3000/250), Z 用 ACTUATOR_EXEC_Z_VEL/Z_ACC (低速);
等待时间按最大行程 + 速度/加速度实时计算 */
到位等待: 轮询闭环到位标志, 超时按最大行程 + 裕量兜底 */
static void button_recognize_task(void *pvParam)
{
@@ -50,28 +50,32 @@ static void button_recognize_task(void *pvParam)
ESP_LOGI(TAG, "按钮按下, 归零后再发送 RECOGNIZE ...");
buzzer_beep(2000, 100); /* 短音: 识别开始 */
/* ---- 归零: 舵机抬起 + Z 回 0° (低速, 最坏行程 270°) ---- */
/* ---- 归零: 舵机抬起 + Z/X/Y 三轴并行回零 ----
Z 旋转与 X/Y 平移互不干扰 (Fragment 里也是三轴并行),
无需等 Z 到位再动 X/Y —— 三轴同时下发、一次到位等待 */
actuator_servo_up();
uint32_t z_motion = actuator_angle_motion_time_ms(ACTUATOR_ANGLE_LIMIT_DEG,
ACTUATOR_EXEC_Z_VEL,
ACTUATOR_EXEC_Z_ACC);
uint32_t xy_motion = actuator_mm_motion_time_ms(ACTUATOR_LIMIT_X_MAX,
ACTUATOR_EXEC_VEL,
ACTUATOR_EXEC_ACC);
uint32_t y_motion = actuator_mm_motion_time_ms(ACTUATOR_LIMIT_Y_MAX,
ACTUATOR_EXEC_VEL,
ACTUATOR_EXEC_ACC);
uint32_t home_motion = z_motion;
if (xy_motion > home_motion) home_motion = xy_motion;
if (y_motion > home_motion) home_motion = y_motion;
actuator_motor_angle(ACTUATOR_ADDR_ANGLE, 0.0f,
ACTUATOR_EXEC_Z_VEL, ACTUATOR_EXEC_Z_ACC, true);
vTaskDelay(pdMS_TO_TICKS(actuator_angle_settle_ms(
ACTUATOR_ANGLE_LIMIT_DEG,
ACTUATOR_EXEC_Z_VEL, ACTUATOR_EXEC_Z_ACC)));
/* ---- XY 回零: X=0, Y=330 (按最坏行程实时计算等待) ---- */
uint32_t xy_settle = actuator_mm_settle_ms(ACTUATOR_LIMIT_X_MAX,
ACTUATOR_EXEC_VEL,
ACTUATOR_EXEC_ACC);
uint32_t y_settle = actuator_mm_settle_ms(ACTUATOR_LIMIT_Y_MAX,
ACTUATOR_EXEC_VEL,
ACTUATOR_EXEC_ACC);
if (y_settle > xy_settle) xy_settle = y_settle;
actuator_motor_mm(ACTUATOR_ADDR_X, 0.0f,
ACTUATOR_EXEC_VEL, ACTUATOR_EXEC_ACC, true);
actuator_motor_mm(ACTUATOR_ADDR_Y1, 330.0f,
ACTUATOR_EXEC_VEL, ACTUATOR_EXEC_ACC, true);
vTaskDelay(pdMS_TO_TICKS(xy_settle));
actuator_wait_arrival(home_motion,
(1u << 0) | (1u << 1) | (1u << 2) | (1u << 3));
ESP_LOGI(TAG, "归零完成, 发送 RECOGNIZE ...");