Thuật toán quy hoạch đường đi đỗ xe dọc dựa trên đường cong Clothoid: Có thể tùy chỉnh chiều dài và tốc độ thay đổi của Clothoid

Khi thực hiện quy hoạch đường đi đỗ xe dọc dựa trên đường cong Clothoid, chúng ta có thể tự điều chỉnh chiều dài và tốc độ thay đổi của Clothoid.

Đường cong Clothoid với đặc tính độ cong thay đổi liên tục sẽ giúp xe di chuyển mượt mà hơn. Trong bài viết này, chúng ta sẽ xây dựng một đoạn mã để tạo ra đường đi đỗ xe dọc có thể tùy chỉnh thông số.

Trước hết, hãy xem xét các thông số chính: tổng chiều dài đường cong (L) và tốc độ thay đổi độ cong (k). Hai giá trị này quyết định mức độ uốn khúc của đường đi. Chúng ta bắt đầu bằng việc tạo một lớp sinh đường cong Clothoid:

import numpy as np

class GeneratorClothoid:
    def __init__(self, length=10.0, rate=0.1):
        self.length = length  # Chiều dài tổng cộng của đường cong
        self.rate = rate  # Tốc độ thay đổi độ cong
        self.path = []  # Danh sách lưu trữ các điểm trên đường đi
        self.interval = 0.1  # Khoảng cách lấy mẫu

    def create_path(self):
        angle = 0.0
        position_x, position_y = 0.0, 0.0
        
        for distance in np.arange(0, self.length, self.interval):
            curvature = self.rate * distance  
            # Cập nhật góc hướng
            angle += curvature * self.interval  
            # Cập nhật tọa độ
            position_x += np.cos(angle) * self.interval
            position_y += np.sin(angle) * self.interval
            self.path.append((position_x, position_y))
        return np.array(self.path)

Chú ý rằng quá trình tính toán độ cong và tích phân góc hướng là phần quan trọng nhất. Độ cong tăng dần từ 0 theo phương thức tuyến tính, giúp vô-lăng quay đều và hành khách không bị chóng mặt. Thông số length kiểm soát tổng chiều dài đường đi, trong khi rate lớn hơn sẽ dẫn đến sự thay đổi độ cong nhanh hơn, phù hợp cho những tình huống cần rẽ gấp.

Để kiểm tra hiệu quả của các thông số khác nhau:

# Đường đi nhẹ nhàng
smooth_route = GeneratorClothoid(length=8, rate=0.05).create_path()

# Đường đi gắt
sharp_route = GeneratorClothoid(length=6, rate=0.15).create_path()

Sử dụng thư viện matplotlib để vẽ so sánh hai loại đường đi:

import matplotlib.pyplot as plt

plt.plot(smooth_route[:,0], smooth_route[:,1], label='Chế độ êm ái')
plt.plot(sharp_route[:,0], sharp_route[:,1], '--', label='Chế độ chuyên nghiệp')
plt.axis('equal')
plt.legend()

Khi thông số rate quá lớn, độ cong ở cuối đường đi có thể thay đổi đột ngột. Do đó, cần thêm giới hạn an toàn:

def check_safe_curvature(rate, length):
    max_curvature = rate * length
    return max_curvature < 1/3.5  # Giả sử bán kính quay tối thiểu là 3.5 mét

Trong ứng dụng thực tế, cần kết hợp vị trí xe để thực hiện biến đổi tọa độ. Ví dụ, khi phát hiện chỗ đỗ bên phải, ta có thể lật ngược đường đi đã tạo:

mirrored_route = np.array([[-x, y] for x, y in route])

Cuối cùng, mặc dù Clothoid rất hữu ích, nhưng quy hoạch đỗ xe thực tế cần cân nhắc tránh chướng ngại vật. Có thể kết hợp thuật toán RRT* để tạo nhiều đường đi khả thi, sau đó áp dụng Clothoid để làm mượt chúng, đảm bảo cả sự an toàn và thoải mái.

Thẻ: Clothoid python path-planning

Đăng vào ngày 19 tháng 9 lúc 00:54