修复: 放置段XY运动后延迟旋转以防止碰撞

This commit is contained in:
kirl committed 2026-08-04 03:15:27 +08:00
1 parent c296caa328
commit e2da4ec4ab
3 files changed
+19 -4

No files matched your search

+11 -3
View File
@@ -578,7 +578,9 @@ static void _actuator_move_fragment(const edc_fragment_t *frag)
/* ---- 2. 运动到 source 位置 ---- */
Emm_V5_Arrival_Reset(); /* 清掉上一段迟到/多余的到位帧, 防污染本段等待 */
/* source Z 用相对运动转到目标朝向 (0° 基准位; 到位用 CPOS 轮询确认) */
/* source Z 用相对运动转到目标朝向 (0° 基准位; 到位用 CPOS 轮询确认)。
⚠️ 保持"先旋转后 XY"(与 target 段相反): 本段尚未抓取碎片, 先旋转的
摆动发生在途中、到点前已转完, 边缘抓取时更安全 */
_actuator_move_angle_rel(src_z_tgt - s_cur_angle_deg, vel_angle, acc_angle);
_frame_gap();
_actuator_move_abs(ACTUATOR_ADDR_X, ACTUATOR_DIR_X,
@@ -635,12 +637,18 @@ static void _actuator_move_fragment(const edc_fragment_t *frag)
(unsigned long)dst_dz, (unsigned long)dst_dx, (unsigned long)dst_dy,
dst_mask, dst_wait_ms + ACTUATOR_SETTLE_MARGIN_MS);
_actuator_move_angle_rel(dst_z_tgt - s_cur_angle_deg, vel_angle, acc_angle);
_frame_gap();
/* ⚠️ 时序 (2026-08-04): 放置段先发 XY、后发旋转 —— 抓取的碎片若在区域
边缘, 先旋转会把它甩向机械边缘碰撞; 先启动 XY, 延迟
ACTUATOR_ROTATE_DELAY_MS (500ms) 再旋转, 让工具先把碎片带离边缘。
source 段保持先旋转: 该段尚未抓取碎片, 先旋转的摆动发生在途中、
到点前已转完, 更安全。 */
_actuator_move_abs(ACTUATOR_ADDR_X, ACTUATOR_DIR_X,
dst_pulses_x, vel_xy, acc_xy, false);
_frame_gap();
_actuator_move_y_sync(dst_pulses_y, vel_xy, acc_xy);
/* XY 已启动并把碎片带离边缘后再旋转 */
vTaskDelay(pdMS_TO_TICKS(ACTUATOR_ROTATE_DELAY_MS));
_actuator_move_angle_rel(dst_z_tgt - s_cur_angle_deg, vel_angle, acc_angle);
/* ---- 8. 等待运动到位 (轮询闭环到位标志, 红灯快闪) ---- */
actuator_wait_arrival(dst_wait_ms, dst_mask);
+7
View File
@@ -174,6 +174,13 @@ extern "C" {
#define ACTUATOR_FRAME_GAP_MS 10
#endif
/** 放置段: XY 运动启动后, 到 Z 旋转启动的额外延迟 (ms)
2026-08-04: 碎片在区域边缘时, 先旋转会把碎片甩向机械边缘碰撞;
延迟让 XY 先把碎片带离边缘再旋转, 防碰撞 */
#ifndef ACTUATOR_ROTATE_DELAY_MS
#define ACTUATOR_ROTATE_DELAY_MS 350
#endif
/** 控制模式: 2 = 闭环位置模式 */
#define ACTUATOR_CTRL_MODE 2
+1 -1
View File
@@ -3,4 +3,4 @@ idf_component_register(SRCS "main.c"
PRIV_REQUIRES emm_v5 magnet servo key web_ctrl protocol rgb actuator buzzer)
# 调试开关: 启用 WiFi + Web 服务器 (消除 IDE 未定义警告)
target_compile_definitions(${COMPONENT_LIB} PRIVATE EDC_DEBUG_WEB)
# target_compile_definitions(${COMPONENT_LIB} PRIVATE EDC_DEBUG_WEB)