Professional Documents
Culture Documents
HỒ CHÍ MINH
KHOA CƠ KHÍ CHẾ TẠO MÁY
BỘ MÔN CƠ ĐIỆN TỬ
ĐỒ ÁN CƠ ĐIỆN TỬ
Đề tài: NGHIÊN CỨU THUẬT TOÁN
TỐI ƯU HÓA QUỸ ĐẠO DI CHUYỂN CHO
ROBOT VẬN CHUYỂN HÀNG HÓA
Lớp: 201461
BỘ MÔN CƠ ĐIỆN TỬ
ĐỒ ÁN CƠ ĐIỆN TỬ
Đề tài: NGHIÊN CỨU THUẬT TOÁN
TỐI ƯU HÓA QUỸ ĐẠO DI CHUYỂN CHO
ROBOT VẬN CHUYỂN HÀNG HÓA
Lớp: 201461
BỘ MÔN CƠ ĐIỆN TỬ
NHIỆM VỤ ĐỒ ÁN CƠ ĐIỆN TỬ
Học kỳ 1/ năm học 2023-2024
1. Tên đề tài: Nghiên cứu thuật toán tối ưu hóa quỹ đạo di chuyển cho robot vận
chuyển hàng hóa
Trong đó:
I: momen quán tính (kgm2) M: khối lượng Robot (kg)
m: khối lượng bánh xe (kg) a: gia tốc của robot (m/s2)
R: bán kính bánh xe (m) ω: vận tốc góc (rad/s)
𝜏: momen quay của động cơ (Nm) v: vận tóc (m/s)
𝛾: gia tốc góc (rad/s2) P: công suất động cơ (W)
Fms: lực ma sát (N) n: tốc độ của động cơ (vòng/phút)
k: hệ số an toàn
(2.1)
(2.2)
=> (2.3)
(2.4)
(2.5)
+ Từ (2.3) và (2.5) ta có
(2.6)
(2.7)
(2.8)
Với khả năng tích hợp các giao thức truyền thông như Wi-Fi, Bluetooth, và LoRa, STM32
F103C8T6 trở thành lựa chọn hàng đầu cho các dự án IoT, từ hệ thống giám sát thông minh đến các
ứng dụng liên quan đến môi trường số. Trong lĩnh vực ô tô, nó thường được tích hợp vào các hệ thống
điều khiển động cơ và giải trí.
STM32F103C8T6 cũng đóng vai trò quan trọng trong lĩnh vực điện tử tiêu dùng, từ đồng hồ
thông minh đến tai nghe không dây và các điều khiển từ xa. Trong ngành công nghiệp, nó được ứng
dụng rộng rãi trong các hệ thống nhúng và điều khiển công nghiệp, đảm bảo sự ổn định và hiệu suất
trong môi trường khắc nghiệt.
Ngoài ra, STM32 F103C8T6 cũng là sự lựa chọn của nhiều ứng dụng y tế, máy in, thiết bị văn
phòng thông minh, và thậm chí trong điều khiển robot và drone. Tính linh hoạt và khả năng tích hợp
của nó đã tạo ra một dấu ấn mạnh mẽ trong thế giới của vi điều khiển và điện tử nhúng.
Thông số kỹ thuật
Analog Pins PA0 – PA7 Pins act as ADCs with 12-bit resolution
PB0 – PB1
PC13– PC15
TX2, RX2
TX3, RX3
PC13– PC15
PB0 - PB1
PB6 – PB9
MISO1,
MOSI1,
SCK1, CS0
SCL2, SDA2
Thông số kỹ thuật
- Điện áp hoạt động: 5~30VDC
- Công suất tối đa: 25W 1 cầu (lưu ý công suất = dòng điện x điện áp nên áp cấp vào càng
cao, dòng càng nhỏ, công suất có định 25W).
- Dòng tối đa cho mỗi cầu H là: 2A
- Mức điện áp logic: Low -0.3V~1.5V, High: 2.3V~Vss
- Kích thước: 43x43x27mm
Chân kết nối
Thông số kỹ thuật
- Điện áp hoạt động: 3.3~5VDC
- Khoảng cách phát hiện: 10~15mm.
- Ngõ ra dạng tín hiệu số Digital TTL dễ dàng kết nối với Vi điều khiển.
- Có LED hiện thị ngõ ra cho từng cảm biến.
- Kích thước:19 x 96mm
2.5.4. Mạch thu phát sóng RF SPI LORA RA-02 SX1278 433mHz
Mạch thu phát sóng RF SPI LoRa RA-02 SX1278 433MHz là một mô-đun truyền thông không
dây mạnh mẽ, sử dụng công nghệ LoRa (Long Range) để cung cấp khả năng truyền thông ổn định và
xa phạm vi. Được thiết kế dựa trên chip SX1278 của Semtech, mô-đun này là một công cụ quan trọng
cho các ứng dụng IoT, truyền dữ liệu từ xa và thuật toán mạng không dây.
Tích hợp giao tiếp SPI (Serial Peripheral Interface), RA-02 dễ dàng kết nối với các vi điều khiển
như Arduino, Raspberry Pi, hoặc các hệ thống nhúng khác. Với tần số hoạt động ở 433MHz, nó cung
cấp khả năng truyền thông xa và chống nhiễu tốt, làm cho nó thích hợp cho các ứng dụng yêu cầu
phạm vi truyền thông lớn và độ ổn định cao.
Mạch RA-02 LoRa cung cấp khả năng truyền và nhận dữ liệu ổn định ở các môi trường nhiễu,
giảm độ trễ và tiêu tốn năng lượng thấp. Điều này làm cho nó lựa chọn phổ biến cho việc xây dựng
các dự án thu phát không dây, từ hệ thống giám sát môi trường đến các ứng dụng cảm biến từ xa.
Với khả năng linh hoạt, hiệu suất và chi phí thấp, mạch thu phát sóng RF SPI LoRa RA-02
SX1278 433MHz là một công cụ quan trọng trong thế giới của phát triển IoT và truyền thông không
dây, giúp nhanh chóng và dễ dàng tích hợp kết nối không dây vào các dự án nhúng và ứng dụng trí
tuệ nhân tạo.
Hình 2.11. Mạch thu phát RF LORA SX1278 [6]
Thông số kỹ thuật
- Chuẩn không dây: 433MHz
- Dải tần số: 420 - 450MHz
- Giao tiếp: SPI / GPIO
- Điện áp hoạt động: 1.8 - 3.7V, mặc định 3.3V
- Nhiệt độ làm việc: -40 đến +85 độ.
Chân kết nối
Điện
Thiết bị
áp (V)
Động cơ 12
STM32F103C8T6 3.3
L298 12
SX1278 3.3
TCRT5000 5
Từ thông số dòng tiêu thụ của các thiết bị, nhóm dùng 4 viên pin cell 18650 2600mAh 3.7V ghép
thành một bộ 14.8V để cấp nguồn cho động cơ. Vì điện áp động cơ cần tối đa là 12V mà điện áp bộ
nguồn là 14,8V nên nhóm chọn băm xung PWM tối đa cho động cơ là 83% để đảm bảo không gây hư
hỏng động cơ.
Quy ước khi động cơ quay theo chiều thuận thì pha A sớm hơn pha B và ngược lại. Có ba chế độ
đọc xung Encoder là x1, x2, x4. Chế độ x1 chỉ đọc cạnh lên của pha A. Chế độ x2 đọc cạnh lên và
cạnh xuống của pha A. Chế độ x4 sẽ đọc cạnh lên và cạnh xuống của pha A và pha B. Đây cũng là
chế độ cho độ phân giải cao nhất.
Pha A sớm hơn pha B, khi A có cạnh lên thì B sẽ ở cạnh xuống và ngược lại. Khi quay thuận thì
biến đếm ở các chế độ tăng lên một tại các thời điểm đọc được và ngược lại. Từ lý thuyết đọc
Encoder trên, ta thấy rằng việc đọc xung Encoder cho những loại Encoder có 𝑃𝑃𝑅 lớn với phương
pháp sử dụng ngắt ngoài bắt cạnh hai pha A và B sẽ rất tốn thời gian xử lý. Ngoài ra còn có các yếu tố
khác ảnh hưởng đến quá trình đọc như nhiễu trên đường truyền, méo dạng xung…sẽ gây ra sai số. Để
khắc phục khuyết điểm trên, nhóm quyết định sử dụng timer để đọc xung Encoder.
3.2.1.2 Điều khiển vận tốc động cơ bằng thuật toán PID
PID, viết tắt của Proportional-Integral-Derivative, là một hệ thống điều khiển tự động được ứng
dụng phổ biến trong nhiều lĩnh vực công nghiệp và tự động hóa. Điều khiển PID hoạt động dựa trên
việc đánh giá sự chênh lệch giữa giá trị đặt trước và giá trị thực tế của biến điều khiển, và từ đó tinh
chỉnh đầu ra của hệ thống để đạt được hiệu suất tốt nhất.
PID Controller được áp dụng trong nhiều hệ thống điều khiển như điều khiển nhiệt độ, điều khiển
động cơ, và quy trình sản xuất công nghiệp. Khả năng tinh chỉnh các hệ số P, I, và D giúp người điều
khiển đạt được sự ổn định và đáp ứng mong muốn, làm cho PID trở thành một công cụ quan trọng
trong lĩnh vực tự động hóa và điều khiển tự động.
Để có thể điều khiển được đối tượng PID phải lấy được giá trị đầu ra của hệ thống. Sau đó so
sánh với giá trị đặt từ đó tìm ra sai số e. PID xử lý sai số e để tìm ra tác động u tác động vào đối
tượng, giúp cho ra trị ngõ ra y bám theo giá trị đặt (Setpoint) ban đầu.
Bộ điều khiển PID gồm 3 khâu điều khiển gồm: Tỉ lệ (P), tích phân (I) và vi phân (D).
Ngõ ra của bộ điều khiển PID chính là tổng ngõ ra của ba khâu:
Trong đó:
- Pout: thừa số tỉ lệ của đầu ra
- Kp: độ lợi tỉ lệ
- e: sai số
- t: thời gian tức thời
Khâu tích phân là tích giữa tổng sai số tức thời theo thời gian với độ lợi KI:
Trong đó:
- Iout: thừa số tích phân của đầu ra
- KI: độ lợi tích phân
- 𝜏: biến tích phân trung gian
Khâu vi phân là tích giữa độ dốc sai số theo thời gian với độ lợi vi phân K D:
Trong đó:
- Dout: thừa số vi phân của đầu ra
- KD: độ lợi vi phân
Vậy ngõ ra tác động là:
Sự phát triển của các hệ thống điều khiển nên cần có những bộ điều khiển rời rạc. Do đó thuật
toán điều khiển PID rời rạc cũng được sử dụng rộng rãi. Chuyển đổi về miền thời gian rời rạc cho
từng khâu như sau:
Khâu tỉ lệ:
Khâu vi phân:
Với T là chu kì lấy mẫu theo thời gian (s). Từ đó có ngõ ra tác động u(kT) là:
Bước 2: Từ đồ thị thu được tính toán độ lợi K và thời gian đáp ứng 𝜏 .
Độ lợi K được tính bằng tỉ lệ giữa ΔCV(Controlled Valuable) và ΔMV(Manipulated
Valuable)
Thời gian đáp ứng 𝜏 diễn tả độ trễ của hệ thống trong quá trình đáp ứng đối với biến đầu
vào.
𝜏 = 𝜏63,2 – 𝜏0
Bước 3: Tính toán hệ số của các khâu P, I, D theo phương pháp Cohen Coon.
Bước 4: Thêm Anti-windup ở khâu I và Lowpass filter ở khâu D để hạn chế Overshoot và lọc
nhiễu.
Hàm truyền PID của 2 bánh xe lần lượt là
24.6973
G1(s) = 2.6105 + s + 0.2759*s
35.81
G2(s) = 2.0053 + s + 0.1123*s
Trong đó:
Ku là hệ số tỉ lệ giới hạn để xe dao động điều hòa quanh vị trí mong muốn
Hàm truyền:
1.8
G(s) = 0.09 + s + 0.01125*s
CHƯƠNG 4. THUẬT TOÁN
4.1. Các phương pháp thuật toán tìm đường
4.1.1. Phương pháp trường thế năng
Thuật toán trường thế năng (Potential Field) là một thuật toán trong lĩnh vực robot tự động hóa và
điều khiển, được sử dụng để điều khiển chuyển động của robot trong môi trường chứa các vật cản. Ý
tưởng cơ bản của thuật toán là tạo ra một trường thế năng xung quanh robot và các vật cản, trong đó
robot được thúc đẩy đi theo hướng giảm giá trị của trường thế năng. Thuật toán Potential Field sử
dụng hai loại trường thế năng: trường thế năng hấp dẫn (attractive potential field) và trường thế năng
đẩy (repulsive potential field). Trường thế năng hấp dẫn được sử dụng để tạo ra một lực hướng về
mục tiêu, trong khi trường thế năng đẩy được sử dụng để tạo ra một lực đẩy từ các vật cản xung
quanh robot.
Khi áp dụng thuật toán Potential Field, robot sẽ tính toán các lực hấp dẫn và đẩy từ trường thế
năng và sử dụng chúng để điều khiển chuyển động của mình. Cụ thể, robot sẽ cảm nhận môi trường
xung quanh thông qua các cảm biến và tính toán các lực hấp dẫn điều khiển robot tiến gần mục tiêu
và các lực đẩy để tránh các vật cản. Một ưu điểm của thuật toán Potential Field là tính đơn giản và
tính linh hoạt trong việc xử lý các tình huống phức tạp trong môi trường. Nó cũng cho phép robot di
chuyển một cách mượt mà và tự nhiên trong môi trường có nhiều vật cản.
Tuy nhiên, thuật toán Potential Field cũng có một số hạn chế. Ví dụ, trong một số tình huống,
robot có thể bị mắc kẹt trong các vùng cận mục tiêu hoặc các vùng trường thế năng đẩy quá mạnh có
thể khiến robot tránh xa các vật cản quá xa mục tiêu. Ngoài ra, thuật toán cũng không đảm bảo tìm
được lời giải tối ưu trong mọi trường hợp.
Ưu điểm:
- Đơn giản: Thuật toán Potential Field có tính đơn giản trong cách triển khai và hiểu quả
trong việc điều khiển chuyển động của robot. Với một số lượng nhỏ các thông số và quy tắc, thuật
toán có thể được triển khai nhanh chóng.
- Tính linh hoạt và dễ tùy chỉnh: Potential Field cho phép dễ dàng tùy chỉnh các trường thế
năng để ứng phó với các tình huống cụ thể và các yêu cầu cụ thể của môi trường. Điều này cho phép
thuật toán được áp dụng trong nhiều loại môi trường và ứng dụng khác nhau.
- Tốc độ tính toán: Potential Field có thể được tính toán nhanh chóng, vì các lực hấp dẫn
và đẩy chỉ phụ thuộc vào khoảng cách tới mục tiêu và vật cản gần nhất. Do đó, thuật toán thích hợp
cho các ứng dụng có yêu cầu về tốc độ xử lý thời gian thực.
- Điều khiển mượt mà: Potential Field tạo ra một lực hấp dẫn liên tục hướng về mục tiêu
và các lực đẩy từ các vật cản xung quanh. Điều này giúp robot di chuyển một cách mượt mà và tự
nhiên trong môi trường có vật cản.
Nhược điểm:
- Mắc kẹt và cận mục tiêu: Trong một số trường hợp, robot có thể bị mắc kẹt trong các
vùng cận mục tiêu, trong đó lực hấp dẫn vượt quá lực đẩy từ các vật cản. Điều này có thể làm cho
robot không thể tiến gần đến mục tiêu hoặc không thể thoát khỏi vùng mắc kẹt.
- Không đảm bảo lời giải tối ưu: Potential Field không đảm bảo tìm ra lời giải tối ưu trong
tất cả các trường hợp. Do thuật toán chỉ xem xét các lực hấp dẫn và đẩy từ mục tiêu và vật cản gần
nhất, nó có thể không tìm ra lời giải tối ưu từ một quỹ đạo chuyển động toàn cục.
- Dễ bị ảnh hưởng bởi vật cản động: Potential Field không xử lý tốt các tình huống khi có
các vật cản động trong môi trường. Vì thuật toán chỉ tính toán các lực từ trạng thái hiện tại của các vật
cản, nó có thể không đủ nhạy bén để phản ứng với các vật cản đột ngột di chuyển.
- Độ phức tạp của bài toán: Trong một số môi trường phức tạp, thuật toán Potential Field
có thể gặp khó khăn trong việc tìm ra lời giải chính xác và hiệu quả. Điều này đặc biệt đúng khi có
nhiều vật cản gần nhau hoặc khi mục tiêu nằm trong một vùng phức tạp của môi trường.
Tổng quan, Potential Field là một thuật toán đơn giản và dễ triển khai, có tính linh hoạt vàTính
tùy chỉnh cao, và có tốc độ tính toán nhanh. Tuy nhiên, nó cũng có một số hạn chế, bao gồm khả năng
bị mắc kẹt và cận mục tiêu, không đảm bảo tìm lời giải tối ưu trong mọi trường hợp, dễ bị ảnh hưởng
bởi vật cản động, và gặp khó khăn trong môi trường phức tạp.
4.1.2. Phương pháp thuật toán di truyền
Phương pháp thuật toán di truyền (Genetic Algorithm) là một thuật toán tìm kiếm và tối ưu được
lấy cảm hứng từ quá trình tiến hóa trong tự nhiên. Thuật toán di truyền sử dụng các khái niệm như cá
thể, gen, quần thể, lai ghép và đột biến để tìm ra giải pháp tốt nhất cho một vấn đề tối ưu hóa.
Cơ bản, thuật toán di truyền hoạt động như sau:
Khởi tạo quần thể: Ban đầu, một quần thể ban đầu gồm nhiều cá thể (giải pháp) được tạo ra ngẫu
nhiên. Mỗi cá thể thường được biểu diễn bằng một chuỗi gen, có thể là một vectơ số, một chuỗi ký tự
hoặc các biểu diễn khác tùy thuộc vào bài toán cụ thể.
Đánh giá cá thể: Mỗi cá thể trong quần thể được đánh giá bằng một hàm mục tiêu (hàm fitness)
để đo lường chất lượng của giải pháp tương ứng với cá thể đó. Hàm fitness thường được thiết kế để
đo lường mục tiêu tối ưu của bài toán.
Lựa chọn quần thể: Các cá thể tốt nhất (có giá trị fitness cao nhất) được chọn để tiếp tục vào thế
hệ tiếp theo. Quá trình lựa chọn có thể dựa trên các phương pháp như chọn theo tỷ lệ phần trăm, chọn
theo hạng bậc hoặc chọn theo giải pháp roulette-wheel.
Lai ghép (Crossover): Các cá thể được chọn để lai ghép tạo ra một thế hệ mới của quần thể. Quá
trình lai ghép kết hợp các gen của hai cá thể cha mẹ để tạo ra các cá thể con mới. Các phương pháp
lai ghép phổ biến bao gồm một điểm cắt (single-point crossover) hoặc nhiều điểm cắt (multi-point
crossover).
Đột biến (Mutation): Một số gen trong quần thể mới có thể bị đột biến (mutation) một cách ngẫu
nhiên. Quá trình đột biến thay đổi một gen trong cá thể để tạo ra sự đa dạng và khám phá thêm không
gian tìm kiếm.
Tiến hóa thế hệ: Quá trình lựa chọn, lai ghép và đột biến được lặp lại cho đến khi đạt
được tiêu chuẩn dừng (ví dụ: số thế hệ, giá trị fitness đủ cao, hoặc thời gian chạy).
Kết quả: Kết quả cuối cùng của thuật toán di truyền là cá thể tốt nhất tìm thấy trong quần
thể cuối cùng. Đây là giải pháp tối ưu (hoặc gần tối ưu) cho bài toán tối ưu hóa.
Ưu điểm của thuật toán di truyền bao gồm khả năng tìm kiếm trên không gian tìm kiếm lớn, khả
năng tìm giải pháp gần tối ưu, tính song song và khả năng áp dụng cho các bài toán phức tạp. Tuy
nhiên, thuật toán di truyền có thể gặp khó khăn khi đối mặtvới các bài toán có không gian tìm kiếm
liên tục và liên tục, hoặc khi hàm mục tiêu không liên tục. Một số cải tiến và biến thể của thuật toán
di truyền đã được phát triển để xử lý những hạn chế này, bao gồm thuật toán di truyền nhanh (Fast
Genetic Algorithm), thuật toán di truyền hạt nhân (Genetic Algorithm with Elite Particle Swarm
Optimization), và thuật toán di truyền đa mục tiêu (Multi-Objective Genetic Algorithm).
4.1.3. Phương pháp thuật toán BFS
Phương pháp thuật toán BFS (Breadth-First Search) là một thuật toán tìm kiếm đồ thị rất cơ bản
và phổ biến. Thuật toán BFS được sử dụng để tìm kiếm qua các đỉnh của đồ thị theo chiều rộng, từ
đỉnh xuất phát và duyệt qua tất cả các đỉnh có thể đạt được từ đỉnh xuất phát.
Cơ bản, thuật toán BFS hoạt động như sau:
Khởi tạo: Chọn một đỉnh xuất phát và khởi tạo hàng đợi (queue) rỗng. Đánh dấu đỉnh xuất phát là
đã được thăm và đưa nó vào hàng đợi.
Lặp lại cho đến khi hàng đợi trống:
Lấy một đỉnh từ đầu hàng đợi.
Kiểm tra các đỉnh kề (các đỉnh kết nối trực tiếp với đỉnh hiện tại) chưa được thăm. Đánh dấu các
đỉnh này là đã được thăm và đưa chúng vào hàng đợi.
Kết quả: Khi thuật toán BFS kết thúc, tất cả các đỉnh đã được thăm theo thứ tự tăng dần của
khoảng cách từ đỉnh xuất phát. Điều này có nghĩa là thuật toán đã tìm ra một đường đi ngắn nhất từ
đỉnh xuất phát đến tất cả các đỉnh đã được thăm.
Thuật toán BFS thường được sử dụng để tìm kiếm đường đi ngắn nhất trong đồ thị không có
trọng số hoặc trọng số bằng nhau trên các cạnh. Nó cũng có thể được sử dụng để kiểm tra tính liên
thông của đồ thị, tìm kiếm trong các cấu trúc dữ liệu như cây và đồ thị, và giải quyết một số bài toán
khác như tìm kiếm trong trò chơi, kiểm tra đồ thị hai phía (bipartite graph) và kiểm tra chu trình trong
đồ thị. Ưu điểm của thuật toán BFS bao gồm tính đơn giản và dễ hiểu, khả năng tìm kiếm đường đi
ngắn nhất (khi không có trọng số) và tính toàn diện (duyệt qua tất cả các đỉnh có thể đạt được từ đỉnh
xuất phát). Tuy nhiên, độ phức tạp của thuật toán BFS là O(V + E), trong đó V là số đỉnh và E là số
cạnh của đồ thị. Điều này có nghĩa là thuật toán BFS có thể trở nên chậm khi áp dụng cho đồ thị lớn.
Ưu điểm:
- Tìm kiếm đường đi ngắn nhất: BFS tìm kiếm qua các đỉnh theo chiều rộng, vì vậy nó có
khả năng tìm ra đường đi ngắn nhất từ đỉnh xuất phát đến mọi đỉnh được tìm thấy. Điều này rất hữu
ích trong nhiều bài toán tìm kiếm và định tuyến.
- Độ toàn diện: BFS duyệt qua tất cả các đỉnh có thể đạt được từ đỉnh xuất phát. Điều này
đảm bảo rằng nếu có một đường đi từ đỉnh xuất phát đến đỉnh đích, BFS sẽ tìm ra đường đi đó.
- Dễ hiểu và triển khai: Thuật toán BFS có cấu trúc đơn giản và dễ hiểu. Nó có thể được
triển khai một cách đơn giản bằng cách sử dụng một hàng đợi (queue) để lưu trữ các đỉnh đang được
duyệt.
- Kiểm tra tính liên thông: BFS có thể được sử dụng để kiểm tra tính liên thông của đồ thị.
Nếu BFS duyệt qua tất cả các đỉnh trong đồ thị, thì đồ thị được coi là liên thông.
Nhược điểm:
- Độ phức tạp không gian: Thuật toán BFS cần lưu trữ tất cả các đỉnh trong hàng đợi, điều
này đòi hỏi một lượng bộ nhớ đáng kể. Với đồ thị lớn hoặc không gian bộ nhớ hạn chế, điều này có
thể tạo ra vấn đề.
- Độ phức tạp thời gian: Độ phức tạp thời gian của thuật toán BFS là O(V + E), trong đó V
là số đỉnh và E là số cạnh của đồ thị. Điều này có nghĩa là thời gian thực thi của thuật toán có thể tăng
lên đáng kể với đồ thị lớn.
- Không giải quyết được vấn đề trọng số: BFS không thích hợp cho các đồ thị có trọng số
trên các cạnh. Thuật toán này không xem xét trọng số của các cạnh, nên không thể tìm kiếm đường đi
ngắn nhất trong các đồ thị có trọng số khác nhau trên các cạnh.
- Không phù hợp cho đồ thị vô hạn: Trong trường hợp đồ thị vô hạn, BFS sẽ không bao giờ
kết thúc vì nó sẽ không bao giờ duyệt qua toàn bộ đồ thị.
4.1.4. Thuật toán Dijstra
Thuật toán Dijkstra là một thuật toán tìm kiếm đường đi ngắn nhất từ một đỉnh xuất phát đến tất
cả các đỉnh khác trong một đồ thị có trọng số không âm. Thuật toán này được đặt theo tên của nhà
toán học Edsger W. Dijkstra và được sử dụng rộng rãi trong các ứng dụng liên quan đến định tuyến và
tìm kiếm đường đi trong mạng.
Cơ bản, thuật toán Dijkstra hoạt động như sau:
Khởi tạo: Chọn đỉnh xuất phát và gán khoảng cách từ đỉnh xuất phát đến chính nó là 0. Đặt các
khoảng cách từ đỉnh xuất phát đến tất cả các đỉnh khác là vô cùng (hoặc giá trị lớn nhất có thể).
Lặp lại cho đến khi tất cả các đỉnh đều được xét:
Chọn đỉnh chưa được xét có khoảng cách nhỏ nhất từ đỉnh xuất phát.
Đánh dấu đỉnh này là đã xét.
Cập nhật khoảng cách từ đỉnh xuất phát đến các đỉnh kề chưa xét thông qua đỉnh đang xét. Nếu
khoảng cách mới nhỏ hơn khoảng cách hiện tại, cập nhật khoảng cách mới và đỉnh cha.
Kết quả: Khi thuật toán Dijkstra kết thúc, ta có thể xây dựng đường đi ngắn nhất từ đỉnh xuất phát
đến bất kỳ đỉnh nào bằng cách theo dấu của các đỉnh cha đã lưu trữ trong quá trình thuật toán.
Thuật toán Dijkstra đảm bảo tìm ra đường đi ngắn nhất từ đỉnh xuất phát đến tất cả các đỉnh còn
lại trong đồ thị có trọng số không âm. Nó cũng có thể được sử dụng để tìm đường đi ngắn nhất từ
đỉnh xuất phát đến một đỉnh đích cụ thể.
Ưu điểm:
- Tìm kiếm đường đi ngắn nhất: Thuật toán Dijkstra đảm bảo tìm kiếm đường đi ngắn nhất
từ đỉnh xuất phát đến tất cả các đỉnh còn lại trong đồ thị có trọng số không âm.
- Độ chính xác: Kết quả trả về từ thuật toán Dijkstra là chính xác, không bỏ sót đường đi
ngắn nhất.
Nhược điểm:
- Độ phức tạp thời gian: Độ phức tạp thời gian của thuật toán Dijkstra là O(V^2), trong đó
V là số đỉnh của đồ thị. Điều này có nghĩa là thời gian thực thi của thuật toán có thể tăng lên đáng kể
với đồ thị lớn. Tuy nhiên, có thể cải thiện độ phức tạp thời gian bằng cách sử dụng cá8c cấu trúc dữ
liệu như hàng đợi ưu tiên (priority queue) để lưu trữ các đỉnh theo thứ tự tăng dần của khoảng cách.
- Không xử lý được trọng số âm: Thuật toán Dijkstra không hoạt động đúng nếu đồ thị có
cạnh có trọng số âm. Trong trường hợp này, thuật toán Bellman-Ford hoặc thuật toán tìm kiếm A* có
thể được sử dụng thay thế.
- Độ phức tạp không gian: Thuật toán Dijkstra yêu cầu lưu trữ khoảng cách từ đỉnh xuất
phát đến tất cả các đỉnh khác trong đồ thị. Vì vậy, nếu đồ thị quá lớn, thuật toán có thể tiêu tốn một
lượng bộ nhớ lớn.
Kết luận: thuật toán Dijkstra là một thuật toán quan trọng trong tìm kiếm đường đi ngắn nhất. Nó
có thể tìm kiếm đường đi ngắn nhất từ một đỉnh xuất phát đến tất cả các đỉnh khác trong đồ thị có
trọng số không âm. Tuy nhiên, nó có nhược điểm về độ phức tạp thời gian và không xử lý được trọng
số âm.
4.2. Thuật toán Dijkstra vào tìm đường ngắn nhất
Để áp dụng thuật toán Dijkstra cho bài toán tìm đường đi ngắn nhất, chúng ta cần một đồ thị có
trọng số không âm và một đỉnh xuất phát. Bài toán thường yêu cầu tìm đường đi ngắn nhất từ đỉnh
xuất phát đến một đỉnh đích cụ thể. Dưới đây là quy trình áp dụng thuật toán Dijkstra:
Khởi tạo: Thiết lập khoảng cách từ đỉnh xuất phát đến chính nó là 0 và khoảng cách từ
đỉnh xuất phát đến các đỉnh khác là vô cùng (hoặc giá trị lớn nhất có thể). Đặt đỉnh xuất
phát là đỉnh hiện tại.
Lặp lại cho đến khi tất cả các đỉnh trong đồ thị đều được xét:
Chọn đỉnh chưa được xét có khoảng cách nhỏ nhất từ đỉnh xuất phát. Ban đầu, đỉnh xuất
phát sẽ được chọn.
Đánh dấu đỉnh này là đã xét.
Cập nhật khoảng cách từ đỉnh xuất phát đến các đỉnh kề chưa được xét thông qua đỉnh
đang xét. Nếu khoảng cách mới nhỏ hơn khoảng cách hiện tại, cập nhật khoảng cách mới
và đỉnh cha.
Kết quả: Khi thuật toán Dijkstra kết thúc, ta có thể xây dựng đường đi ngắn nhất từ đỉnh
xuất phát đến đỉnh đích bằng cách theo dấu của các đỉnh cha đã lưu trữ trong quá trình
thuật toán.
Ví dụ, giả sử chúng ta có một đồ thị vô hướng với các đỉnh A, B, C, D, E và F, và các trọng số
tương ứng như sau:
(A, B): 4
(A, C): 2
(B, D): 5
(C, D): 1
(C, E): 6
(D, E): 3
(D, F): 8
(E, F): 2
Giả sử chúng ta muốn tìm đường đi ngắn nhất từ đỉnh A đến đỉnh F bằng thuật toán Dijkstra. Quá
trình áp dụng thuật toán sẽ diễn ra như sau:
Khởi tạo: Đặt khoảng cách từ A đến chính nó là 0 và khoảng cách từ A đến các đỉnh khác
là vô cùng. Đặt đỉnh hiện tại là A.
Lặp lại cho đến khi tất cả các đỉnh đều được xét:
Chọn đỉnh chưa được xét có khoảng cách nhỏ nhất từ đỉnh xuất phát. Ban đầu, A sẽ được
chọn.
Đánh dấu A là đã xét.
Cập nhật khoảng cách từ A đến các đỉnh kề chưa được xét thông qua A:
Khoảng cách từ A đến B là 4 (từ A đến B trực tiếp).
Khoảng cách từ A đến C là 2 (từ A đến C trực tiếp).
Cập nhật đỉnh cha cho B và C là A.
Chọn đỉnh chưa được xét có khoảng cách nhỏ nhất từ đỉnh xuất phát. Lần này, C sẽ được
chọn.
Đánh dấu C là đã xét.
Cập nhật khoảng cách từ A đến các đỉnh kề chưa được xt thông qua C:
Khoảng cách từ A đến D là 3 (từ A đến C rồi từ C đến D).
Khoảng cách từ A đến E là 8 (từ A đến C rồi từ C đến E).
Cập nhật đỉnh cha cho D và E là C.
Chọn đỉnh chưa được xét có khoảng cách nhỏ nhất từ đỉnh xuất phát. Lần này, B sẽ được
chọn.
Đánh dấu B là đã xét.
Cập nhật khoảng cách từ A đến các đỉnh kề chưa được xét thông qua B:
Khoảng cách từ A đến D là 3 (từ A đến B rồi từ B đến D).
Khoảng cách từ A đến E là 7 (từ A đến B rồi từ B đến E).
Cập nhật đỉnh cha cho D và E là B.
Chọn đỉnh chưa được xét có khoảng cách nhỏ nhất từ đỉnh xuất phát. Lần này, D sẽ được
chọn.
Đánh dấu D là đã xét.
Cập nhật khoảng cách từ A đến các đỉnh kề chưa được xét thông qua D:
Khoảng cách từ A đến E là 6 (từ A đến C rồi từ C đến D rồi từ D đến E).
Khoảng cách từ A đến F là 11 (từ A đến C rồi từ C đến D rồi từ D đến F).
Cập nhật đỉnh cha cho E và F là D.
Chọn đỉnh chưa được xét có khoảng cách nhỏ nhất từ đỉnh xuất phát. Lần này, E sẽ được
chọn.
Đánh dấu E là đã xét.
Cập nhật khoảng cách từ A đến đỉnh kề chưa được xét thông qua E:
Không có đỉnh kề chưa được xét thông qua E.
Chọn đỉnh chưa được xét có khoảng cách nhỏ nhất từ đỉnh xuất phát. Lần này, không còn
đỉnh nào được chọn.
Kết quả: Khi thuật toán Dijkstra kết thúc, ta có thể xây dựng đường đi ngắn nhất từ A
đến F bằng cách theo dấu của các đỉnh cha đã lưu trữ trong quá trình thuật toán. Trong ví
dụ này, đường đi ngắn nhất từ A đến F là A -> C -> D -> F, với khoảng cách là 11.
4.3. Ứng đụng thuật toán Dijkstra
Dựa vào sơ đồ nhà kho thực tế, nhóm đã tự vẽ lại mô hình nhà kho mới để tối ưu hóa quá trình
quản lý, lưu trữ và vận chuyển hàng hóa để phù hợp với việc mô phỏng và viết thuật toán. Mô hình
nhà kho mới này được thiết kế dựa trên các nguyên tắc và phương pháp hiện đại trong lĩnh vực quản
lý chuỗi cung ứng và logistics.
Mô hình nhà kho mới tập trung vào việc tối đa hóa hiệu suất và giảm thiểu thời gian và công sức
trong quá trình xử lý hàng hóa. Đầu tiên, nhóm đã xác định các khu vực lưu trữ phù hợp, dựa trên tần
suất sử dụng và tính khả dụng của các mặt hàng. Những mặt hàng có tần suất sử dụng cao sẽ được đặt
gần khu vực xuất nhập hàng và được lưu trữ dễ dàng truy cập
Ngoài ra, nhóm đã áp dụng các nguyên tắc của quy trình đặt hàng hiện đại để tối ưu hóa việc vận
chuyển hàng hóa trong nhà kho. Điều này bao gồm việc xác định các tuyến đường tối ưu để di chuyển
hàng hóa từ khu vực lưu trữ đến các khu vực khác trong nhà kho. Bằng cách sử dụng thuật toán
Dijkstra hoặc các phương pháp tối ưu hóa tương tự, nhóm đã xác định các tuyến đường ngắn nhất và
hiệu quả nhất để robot có thể giảm thiểu thời gian và công sức trong việc di chuyển hàng hóa.
Tổng quan, mô hình nhà kho mới dựa vào sơ đồ nhà kho đã được thay đổi và cải tiến để tối ưu
hóa quá trình quản lý, lưu trữ và vận chuyển hàng hóa, mô phỏng và viết thuật toán. Bằng cách áp
dụng các nguyên tắc và phương pháp tìm hiểu để robot đạt được hiệu suất cao, tiết kiệm thời gian và
tối ưu hóa tài nguyên trong hoạt động của nhà kho.
Hình 5.2. Bản đồ của mô hình nhà kho
Cùng với những kết quả đạt được thì cũng có một số mặt hạn chế mà nhóm chưa thể giải quyết
được trong kì đồ án này như:
MCU không đáp ứng được khi hệ thống phức tạp hơn.
Đáp ứng của PID chỉ ở mức tương đối.
Hiện tại thuật toán chỉ mới được triển khai trên một xe.
5.3 Hướng phát triển
Nhóm sẽ tập trung hoàn thiện và phát triển thêm đồ án như sau:
Sử dụng thêm một MCU song song hoặc nâng cấp lên STM32F4.
Thực nghiệm thêm để hoàn thiện bộ PID.
Phát triển + kết hợp thêm các thuật toán mới.
Thiết kế giao diện điều khiển giám sát trên Web
TÀI LIỆU THAM KHẢO