Thuật toán ORMSTC

Một phần của tài liệu Nghiên cứu thuật toán tìm đường bao phủ một nhóm robot di động (Trang 35)

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

37. Xóa robot j khỏi mảng connection và thông báo 38. Vẽ cạnh từ 𝑋 tới 𝑌 và thông báo

39. Di chuyển tới subcell của 𝑌 bằng cách đi theo bên phải cây bao trùm

40. Thực thi ORMSTC(X, Y) 41. Kết thúc vòng lặp

42. Dừng

Giải thích mã giả thuật toán 5:

Thuật toán 5 mô tả quá trình làm việc của một robot. Tất cả các robot đều thực thi thuật toán này, bởi vậy có bao nhiêu robot thì sẽ có bấy nhiêu thể hiện của thuật toán này. Từ dòng 1 tới dòng 27 của thuật toán này, về cơ bản là giống thuật toán Spiral-STC. Tuy nhiên, nó thêm vào đó một điểm quan trọng, đó là có kiểm tra xem robot đồng nghiệp có còn sống hay không. Mảng connection dùng để lưu kết nối giữa cạnh được tạo bởi một cell của robot hiện tại với một cell của robot mà nó gặp trên đường di chuyển. Giá trị của 𝑐𝑜𝑛𝑛𝑒𝑐𝑡𝑖𝑜𝑛[𝑗][0] lưu giá trị lần gặp đầu tiên của robot hiện tại với robot 𝑗, và giá trị của 𝑐𝑜𝑛𝑛𝑒𝑐𝑡𝑖𝑜𝑛[𝑗][1] lưu giá trị lần gặp gần nhất của robot hiện tại với robot 𝑗. Giá trị này được lưu nhằm mục đích phục vụ cho việc xác định điểm để giúp đỡ robot 𝑗 nếu robot đó chết sau khi robot 𝑖 hoàn thành

công việc (dòng 33). Một điểm quan trọng nữa khiến nhóm robot khác biệt với đơn robot, đó là có kết nối giữa các robot. Như trong mã giả, ta có thể thấy robot hiện tại liên tục có các thông báo với các robot khác để cập nhật thông tin. Robot hiện tại, sau khi hoàn thành nhiệm vụ của mình, nó chưa dừng lại hẳn mà vẫn tiếp tục kiểm tra định kỳ xem các robot có kết nối với nó còn sống hay không (dòng 29). Nếu có robot có kết nối với nó đã chết, robot hiện tại sẽ tiến hành giúp đỡ robot kia, nhằm đảm bảo công việc chung được hoàn thành.

3.3.3.Phân tích các tiêu chí của thuật toán 3.3.3.1. Tính mạnh mẽ 3.3.3.1. 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ẽ. Các robot khi gặp một cell cũ của một đồng nghiệp khác, nó đã tiến hành lưu lại vị trí gặp nhau đó nhằm giúp đỡ trong tình huống robot đồng nghiệp bị chết sau này.

Đoạn sau thuật toán, robot đã hoàn thành công việc nhưng chưa hoàn toàn dừng hẳn ngay lập tức, mà vẫn tiếp tục hoạt động cho đến khi tất cả các đồng nghiệp hoàn thành công việc. Trong khi các đồng nghiệp chưa hoàn thành, nó định kỳ kiểm tra trạng thái của các robot đồng nghiệp xem có robot nào bị chết hay không.

3.3.3.2. 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:

- Trong trường hợp 𝑘 = 1:

Với chỉ một robot, thuật toán trên sẽ thực thi đúng theo thuật toán Spiral- STC, do đó sẽ bao phủ toàn bộ được khu vực làm việc.

- Trong trường hợp 𝑘 > 1:

một đường bao phủ cho một vài cell mà nó đảm nhiệm. Các robot khác sẽ xem như các cell này đã bị chiếm, và coi nó chính xác như việc nó là một cell được lấp đầy bởi một vật cản. Bởi vậy, tất cả những cell khác cũng được chia thành 𝑘 − 1 đường đi và được 𝑘 − 1 robot bao phủ, giống như với giả sử ban đầu được đặt ra. Robot 𝑖 cũng xem tất cả các cell bị chiếm bởi 𝑘 − 1 robot kia như là một vật cản, do đó nhiệm vụ của nó trở thành bao phủ toàn bộ một khu vực làm việc, giống như với trường hợp 𝑘 = 1 ở trên.

3.3.3.3. Tính không dư thừa

Nếu tất cả robot đều thực thi theo thuật toán ở trên, và không robot nào bị chết, sẽ không có cell nào bị đ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 bị lỗi, và mỗi robot chỉ đi theo những cell được xây dựng bởi cây bao trùm. Nếu một cell đã được robot khác đi, nó đã được đánh dấu là cell cũ, bởi vậy không có một robot nào khác có thể đi vào cell đó nữa. Nếu robot không có quay lui, sẽ không có một cell nào bị đi quá nhiều hơn 1 lần

3.4. Đề xuất cải tiến và phát triển thuật toán MSTC

3.4.1.Đề xuất và phát triển thuật toán ORMSTC dựa trên cách tạo cây con trên MSTC-offline trên MSTC-offline

3.4.1.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 chắc chắn là được quét qua các khu vực làm việc để phát hiện một đặc trưng quan trọng, 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.

Không biết ranh giới khu vực làm việc chính xác và 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 ô có kích thước 2Dx2D, mỗi ô gồm bốn ô con kích thước DxD. Nếu có chướng ngại vật thuộc một phần của ô thì xem 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 cell ban đầu được coi là trống.

Điểm khởi đầu của thuật toán là khu vực làm việc và k robot với vị trí ban đầ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 ô 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.4.1.2. Ý tưởng cải tiến thuật toán

Thuật toán ORMSTC là dùng cho robot khi nó chưa biết vùng làm việc nó được áp dụng rất nhiều trong thực tiễn. Thuật toán ORMSTC chính là là thuật toán mỗi robot xậy dựng cây con của riêng nó. Với mỗi nodes của cây con này sẽ không thuộc bất ký cây nào nữa. Và nó thực hiện xong khi bất kỳ cell nào thuộc vùng làm việc sẽ đươc tìm thấy trên một cây con nào đó. Mỗi cây con thêm cell được dựa trên cùng một thuật toán STC (thường sử dụng thuật toán đường xoắn ôc Spiral-STC). Thuật toán ORMSTC dựa vào server để biết thông tin trạng thái của từng robot cũng như môi trường thông qua các robot, còn robot chính là các client đưa và tìm kiếm thông tin. Mỗi robot thực hiện riêng lẻ. Chính vì thế việc phân chia cell để đảm bảo số lượng cell ban cho mỗi robot phụ thuộc rất nhiều vào vị trí ban đầu của robot.

Hình 3.3: Nhóm robot sử dụng ORMSTC trên thuật toán Spiral-STC

Hình trên là ví dụ thấy rõ việc phân chia cell ở thuật toán ORMSTC dựa trên thuật toán Spiral-STC. Robot 1 chỉ được bao phủ 2 cell trong khi robot 2 bao phủ tới với 11 ô. Việc thực hiện sẽ không tối ưu thời gian.

Thuật toán MSTC - Offline là một thuật toán đã biết môi trường. Chính vì vậy nó áp dụng trong thực tiễn không cao. Thuật toán xây dựng cây bao trùm dựa trên các cây con của các robot. Mỗi nút của cây con tạo dựa vào khoảng cách xa nhất tối thiểu theo khoảng cách Manhattan của robot đó đến các robot còn lại. Mỗi nodes của cây con được thêm vào để cho khoảng cách so với các robots còn lại là xa nhất. Và thuật toán cố gắng đảm bảo phân chia đều cell trên vùng làm việc cho mỗi cây con của mỗi robot.

Hình 3.4: Nhóm robot sử dụng MSTC- Offline

Hình trên là ví dụ các cây con môi trường đã biết dựa trên các tạo cây của thuật toán MSTC – Offline. Ví dụ trên thấy rõ lúc này robot 1 có 8 cell còn robot 2 có 5 cell chính vì vậy thời gian sẽ được rút ngắn nhất có thể.

Nhằm tận dụng được những điểm mạnh tính linh hoạt của thuật toán ORMSTC để thực hiện trên môi trường chưa biết và thuật toán MSTC Offline để phân chia cell đảm bảo chia cell đều nhất có thể trên vùng làm việc. Trong mục này nêu rõ kết hợp hai thuật toán trên cho một nhóm robot. Việc kế hợp hai thuật toán trên ta tạm gọi là MSTC.

3.4.1.3. Phát triển thuật toán

Cũng giống với các thuật toán ORMSTC ở trên nó cũng xây dưng một hàm khởi tạo ban đầu để thực hiện các khởi tạo cơ bản. Khác ở đây thay dùng một mảng

Mã giả thuật toán 6: Thuật toán 6 MSTC (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. S1..4 ←4 cell lân cận của X theo bốn hướng (trái, phải, trên, dưới)

2. List_cell = null 3. for 𝑖 ← 14 do

4. if 𝑁𝑖 = 𝑣ậ𝑡𝑐ả𝑛 then

5. continue tiếp tục với giá trị 𝑖 tiếp theo

6. if 𝑁𝑖 đã nằm trong một cạnh của cây bao trùm của một 𝑗 robot khác

then

7. Hỏi robot 𝑗 xem nó còn sống không 8. if robot 𝑗 trả lời then

9. backtrack←( 𝑐ạ𝑛ℎ 𝑡ừ 𝑋 𝑡ớ𝑖 𝑁𝑖, 𝑡ê𝑛 𝑟𝑜𝑏𝑜𝑡) 10. continue tiếp tục với giá trị 𝑖 tiếp theo

11. //robot kia đã chết

12. else

13. if tìm thấy backtrack.find(tên robot chứa Ni ) then

14. Xóa robot 𝑗 khỏi backtrack

15. Xóa cạnh tất cả cạnh nối với cell robot 𝑗 đã đi và thông báo nó đã xong

16. List_cell ← Ni

17. //không thuộc bất kỳ cây con nào

18. else

19. List_cell ← Ni 20. Kết thúc vòng lăp

21. if List_cell.size()>0 then

23. Tìm Ni khoảng cách xa nhất tối thiểu theo Manhattan của robot đó đến các robot còn lại

24. Vẽ cạnh từ 𝑋 tới 𝑁𝑖 và thông báo 25. Thực thi MSTC(X, Ni)

26. else

27. Trở về cell cha

28. Thực thi MSTC(W, T)//T là cell cha cua o W 29. if trở về subcell điểm khởi đầu 𝑠𝑖 then

30. Thông báo hoàn thành công việc của mình

31. while tất cả các robot vẫn chưa thông báo hoàn thành công việc của

chúng do

32. Kiểm tra định kỳ các robot có kết nối với mình xem chúng còn sống không

33. if robot 𝑗 đã chết then

34. Xóa cạnh nối với cell robot 𝑗 đã đi và thông báo 35. Thông báo mình chưa hoàn thành công việc

36. Lấy thông tin cell cần phải đến gần nhất từ vị trí nó đứng trong backtrack

37. Di chuyển điểm đã kết nối với robot đã chết

38. 𝑋 ←cell mình kết nối với robot j

39. 𝑌 ←cell robot j kết nối với mình

40. Xóa các cell của robot j mà đã được cập nhật

41. Xóa robot j khỏi mảng backtrack và thông báo robot j đã thực

Một phần của tài liệu Nghiên cứu thuật toán tìm đường bao phủ một nhóm robot di động (Trang 35)

Tải bản đầy đủ (PDF)

(83 trang)