Files
mprim_gen/configs/differential.py
2026-07-28 23:35:42 +07:00

47 lines
2.9 KiB
Python

"""Config differential drive (2 bánh vi sai). Chỉnh số liệu theo robot thực tế.
Cost mult lấy theo bộ tuned unicycle_highcost_5cm.mprim (backward=40, turninplace=20,
forwardandturn=2): lùi và quay tại chỗ đắt tới mức chỉ được chọn khi không còn đường
khác — an toàn cho AMR có cảm biến chính hướng về phía trước. Muốn robot thoải mái
lùi/xoay hơn thì hạ dần (vd 5/5/3) nhưng đó là quyết định vận hành có chủ đích.
"""
from mprim_config import RobotConfig, KinematicType
config = RobotConfig(
name="differential", # tên file output: differential.mprim
kinematic_type=KinematicType.DIFFERENTIAL, # 2 bánh vi sai -> nội suy unicycle
resolution_m=0.05, # [m] PHẢI khớp costmap resolution (costmap_global_params.yaml)
numberofangles=16, # 16 góc heading -> 1 bước góc = 22.5 độ
forward_short_m=0.10, # [m] bước tiến ngắn ~2 cell, để tinh chỉnh gần goal
forward_long_m=0.40, # [m] bước tiến dài ~8 cell — quãng đường 1 chu kỳ điều khiển
# ở tốc độ hành trình
backward_m=0.10, # [m] bước lùi thẳng
# Rẽ = cung tròn: (1,) nghĩa là chỉ có primitive rẽ 22.5 độ (giống bộ tham chiếu).
# Thêm 2 vào tuple nếu cần rẽ 45 độ — đổi lại branching factor tăng, planner chậm hơn.
turn_steps=(1,),
turn_radius_m=0.70, # [m] >= max_vel/max_yawrate = 0.4/0.6 ~ 0.67 để local planner
# bám cung không phải giảm tốc; >= 0.66 để quantize 5cm
# không làm méo cung
has_backward_prims=True, # cho phép lùi thẳng (cost 40 nên chỉ dùng khi kẹt)
has_backward_turn_prims=False, # lùi + rẽ tắt: hành động mù cảm biến, bật lại nếu thật cần
has_turn_in_place_prims=True, # cho phép quay tại chỗ (cost 20 nên hiếm khi được chọn)
# SỐ NGUYÊN (SBPL đọc %d)
forwardcostmult=1, # tiến thẳng — mốc chuẩn
backwardcostmult=40, # lùi 0.1m "đắt" bằng tiến 4m -> chỉ lùi khi không còn cách
forwardandturncostmult=2, # rẽ đắt gấp đôi đi thẳng -> ưu tiên đường ít cua
backwardandturncostmult=40, # (không dùng khi has_backward_turn_prims=False)
turninplacecostmult=20, # xoay 22.5 độ "đắt" bằng tiến ~4m -> tránh xoay giữa đường
pose_spacing_m=0.05, # [m] = resolution -> path SBPL trả ra có pose cách đều ~5cm
# giới hạn động học thật (hybrid_local_planner_params.yaml: robot_max_v_ac / robot_max_w_ac)
max_vel_mps=0.4, # [m/s] vận tốc dài tối đa
max_yawrate_radps=0.6, # [rad/s] vận tốc xoay tối đa
)