3.2.2.1. Xây dựng cây bao trùm
Khi xây dựng cây trong một hệ thống với duy nhất một robot thì ảnh hưởng của cấu trúc của cây về mặt lý thuyết không ảnh hưởng đến thời gian bao phủ. Rõ ràng, người ta có thể muốn xây dựng cây bao trùm với đặc điểm đặc biệt, ví dụ như giảm thiểu số lần chọn hướng. Tuy nhiên, thời gian bao phủ vẫn được bảo đảm bởi các thuật toán STC là tuyến tính với khu vực làm việc dựa trên lưới cell vuông, vì mỗi cell trừ các cell biên được bao phủ một lần, do đó tổng thời gian bảo hiểm là N. Mặt khác, trong các hệ thống đa robot, cấu trúc của cây có thể ảnh hưởng rất quan trọng vào thời gian bao phủ. Sự lựa chọn của cây bao trùm dựa vào vị trí ban đầu của các robot. Bất kỳ thuật thoán bao phủ đa robot nếu đồng nhất đều dựa trên một cây bao trùm thì cải thiện tối đa 2 lần [3]. Có thể chứng minh, gọi Di là khoảng cách giữa robot Ri và Ri+1. Tính toán khoảng cách lớn nhất Dmax= max R1≤i≤N{Di} thời gian bao phủ sử dụng thuật toán không quay lui. Dựa vào Dmax có thể xác định thời gian bao phủ là A. Khi robot đồng nhất dựa trên một cây bao trùm thì thời gian bao phủ giảm xuống [𝐷𝑚𝑎𝑥
2 ]. Nếu trường hợp xấu nhất với robot Dmax di chuyển đến
các robot khác thì đối với một đoạn khác Dj đòi hỏi thời gian tối đa là nếu cho phép quay lui sẽ là t' >[𝐷𝑚𝑎𝑥
2 ]nói cách khác nó sẽ cải thiện được 𝐷𝑚𝑎𝑥
Mã giả thuật toán 1:
Thuật toán 1: Creat_tree(W, S0,..., Sk-1)
Đầu vào:S0,..., Sk-1 vị trí ban đầu của các robot, W môi trường làm việc là đồ
thị dạng lưới
Các bước tiến hành:
1. Xây dựng các cây con
2. For Ri,1 ⩽ 𝑖 ⩽ 𝑘 do Với mỗi robot Ri
3. Tìm và tính toán các cell liền kề mới (trái, phải, trên, dưới) list_cell ← Ni
4. If list_cell.size()>1 then
5. Tính toán khoảng cách Manhattan và chọn một cell có khoảng cách Manhattan tối đa tối thiểu đến các robot khác 6. If list_cell. size() =0 then
7. Di chuyển thì thực hiện thủ tục Hilling(quay về nút gốc) 8. Tìm cầu của cho k cây con
a) Tìm ngẫu nhiên hợp lệ cầu B giữa các các cây con b) Tính toán thiết lập khoảng cách giữa hai cây liên tiếp Si c) Thiết lập giá trị khởi tạo ban đầu Best_result, S0
d) If Si > Best_result then
Best_result = Si 9. Trả về cây bao trùm Best_result
Giải thích mã giả thuật toán 1:
Thuật toán 1 [3] là thuật toán xây dựng cây với hai bước quan trong đó là tạo cây con và tìm cầu nối bất kỳ trên cây để được cây hoàn chỉnh. Bước 1 với mỗi robot i với 1 ⩽ 𝑖 ⩽ 𝑘 xây dựng 1 các lá cho cây con bằng cách tìm các cell liên kề theo bốn hướng (trái, phải, trên, dưới) việc tìm thấy nếu 1 cell thì đi đến cell đó.
điểm bắt đầu S0, nếu chọn ngẫu nhiên được cầu Si có khoảng cách giữa hai cây con là xa hơn S0 thì lấy cầu đó.
Hình 3.1: Xây dựng cây bao trùm
3.2.2.2. MSTC Offline không quay lui
Công việc bao phủ được chia làm hai giai đoạn [3]. Đầu tiên, thuật toán 2 xây dựng một đường đi STC sử dụng dựa trên cây đã tạo dựa trên thuật toán 1 theo hướng ngược kim đồng hồ. Thuật toán 3 là sử dụng đường đi STC của thuật toán 2 để thực hiện việc bao phủ, mỗi robot đươc xác định vị trí ban đầu trên đường đi và dựa vào đó để đi đến vị trị của robot khác. Điều này được thực hiện khi đảm bảo rằng các robot có thể giúp đỡ nếu robot kế tiếp bị lỗi. Lưu ý rằng việc thực hiện của thuật toán 2 là hoàn toàn không phải tập trung, như mỗi robot thực hiện công việc độc lập của mình.
Mã giả thuật toán 2:
Thuật toán 2 kế hoạch đường đi MSTC (W, S0,..., Sk−1)
Đầu vào:S0,..., Sk-1 vị trí ban đầu của robot, W là khu vực làm việc
1. Chọn bất kì điểm bắt đầu: S0 2. Creat_tree(W, S0,..., Sk-1)
3. Bắt đầu từ S0, xây dựng P, đường đi STC với khu vực làm việc W dựa trên cây bao trùm trên.
4. Với các điểm S0,..., Sk−1 dọc đường đi STC, Bắt đầu từ S0 và di chuyển trong 1 hướng ngược kim đồng hồ.
5. Trả về đường đi P, ứng với các điểm ban đầu của robot S0,..., Sk−1
Giải thích mã giả thuật toán 2:
Bắt đầu từ điểm S0, dựa vào cây khung của thuật toán 1, thuật toán 2 xây dựng một cây bao trùm cho khu vực làm việc W xây dựng đường đi bao trùm dòng 3. Trả về một con đường hướng ngược kim đồng hồ dọc theo cây bao trùm bắt đầu tại vị trí S0 đi qua tất cả các điểm bắt đầu của tất cả robot dòng 5 hình 3.2. Việc xây dựng các cây bao trùm trong thuật toán 1 có thể được thực hiện bởi một robot và truyền tin tới những robot khác, hoặc các robot biết vị trí các robot khác và được thực hiện bởi mọi con robot độc lập trong khi nó sử dụng cùng một thuật toán cho việc xây dựng cây.
Mã giả thuật toán 3:
Thuật toán 3 MSTC không quay lui (W, S0,..., Sk−1)
Đầu vào:S0,..., Sk-1 vị trí ban đầu của robot, W là khu vực làm việc
Các bước tiến hành:
1. i ← ID của robot hiện tai
2. t ← i ⊕ 1 vị trí của robot tiếp theo, theo chu kỳ 3. while vị trí hiện tại ≠ St -1do
4. Di chuyển dọc theo STC đến St, hướng ngược kim đồng hồ. 5. Thông báo hoàn thành đoạn đường[Si, St )
6. while robot Rt khác đang còn sống và các vị trí [S0,..., Sk-1, S0 ] chưa hoàn
thành do 7. Chờ
8. if (robot Rt không còn sống và vị trí [S0,..., Sk-1, S0] chưa hoàn
thành) then
9. i ← t Lấy ID của robot tiếp theo
10. t ← t ⊕ 1 lấy vị trí của robot tiếp theo của robot tiếp theo 11. quay về bước 3
12. Kết thúc vòng lặp 13. Dừng
Giải thích mã giả thuật toán 3:
Đường đi đã được xây dựng và chia thành nhiều phần, thuật toán 1 được thực hiện xây dựng cây bao trùm dựa trên vị trí ban đầu của tất cả các robot. Sau giai đoạn khởi tạo (ở dòng 1-2), mỗi robot bắt đầu bao phủ phần của mình [Si,..., Sj), từ vị trí hiện tại Si của nó đến vị trí ban đầu Sj của robot tiếp theo, dọc theo đường đi STC theo cây bao trùm có hướng đi ngược chiều kim đồng hồ (dòng 3-4). Từ dòng 6-11 đảm bảo tính mạnh mẽ: Nếu một robot lỗi, robot đi tới điểm bắt đầu của robot đó có trách nhiệm bao phủ phần của nó.
3.2.2.3. Phân tích các tiêu chí của thuật toán
- Tính mạnh mẽ
Xét về mặt lý thuyết, thuật toán này đã đảm bảo được tính mạnh mẽ. Robot Ri khi thực hiện xong công việc của mình theo hướng ngược kim đồng hồ (đến vị trí Si đến Sj vị trí tiếp theo của robot Rj) và nếu robot Rj lỗi thì Ri sẽ thực hiện công việc của robot Rj và công liên tục đến khi nó nhận được tất cả robot khác đã thực hiện xong.
- Tính bao phủ toàn bộ
Với khu vực làm việc W và k robot, tổng hợp toàn bộ những đường bao phủ của các robot con đảm bảo bao phủ được hoàn toàn W. Tính chất này có thể được chứng minh như sau:
o Trong trường hợp 𝑘 = 1:
Với chỉ một robot, việc xây dựng cây con chính là cây bao trùm của thuật toán 2 bỏ qua bước 2, tìm cell mới tính toán khoảng cách cell mới. Tất cả khoảng cách là bằng nhau nên nó sẽ lấy giá trị đầu tiên nó đã gán trong list danh sách các ô. Nếu robot không nhìn thấy cell nào nữa thì robot thực hiện tương tự như thuật toán 1 đó là quay về nodes gốc. Việc thực hiện thuật toán đến khi kết thúc không tìm thấy cell nào nữa. Vậy cây bao trùm chứa tất các cell khu vực làm việc W. Và robot sẽ di chuyển điểm khởi đầu S0 đi theo ngược chiều kim đồng hồ trên cây bao trùm với đến S0. Mỗi subcell thuộc cell trên nodes cây bao trùm sẽ được thăm duy nhất một lần. Vậy sẽ thuật toán bao phủ tất cả cell trên khu vực W.
o Trong trường hợp 𝑘 > 1:
Với cùng một cây bao trùm chứa toàn bộ các cell trên khu vực làm việc W vì cây bao trùm chính là sự kết hợp của các cây con. Mỗi cây con là việc tìm kiếm các nodes tìm theo bốn hướng. Cell thuộc nodes của cây con này sẽ
được thăm ít nhất 1 lần. - Tính không dư thừa
Nếu tất cả robot thực thi theo thuật toán trên và không có robot nào bị chết, thì sẽ không có subcell nào đi nhiều hơn 1 lần điều này có thể chứng minh như sau:
Nếu không có robot nào lỗi thì việc xây dựng đường đi dựa trên cùng một cây bao trùm dựa vào vị trí ban đầu của mỗi robot nên robot nhận được đường đi của robot đó ví dụ robot i hoàn thành đường đi [Si,..., Sj) đến robot j. Cây bao trùm là cây chứa các cell mỗi cell chỉ thuộc duy nhất một nodes trên cây (ô chỉ thuộc duy nhất một cây con, mỗi cây con chỉ chứa 1 cell duy nhất trên cây). Nếu không có robot nào lỗi thì tất cả robot đi theo đường đi dựa trên cây bao trùm. Đường đi dựa vào cây bao trùm đi theo chiều ngược kim đồng hồ từ S0,..., Sk-1, S0 thì mỗi subcell thuộc cell sẽ được thăm 1 lần.
3.3. Thuật toán bao phủ với một nhóm robot với môi trường chưa rõ 3.3.1.Khu vực bao phủ 3.3.1.Khu vực bao phủ
Mỗi robot là một công cụ có kích thước là D để dễ thuận tiện hình dạng mỗi robot xem như một hình vuông kích thước D. Mục tiêu là để bao phủ các khu vực làm việc sử dụng công cụ này. Trong các ứng dụng thực tế, công cụ này có thể tương ứng với các cảm biến và kích thước D có thể được xác định bởi phạm vi hiệu quả của bộ cảm biến. Các robot có thể di chuyển liên tục trong bốn hướng cơ bản (lên, xuống, trái, phải), và có thể xác định vị trí bản thân trong khu vực làm việc để trong phạm vi một ô con kích thước D.
Robot không biết ranh giới khu vực làm việc chính xác của tất cả các vị trí chướng ngại vật (được giả định là tĩnh), nhưng các vị trí ban đầu của chúng độc lập. Chia khu vực này thành các ô vuông có kích thước 2Dx2D, mỗi ô gồm bốn ô con kích thước DxD. Nếu ô có một phần là chướng ngại vật thì xem như ô đó chính là chướng ngại vật. Biểu thị số lượng ô trong lưới với N, và chỉ rõ số lượng ô con của n, tức là, N = 4n. Khu vực ban đầu là không được biết như vậy mỗi ô ban đầu được coi là trống.
đầu độc lập: A0,..., Ak-1. Các vị trí ban đầu của mỗi robot được giả định là trong một cell không có chướng ngại vật, và robot sẽ biết vị trí của nó. Giả định làm việc của thuật toán, robot có thể xác định vị trí của chính nó trong triển khai lưới của khu vực làm việc.
3.3.2.Thuật toán ORMSTC
Như đã đề cập ở trên, STC (Spanning Tree Coverage) là giải thuật on-line dùng cho một robot di động, chia nhỏ không gian làm việc thành bản đồ [3]. Dựa trên thuật toán này, nhằm tận dụng được những điểm mạnh của nhóm robot, người ta đã phát triển các thuật toán sử dụng cây bao trùm bao trùm sử dụng nhiều robot.
ORMSTC là viết tắt của cụm từ Online Robust Multi-robot STC. Đây là thuật toán MSTC trong trường hợp on-line.
Mã giả thuật toán 4:
Thuật toán 4 On-line ORMSTC initialization ()
Đầu vào: W là khu vực làm việc, vị trí của robot.
Các bước tiến hành:
1. Chia khu vực làm việc thành một lưới các cell có kích cỡ 2Dx2D
2. Tiếp tục phân chia các cell thành 4 subcell có kích cỡ DxD 3. 𝑖 ← ID của robot hiện tại
4. if 𝐴𝑖 ≠ chính giữa một subsell then
5. 𝑠𝑖 ← subcell
6. Di chuyển tới 𝑠𝑖
7. else
8. 𝑠𝑖 ← 𝐴𝑖
9. 𝑆𝑖 ← cell có chứa 𝑠𝑖
10. Thông báo 𝑆𝑖 là cell khởi đầu của mình tới tất cả các robot
Giải thích mã giả thuật toán 4:
Thuật toán 4 ở trên là khởi tạo của thuật toán MSTC on-line nói chung. Tất cả các robot cùng chạy khởi tạo này. Mục đích chính của khởi tạo là để thiết lập môi trường làm việc cho các robot, cho phép robot biết được mình ở đâu trong bản đồ. Hai dòng đầu tiên là việc phân chia các cell và subcell theo đúng như những giả định của các thuật toán STC khác. Dòng 3 gán cho một robot cụ thể một định danh nhằm xác định nó với các robot khác. Từ dòng 4 tới dòng 8 là đoạn để robot di chuyển vào đúng chính giữa một subcell. Do ban đầu vị trí của các robot là ngẫu nhiên, nên sau quá trình phân chia cell và subcell ở dòng 1 và dòng 2, khả năng các robot không nằm đúng một subcell là rất cao, bởi vậy cần đưa robot về đúng subcell, phục vụ cho việc di chuyển ở các bước tiếp theo. Ở đây cũng cần chú ý là các robot cần phải di chuyển vào đúng subcell có số thứ tự đã định sẵn. Lý do là bởi nếu không làm như vậy, hệ quy chiếu của các robot sẽ không giống nhau, khiến cho việc các robot nhìn 1 cell là cell có thể đi vào hay là vật cản bị ảnh hưởng. Sau khi vào đúng một subcell, robot i nhận một subcell xác định làm subcell khởi đầu (dòng 8) và nhận một cell xác định làm cell khởi đầu (dòng 9). Sau khi nhận vị trí ban đầu, nó thông báo vị trí của mình cho các robot khác (dòng 10), và đồng thời cũng cập nhật lại vị trí ban đầu của các đồng nghiệp của nó (dòng 11). Tại dòng 12, một mảng connection được khởi tạo với toàn giá trị null, nhằm mục đích lưu kết nối với các đồng nghiệp sau này. Mảng connection này sẽ được trình bày kỹ hơn trong phần giải thích mã giả thuật toán 5 ở dưới.
Mã giả thuật toán 5:
Thuật toán 5 ORMSTC (W,X)
Đầu vào: Cell robot vừa đi ra W (cell cha), cell robot vừa đi vào X
Các bước tiến hành:
1. 𝑁1..3 ← 3 cell lân cận của X theo chiều kim đồng hồ, bắt đầu từ sau cell W 2. for 𝑖 ← 13 do
3. if 𝑁𝑖 = 𝑣ậ𝑡𝑐ả𝑛 then
5. if 𝑁𝑖 đã nằm trong một cạnh của cây bao trùm của một 𝑗 robot khác
then
6. Hỏi robot 𝑗 xem nó còn sống không 7. if robot 𝑗 trả lời then
8. if 𝑐𝑜𝑛𝑛𝑒𝑐𝑡𝑖𝑜𝑛[𝑗][0] = 𝑛𝑢𝑙𝑙 then
9. 𝑐𝑜𝑛𝑛𝑒𝑐𝑡𝑖𝑜𝑛[𝑗][0] = 𝑐𝑜𝑛𝑛𝑒𝑐𝑡𝑖𝑜𝑛[𝑗][1] = 𝑐ạ𝑛ℎ𝑡ừ𝑋𝑡ớ𝑖𝑁𝑖
10. continue tiếp tục với giá trị 𝑖 tiếp theo 11. else
12. 𝑐𝑜𝑛𝑛𝑒𝑐𝑡𝑖𝑜𝑛[𝑗][1] = 𝑐ạ𝑛ℎ𝑡ừ𝑋𝑡ớ𝑖𝑁𝑖
13. continue tiếp tục với giá trị 𝑖 tiếp theo
14. else
15. //robot 𝑗 đã chết
16. Xóa robot 𝑗 khỏi mảng 𝑐𝑜𝑛𝑛𝑒𝑐𝑡𝑖𝑜𝑛 và thông báo rằng robot đó đã chết
17. Xóa cạnh nối với cell robot 𝑗 đã đi và thông báo 18. Vẽ cạnh từ 𝑋 tới 𝑁𝑖 và thông báo di chuyển tới 𝑠𝑖
19. Di chuyển tới một subcell của 𝑁𝑖 bằng cách đi theo bên phải cạnh cây bao trùm
20. Thực thi ORMSTC(X, 𝑁𝑖) 21. if 𝑋 ≠ 𝑆𝑖 then
22. Di chuyển lại từ 𝑋 tới 𝑊 dọc theo bên phải cạnh cây bao trùm 23. return từ chỗ gọi đệ quy
24. if 𝑊 ≠ 𝑣ậ𝑡 𝑐ả𝑛 then
25. Thực thi ORMSTC(X, W)
26. Trở về subcell khởi đầu 𝑠𝑖 bằng cách đi theo bên phải cạnh cây bao trùm 27. Thông báo hoàn thành công việc của mình
30. if robot 𝑗 đã chết then
31. Xóa cạnh nối với cell robot 𝑗 đã đi và thông báo 32. Thông báo mình chưa hoàn thành công việc
33. Lựa chọn xem 𝑐𝑜𝑛𝑛𝑒𝑐𝑡𝑖𝑜𝑛[𝑗][0] hay 𝑐𝑜𝑛𝑛𝑒𝑐𝑡𝑖𝑜𝑛[𝑗][1] gần với mình hơn, di chuyển theo chiều kim đồng hồ hay ngược chiều kim đồng hồ theo cạnh của cây bao trùm của mình thì thích hợp hơn
34. Di chuyển theo hướng đã chọn ở trên tới điểm đã kết nối với robot đã chết
35. 𝑋 ←cell mình kết nối với robot j
36. 𝑌 ←cell robot j kết nối với mình