You are on page 1of 83

LỜI CAM ĐOAN

Tôi cam đoan đây là công trình nghiên cứu của riêng tôi trong đó có sự giúp
đỡ rất lớn của thầy hướng dẫn TS Ngô Lam Trung.
Các nội dung nghiên cứu, số liệu và kết quả nêu trong luận văn là trung thực
và chưa từng được ai công bố trong bất kỳ công trình nào khác.
Trong luận văn, tôi có tham khảo đến một số tài liệu đã được liệt kê tại phần
Tài liệu tham khảo ở cuối luận văn. Các tài liệu tham khảo được trích dẫn trung
thực trong luận văn.

Hà Nội, ngày… tháng … năm 2016


Tác giả

Nguyễn Thùy Linh

i
LỜI CẢM ƠN
Trước tiên, tôi xin chân thành cảm ơn TS Ngô Lam Trung đã dành thời gian
quý báu, tận tình hướng dẫn chỉ bảo, góp ý cho tôi trong suốt quá trình thực hiện
luận văn tốt nghiệp.
Tôi xin được cảm ơn sự giúp đỡ nhiệt tình của các Thầy giáo, Cô giáo trong
trường Đại học Bách Khoa.
Đặc biệt, tôi xin được bày tỏ lòng biết ơn sâu sắc tới các Thầy giáo, Cô giáo
trong Viện Công nghệ thông tin và Truyền thông đã tham gia giảng dạy tôi trong
quá trình học tập tại Trường. Các thầy cô đã tận tình giảng dạy, truyền đạt kiến
thức, tạo tiền đề cho tôi hoàn thành luận văn. Tôi xin cám ơn các bạn sinh viên
trong phòng Phòng thí nghiệm Hệ thống Máy tính và đặc biệt với hai bạn sinh viên
Trần Đức Sơn và Nguyễn Hữu Mạnh trong nhóm nghiên cứu irobot đã hỗ trợ tôi
mọi mặt để tôi hoàn thành luận văn.
Cuối cùng, tôi xin chân thành cảm ơn các bạn bè, đồng nghiệp và nhất là gia
đình tôi đã quan tâm và tạo mọi điều kiện tốt nhất, động viên, cổ vũ tôi trong suốt
quá trình học tập và nghiên cứu để hoàn thành tốt luận văn tốt nghiệp này.
Xin trân trọng cảm ơn!
Hà Nội, ngày 14 tháng 11 năm 2016
Tác giả

Nguyễn Thùy Linh

ii
PHỤ LỤC

LỜI CAM ĐOAN ....................................................................................................... i


LỜI CẢM ƠN ............................................................................................................ ii
PHỤ LỤC .................................................................................................................. iii
DANH MỤC HÌNH VẼ ............................................................................................ vi
DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ ......................................... viii
LỜI MỞ ĐẦU .............................................................................................................1
CHƯƠNG 1: TỔNG QUAN.......................................................................................3
1.1. Lý do chọn đề tài ................................................................................................3
1.2. Giới thiệu một số khái niệm liên quan ...............................................................4
1.2.1. Robot dịch vụ là gì? ...................................................................................4
1.2.2. Các ứng dụng của robot dịch vụ ................................................................4
1.2.3. Tìm đường bao phủ là gì? ..........................................................................5
1.3. Các phương pháp giải quyết và các công cụ tiếp cận bài toán bao phủ .............6
1.3.1. Phương pháp giải quyết bài toán bao phủ .................................................6
1.3.2. Các công cụ tiếp cận bài toán ....................................................................7
1.4. Nội dung đề tài và kết quả thực hiện được .........................................................7
1.4.1. Nội Dung đề tài ..........................................................................................7
1.4.2. Kết quả thực hiện được ..............................................................................7
CHƯƠNG 2: PHƯƠNG PHÁP GIẢI QUYẾT BÀI TOÁN BAO PHỦ....................9
2.1. Một số phương pháp giải quyết bài toán bao phủ với đơn robot .......................9
2.1.1. Phương pháp phân chia vùng làm việc cổ điển .........................................9
2.1.1.1. Thuật toán phân chia theo hình thang ............................................10
2.1.1.2. Thuật toán phân chia Boustrophedon ............................................11
2.1.2. Phương pháp dựa trên lưới ô vuông ........................................................12
2.1.2.1. Thuật toán tràn sóng wavefront .....................................................13
2.1.2.2. Thuật toán cây bao trùm.................................................................14

iii
2.2. Phương pháp giải quyết sử dụng một nhóm robot ...........................................16
CHƯƠNG 3: LÝ THUYẾT VÀ PHÁT TRIỂN THUẬT TOÁN MSTC ................19
3.1. Các tiêu chí đánh giá ........................................................................................ 19
3.2. Thuật toán bao phủ với một nhóm robot dựa trên cây bao trùm trên môi trường
đã biết ......................................................................................................................19
3.2.1. Khu vực bao phủ ......................................................................................19
3.2.2. Thuật toán MSTC Offline........................................................................20
3.2.2.1. Xây dựng cây bao trùm ..................................................................20
3.2.2.2. MSTC Offline không quay lui .......................................................22
3.2.2.3. Phân tích các tiêu chí của thuật toán ..............................................25
3.3. Thuật toán bao phủ với một nhóm robot với môi trường chưa rõ ....................26
3.3.1. Khu vực bao phủ ......................................................................................26
3.3.2. Thuật toán ORMSTC ...............................................................................27
3.3.3. Phân tích các tiêu chí của thuật toán........................................................31
3.3.3.1. Tính mạnh mẽ ................................................................................31
3.3.3.2. Tính bao phủ toàn bộ .....................................................................31
3.3.3.3. Tính không dư thừa ........................................................................32
3.4. Đề xuất cải tiến và phát triển thuật toán MSTC ...............................................32
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.....................................................................................................32
3.4.1.1. Khu vực bao phủ ............................................................................32
3.4.1.2. Ý tưởng cải tiến thuật toán .............................................................33
3.4.1.3. Phát triển thuật toán .......................................................................35
3.4.1.4. Phân tích các tiêu chí của thuật toán cải tiến .................................38
3.4.2. Triển khai thuật toán MSTC - Full ..........................................................40
3.4.2.1. Khu vực bao phủ ............................................................................40
3.4.2.2. Ý tưởng thuật toán .........................................................................41
3.4.2.3. Phát triển thuật toán .......................................................................43
3.4.2.4. Phân tích các tiêu chí đánh giá thuật toán cải tiến .........................47

iv
CHƯƠNG 4: CÀI ĐẶT VÀ THỬ NGHIỆM CÁC THUẬT TOÁN MSTC ...........50
4.1. Giới thiệu một số công cụ, phần mềm sử dụng ................................................50
4.1.1. Giới thiệu về ROS....................................................................................50
4.1.2. Giới thiệu về Gazebo ...............................................................................51
4.1.3. Giới thiệu robot Kobuki...........................................................................51
4.1.4. Giới thiệu Hokuyo ...................................................................................52
4.2. Giải quyết bài toán giao tiếp giữa các robot .....................................................53
4.2.1. Vấn đề phát sinh ......................................................................................53
4.2.2. Áp dụng lập trình socket với thuật toán MSTC.......................................54
4.3. Vấn đề quay lui robot và giải quyết tính mạnh mẽ khi thử nghiệm thuật toán 57
4.3.1. Vấn đề phát sinh ......................................................................................57
4.3.2. Áp dụng phương pháp khoảng cách để di chuyển đến cell cần đi ..........59
4.4. Vấn đề trong tính mạnh mẽ của thuật toán MSTC ...........................................60
4.5. Kết quả thử nghiệm ..........................................................................................61
4.5.1. Thử nghiệm trên môi trường mô phỏng: .................................................61
4.5.2. Đánh giá thuật toán trên môi trường giả lập ............................................68
4.5.3. Thử nghiệm trên môi trường thực tế .......................................................69
KẾT LUẬN ...............................................................................................................73
A. Kết luận ............................................................................................................73
B. Những điểm chưa hoàn thiện ...........................................................................73
C. Hướng phát triển đề tài .....................................................................................74
TÀI LIỆU THAM KHẢO.........................................................................................75

v
DANH MỤC HÌNH VẼ

Hình 1.1: Một ứng dụng thực tế của robot dịch vụ .....................................................5
Hình 2.1: Bao phủ một cell hình chữ nhật bằng thao tác đi ziczag ..........................10
Hình 2.2: Ví dụ về thuật toán phân chia hình thang .................................................11
Hình 2.3: Ví dụ về thuật toán BA* ...........................................................................12
Hình 2.4: Ví dụ phương pháp phân chia dựa trên lưới ô vuông với hai chướng ngại
vật ..............................................................................................................................13
Hình 2.5: Gán có số cho các ô bằng cách lan truyền bước sóng với ô bắt đầu (S) và
ô đích (G). .................................................................................................................14
Hình 2.6: Kế hoạch bao phủ sử dụng biến đổi khoảng cách với thuật toán wavefront
...................................................................................................................................14
Hình 2.7: Phân chia cell trong thuật toán cây bao trùm ............................................15
Hình 2.8: Đường bao phủ của robot khi áp dụng thuật toán Spiral – STC ...............16
Hình 2.9: Robot thực hiện bao phủ một cell theo thuật toán phân chia
boustrophedon sử dụng nhóm robot ..........................................................................18
Hình 3.1: Xây dựng cây bao trùm .............................................................................22
Hình 3.2: Đường đi cho đa robot ..............................................................................23
Hình 3.3: Nhóm robot sử dụng ORMSTC trên thuật toán Spiral-STC ....................34
Hình 3.4: Nhóm robot sử dụng MSTC- Offline........................................................35
Hình 3.5: (a): Cạnh có hai phía; (b): Cạnh có một phía; (c): Gấp đôi nút ở cell mất
kết nối cục bộ ............................................................................................................41
Hình 3.6: Vấn đề gặp phải khi thực hiện MSTC-full................................................42
Hình 3.7: Các subcell của cell được định nghĩa........................................................43
Hình 3.8: Vấn đề gặp phải khi cell mất kế nối cục bộ ..............................................46
Hình 3.9: Vấn đề gặp phải khi cell mất kế nối cục bộ ..............................................47
Hình 4.1: Robot Kobuki ............................................................................................52
Hình 4.2: Laze Hokuyo .............................................................................................53
Hình 4.3: Mô hình client-server sử dụng ..................................................................54

vi
Hình 4.4: Tình huống robot chết nằm giữa hai subcell .............................................58
Hình 4.5: Tình huống robot còn sống không thể giúp robot đã chết ........................61
Hình 4.6: Sơ đồ hệ thống khi triển khai trong môi trường mô phỏng ......................62
Hình 4.7: Sơ đồ cấu trúc chương trình ......................................................................63
Hình 4.8: Thuật toán MSTC_Offline chạy với 2 robot.............................................65
Hình 4.9: Thuật toán ORMSTC chạy với 2 robot .....................................................65
Hình 4.10: Thuật toán MSTC chạy với 2 robot ........................................................66
Hình 4.11: Thuật toán MSTC-full chạy với 2 robot .................................................66
Hình 4.12: Thuật toán MSTC-full chạy khi biết kịp thời robot chết ........................67
Hình 4.13 Thuật toán MSTC-full chạy xong và thực hiện kiểm tra để quay lui để
bao phủ cho robot lỗi.................................................................................................68
Hình 4.14: Sơ đồ hệ thống khi triển khai trong môi trường thực tế..........................70
Hình 4.15: Hình ảnh chạy thuật toán trong thực tế ...................................................72

vii
DANH MỤC CÁC TỪ VIẾT TẮT VÀ THUẬT NGỮ

Thuật ngữ/Chữ viết tắt Viết đầy đủ


STC Spanning Tree Coverage
BA* Boustrophedon online A* search
MSTC Multi-robot Spanning Tree Coverage
ORMSTC On-line Robust Multi-robot STC
IFR The International Federation of Robotics
CPP Coverage Path Planning
ROS Robot Operating System

viii
LỜI MỞ ĐẦU
Ý tưởng về việc chế tạo các cỗ máy có thể làm việc tự động có từ thời cổ đại,
nhưng những nghiên cứu về chức năng và khả năng ứng dụng không có bước tiến
nào đáng kể cho đến thế kỷ 20. Xuyên suốt lịch sử, robot học thường được nhìn
nhận là để bắt chước hành vi của con người, và thường quản lý các nhiệm vụ theo
cách thức tương tự.
Ngày nay, robot là một lĩnh vực phát triển nhanh chóng, nhờ công nghệ phát
triển liên tục, robot đã được chế tạo để phục vụ cho nhiều mục đích khác nhau.
Nhiều robot đã thay con người làm những công việc độc hại như tháo ngòi nổ bom,
mìn, thăm dò các con tàu bị đắm, đi vào thu thập thông tin ở những nơi độc hại, có
phóng xạ,.... Việc sử dụng robot để giải quyết bài toán bao phủ đã được ứng dụng
rất nhiều trong thực tiễn. Nhiệm vụ của robot là tìm kiếm và di chuyển theo một
thuật toán nào đó nhằm bao phủ được hết khu vực được giao. Khu vực làm việc của
robot có thể chứa những vật cản. Robot có thể được trạng bị các cảm biến hoặc các
thiết bị hỗ trợ khác để hỗ trợ cho công việc của mình.
Những năm gần đây, sử dụng nhóm nhiều robot trong bài toán bao phủ ngày
càng được quan tâm bởi tính hiệu quả và mạnh mẽ của nó. Lý do đầu tiên là bởi
nhiều robot có thể hoàn thành nhiệm vụ nhanh hơn so với một robot, bằng cách
phân chia khu vực làm việc giữa chúng. Lý do thứ hai là bởi sử dụng nhóm robot có
thể đảm bảo được việc hoàn thành xong công việc tốt hơn. Khi nhiều robot được sử
dụng, giả sử có một thành viên bị lỗi và không thể hoàn thành phần việc mình được
giao, các đồng nghiệp khác của nó có thể hỗ trợ để vẫn đảm bảo công việc chung
được hoàn thành.
Từ mong muốn muốn thử nghiệm một thuật toán tìm đường bao phủ cho
nhóm robot, trong luận văn này tập trung nghiên cứu, tìm hiểu, giải quyết những
vấn đề cụ thể như sau:
- Tìm hiểu tổng quan về các thuật toán tìm đường bao phủ.
- Nghiên cứu, tìm hiểu lý thuyết về thuật toán tìm bao phủ STC với nhóm robot
(thuật toán MSTC).

1
- Lập trình thuật toán tìm đường bao phủ STC với nhóm robot trong môi trường
được biết trước (Offline - MSTC).
- Lập trình phát triển thuật toán MSTC trên môi trường chưa biết (Online-MSTC).
Thực hiện chạy thử nghiệm kết quả đã lập trình được trong môi trường mô
phỏng và trong môi trường thực tế
Cấu trúc luận văn này gồm bốn chương với những nội dung chính như sau:
Chương 1: Tổng quan
- Lý do chọn đề tài.
- Giới thiệu một số khái niệm liên quan.
- Giới thiệu các phương pháp giải quết và các công cụ tiếp cận bài toán
bao phủ.
- Nội dung và kết quả thực hiện được
Chương 2: Cơ sở lý thuyết
- Trình bày các phương pháp tiếp cận giải quyết bài toán bao phủ với
một robot.
- Trình bày các phương pháp tiếp cận giải quyết bài toán bao phủ với
nhóm robot.
Chương 3: Lý thuyết và phát triển thuật toán MSTC.
- Giới thiệu các tiêu chí đánh giá.
- Thuật toán bao phủ với một nhóm các robot dựa trên cây bao trùm
trên môi trường đã biết.
- Thuật toán bao phủ với một nhóm robot với môi trường chưa rõ
- Đề xuất thuật toán MSTC
Chương 4: Thử nghiệm trong mô phỏng và trong thực tế
- Giới thiệu một số công cụ, phần mềm sử dụng để phát triển.
- Trình bày các vấn đề phát sinh khi lập trình thuật toán MSTC.
- Trình bày những kết quả đạt được khi thử nghiệm trong mô phỏng và
trong thực tế.

2
CHƯƠNG 1. TỔNG QUAN

1.1. Lý do chọn đề tài


Luận văn này có nội dung về nghiên cứu và thử nghiệm thuật toán tìm đường
bao phủ MSTC với nhóm robot.
Lý do lựa chọn đề tài này có thể bao gồm những lý do sau:
- Cùng với sự phát triển của công nghệ, càng ngày việc sử dụng robot để giúp
đỡ con người trong cuộc sống càng được phổ biến. Robot giúp cũng là đang
dần trở thành một sản phẩm công nghệ không thể thiếu trong cuộc sống của
con người. Robot lau nhà ra đời như một tất yếu của cuộc sống giúp con
người thoát khỏi những công việc có tính chất lặp đi lặp lại, nhàm chán.
- Các bài toán bao phủ được đưa ra để robot có thể hoàn thành nhiệm vụ làm
sạch đồng thời không va đập với các vật cản trong quá trình di chuyển. Kế
hoạch tìm đường bao phủ (Coverage Path Planning - CPP) là nhiệm vụ tìm ra
đường đi có thể đi qua tất cả các điểm cần thiết trong một vùng hoặc không
gian cho trước, bên cạnh đó cũng phải tránh được những vật cản. Công việc
này là cần thiết cho rất nhiều ứng dụng ví dụ như các robot hút bụi, lau nhà,
sơn tường, vẽ tranh, robot dò mìn, máy cắt cỏ, máy làm sạch cửa sổ,...
- Với khu vực bao phủ rộng lớn khi thực hiện với chỉ một robot duy nhất sẽ
gặp nhiều vấn đề xẩy ra như khi robot đó lỗi hay thời gian thực hiện công
việc. Phương pháp tiếp cận là sử dụng nhiều robot hoạt động song song, nhờ
đó cho phép rút ngắn thời gian bao phủ không gian làm việc bằng cách phân
chia công việc cho từng robot. Hay còn gọi là bài toán tìm đường bao phủ
cho một nhóm robot.
Về mặt công nghệ tác giả muốn:
- Tìm hiểu lập trình nhúng.
- Tìm hiểu về các thuật toán tìm đường.
- Tìm hiểu cách thức giao tiếp giữa các robot.
- Thực hành lập trình cho robot.

3
1.2. Giới thiệu một số khái niệm liên quan
1.2.1. Robot dịch vụ là gì?
Robot dịch vụ là loại robot hỗ trợ, thực hiện thay con người trong các công
việc; ví dụ như công việc có tính chất lặp đi lặp lại, các công việc trong nhà, công
việc phải thực hiện ở những chỗ dơ bẩn, nguy hiểm,…. Những robot này thường
được điều khiển tự động bởi một hệ thống điều khiển tích hợp được cài đặt thủ công
bên trong. Thuật ngữ “Robot dịch vụ” không có một định nghĩa chính xác. Liên
đoàn Robot Quốc Tế (The International Federation of Robotics – IFR) đã đề xuất
một định nghĩa: Một robot dịch vụ là một robot mà hoạt động bán tự động hoặc
hoàn toàn tự động để thực hiện các dịch vụ hữu ích cho của con người và thiết bị,
không bao gồm các hoạt động sản xuất.
1.2.2. Các ứng dụng của robot dịch vụ
Ứng dụng có thể có của robot chủ yếu là để hỗ trợ trong công việc của con
người. Hiện nay có các ứng dụng trong một số lĩnh vực như sau:
- Ứng dụng trong công nghiệp: Robot dịch vụ công nghiệp có thể được sử
dụng để thực hiện các nhiệm vụ đơn giản, chẳng hạn như kiểm tra hàn. Nó
cũng có các nhiệm vụ phức tạp hơn, thực hiện trong các môi trường khắc
nghiệt, chẳng hạn như giúp đỡ trong việc tháo dỡ các nhà máy điện hạt
nhân. Robot cũng có thể được dùng để thực hiện những hành động lặp đi
lặp lại như lắp ráp, thực hiện các công việc tự động hóa khác. Nhưng robot
được sử dụng trong công nghiệp được gọi là "Robot công nghiệp".
- Ứng dụng trong các nhà hàng, quán bar, khách sạn: Hiện nay, nhiều nhà
hàng, quán bar, khách sạn đã sử dụng robot dịch vụ. Các công việc mà
robot có thể thực hiện ví dụ như dọn dẹp, pha chế các đồ uống phức tạp,
hay thậm chí là tiếp đón khách hàng.
- Ứng dụng trong gia đình: Robot trong gia đình thực hiện nhiệm vụ mà con
người thường xuyên thực hiện xung quanh nhà như lau chùi sàn nhà, cắt
cỏ, dọn dẹp hồ bơi,... Chúng cũng có thể đóng vai trò của một người quản
gia trong gia đình.

4
- Ứng dụng trong khoa học: Hệ thống robot thực hiện nhiều chức năng như
tiến hành các thao tác lặp đi lặp lại trong nghiên cứu. Những robot tự động
cũng có thể thực hiện các nhiệm vụ khoa học mà con người khó hoặc
không thể thực hiện, ví dụ như các vùng biển sâu, không gian bên ngoài
Trái Đất....

Hình 1. 1: Một ứng dụng thực tế của robot dịch vụ


1.2.3. Tìm đường bao phủ là gì?
Tìm đường bao phủ (Coverage Path Planning - CPP) là nhiệm vụ tìm ra
đường đi có thể đi qua tất cả các điểm cần thiết trong một vùng hoặc không gian
cho trước, bên cạnh đó cũng phải tránh được những vật cản. Công việc này là cần
thiết cho rất nhiều ứng dụng robot, ví dụ như các robot hút bụi, lau nhà, sơn tường,
vẽ tranh, robot dò mìn, máy cắt cỏ, máy làm sạch cửa sổ. Nhiệm vụ mà robot khi
thực hiện công việc này được đặt ra theo các yêu cầu như sau:
- Robot phải đi qua tất cả các điểm và bao phủ vùng mục tiêu cần quét một
cách hoàn thiện.
- Robot phải thực hiện di chuyển mà không được đè các vùng quét lên nhau.
- Các tác vụ thực hiện liên tục và tuần tự mà đường đi không bị lặp lại.
- Robot phải tránh được các vật cản.
- Sử dụng quỹ đạo di chuyển đơn giản (đi thẳng hoặc vòng tròn...).
- Bổ sung các đường dẫn tùy chọn khi có thể.
Tất cả những điều kiện trên không phải lúc nào cũng có thể đáp ứng được,
nhất là trong môi trường phức tạp. Vì vậy mà đôi lúc các mức ưu tiên khác nhau
ứng với mỗi điều kiện cần được sắp xếp để thỏa mãn cho phù hợp. Việc thực hiện

5
giải bài toán tìm đường trong trường hợp tổng quát hay áp dụng thực tế không phải
là điều dễ dàng, có thể kể ra ở đây một số ví dụ như: bài toán “Người bán hàng”
(Covering/Travelling Salesman problem), bài toán “Phòng trưng bày” (Art Gallery
problem) hay bài toán “Người đi tuần tra” (Watchman Route problem) đều là các
bài toán có liên hệ đến yêu cầu tìm đường, chúng đều là những bài toán NP-khó.
Các thuật toán bao phủ có thể được phân loại thành thuật toán bao phủ tối ưu
hoặc bao phủ đầy đủ. Nếu khả năng bao phủ toàn bộ vùng làm việc của thuật toán
được chứng minh chặt chẽ thì thuật toán được gọi là bao phủ đầy đủ. Trong trường
hợp ngược lại, nếu thuật toán nhằm tối đa hóa diện tích bao phủ trong điều kiện
robot chịu các ràng buộc như thời gian hoạt động, nguồn năng lượng, kích thước và
không thể đảm bảo bao phủ toàn bộ vùng làm việc, thì thuật toán được gọi là bao
phủ tối ưu.
Các thuật toán bao phủ cũng có thể được phân thành hai loại on-line và off-
line. Thuật toán off-line hoạt động dựa vào các thông tin tĩnh và các thông tin về
môi trường cần bao phủ phải được biết trước khi robot hoạt động. Ngược lại, các
thuật toán on-line không cần biết trước các thông tin này, mà robot sẽ tự xác định
các thông tin về môi trường theo thời gian thực dựa vào các cảm biến được gắn trên
robot. Do đó, các thuật toán on-line cho phép robot hoạt động linh hoạt ngay cả với
các môi trường mà robot hoàn toàn không biết trước. Các thuật toán on-line có sử
dụng các cảm biến để đánh giá và đi đến mục tiêu nên trong một số trường hợp còn
có thể được gọi là giải thuật bao phủ dựa trên cảm biến.
1.3. Các phương pháp giải quyết và các công cụ tiếp cận bài toán bao phủ
1.3.1. Phương pháp giải quyết bài toán bao phủ
Có ba hướng chính để giải quyết bài toán bao phủ, đó là:
- Phương pháp phân chia vùng làm việc cổ điển.
- Phương pháp dựa trên lưới ô vuông.
- Phương pháp sử dụng nhóm robot.
Kết hợp hai hay nhiều hướng giải quyết ở trên để giải quyết bài toán bao phủ.
MSTC chính là thuật toán dựa trên phương pháp tiếp cận vùng bao phủ thành lưới

6
các ô theo thuật toán cây bao trùm STC và kết hợp sử dụng một nhóm robot để bao
phủ.
Thuật toán MSTC được sử dụng trên các môi trường đã biết hay chưa biết có
thể gọi chúng là Offline -MSTC và Online-MSTC.
1.3.2. Các công cụ tiếp cận bài toán
Các công cụ tiếp cận bài toán gồm:
- Tiến hành cài đặt thử nghiệm thuật toán trên môi trường mô phỏng
Gazebo có vật cản.
- Sử dụng ROS phiên bản Indigo trên hệ điều hành Ubuntu 14.04.
- Ngôn ngữ C++
- Kết nối các nhóm robot bằng Client – Server trên C++
- Chạy trên môi trường thực tế với robot Kobuki.
1.4. Nội dung đề tài và kết quả thực hiện được
1.4.1. Nội Dung đề tài
Nội dung đề tài này trình bày chi tiết những vấn đề như sau:
- Tìm hiểu tổng quan về các phương pháp giải quyết bài toán bao phủ:
- Tìm hiểu và nghiên cứu thuật toán tìm đường bao phủ MSTC cho nhóm
robot (MSTC-Offline và ORMSTC).
- Đề xuất thuật toán MSTC mới cho nhóm robot.
- Tiến hành cài đặt thử nghiệm thuật toán trên môi trường mô phỏng Gazebo
và trên môi trường thật với robot Kobuki.
1.4.2. Kết quả thực hiện được
Cho tới thời điểm hiện tại, tác giả đã thực hiện được những công việc như
sau:
- Tìm hiều về các công cụ hỗ trợ trong lập trính nhúng.
- Tìm hiểu về các phương pháp giải quyết bài toán bao phủ, hiểu về một số
thuật toán bao phủ tiêu biểu với một robot.
- Tìm hiểu về các phương pháp giải quyết bài toán bao phủ MSTC tiêu biểu là
MSTC-Offline và ORMSTC.

7
- Đề xuất các phương pháp giải quyết MSTC mới với môi trường có vật cản
2x2 và môi trường vật cản 1x1.
- Thử nghiệm lập trình thuật toán trên thuật toán đề xuất MSTC với nhóm
robot, sau đó tiến hành cho chạy thử nghiệm và thu được kết quả:
o Chạy được trường hợp thuật toán chạy bình thường, không có robot nào
bị hỏng trong môi trường mô phỏng Gazebo.
o Xử lý được một số trường hợp có robot chết trong môi trường mô phỏng
Gazebo.
- Chạy được trường hợp bình thường, không có robot nào bị hỏng trong môi
trường thực tế.

8
CHƯƠNG 2. PHƯƠNG PHÁP GIẢI QUYẾT BÀI TOÁN BAO PHỦ

Kế hoạch bao phủ bao phủ là một nhiệm vụ quan trọng đối với robot, với
nhiều ứng dụng thực tiễn chẳng hạn như làm sạch sàn, cắt cỏ, khai thác, thu hoạch,
sơn, và làm sạch các chất thải nguy hiểm,... Tại đây, robot được đưa ra một công
việc trong một vùng bị chặn, có thể có những chướng ngại vật, trở ngại. Robot được
giả định có một công cụ kết hợp của một hình dạng nhất định thường là các cảm
biến và/hoặc thiết bị truy câp theo vùng tuần tự. Robot cần phải “thăm” tất cả các
điểm trong khu vực làm việc. Thường thì kích thước công cụ của robot nhỏ hơn
nhiều so với khu vực làm việc của nó. Nhiệm vụ của robot là tìm kiếm và di chuyển
dọc theo một con đường sao cho nó bao phủ hoàn toàn. Đôi khi được gọi là tìm
kiếm hoàn toàn vùng, hoặc có thể là quét.
2.1. Một số phương pháp giải quyết bài toán bao phủ với đơn robot
Thuật toán bao phủ đơn giản nhất là điều khiển robot đi một cách ngẫu nhiên
trong vùng làm việc. Theo cách tiếp cận này, rõ ràng nếu robot hoạt động trong một
thời gian đủ lâu thì toàn bộ vùng làm việc của robot sẽ được bao phủ. Đây là thuật
toán được sử dụng trong nhiều robot hút bụi như Trilobite của Electrolux và nổi
tiếng nhất là Roomba của iRobot. Đặc điểm của phương pháp này là đơn giản,
không cần tính toán phức tạp và không cần các cảm biến đắt tiền trên robot. Tuy
nhiên, phương pháp này tỏ ra không hiệu quả nếu vùng làm việc của robot có kích
thước lớn và chứa nhiều vật cản có kết cấu phức tạp. Khi đó chi phí hoạt động của
robot tính theo thời gian và năng lượng tiêu thụ trở nên rất lớn không thể chấp nhận
được trên thực tế.
Trên thế giới đã có rất nhiều nghiên cứu nhằm giải quyết hiệu quả bài toán
tìm đường đi bao phủ. Các nghiên cứu này có thể được liệt kê vào ba hướng chính
như sau:
2.1.1. Phương pháp phân chia vùng làm việc cổ điển
Đây là nhóm phương pháp cổ điển nhất, có thể xem là điểm khởi đầu để xây
dựng các nhóm phương pháp mới hơn về sau. Ý tưởng cơ bản là phân chia toàn bộ
vùng làm việc của robot thành các cell đơn giản, không chồng lấn, và không chứa

9
vật cản. Tổng diện tích các cell này bằng diện tích mà robot phải bao phủ. Do đó,
bài toán tìm đường đi bao phủ trở thành bài toán phân chia vùng làm việc của robot
thành các cell. Vì các cell không chứa vật cản, nên robot có thể dễ dàng bao phủ
từng cell bằng các thao tác đơn giản như quét kiểu ziczag đường cày hoặc quét theo
vòng tròn. Công việc của các robot là làm sao để có thể bao phủ được hết các cell
đó, và việc di chuyển giữa các cell sao cho có thể tối ưu nhất có thể.

Hình 2.1: Bao phủ một cell hình chữ nhật bằng thao tác đi ziczag
2.1.1.1. Thuật toán phân chia theo hình thang
Đây là thuật toán off-line. Thuật toán cần biết thông tin môi trường làm việc
để thực hiện phân chia vùng làm việc thành các thành các hình thang, không chồng
chéo lên nhau. Việc phân chia các hình thang hình thành dựa trên chia theo trục
tung hoặc trục hoành như ở hình 2.2 dưới đây. Sau đó một đồ thị kề chỉ ra quan hệ
về mặt không gian giữa các cell sẽ được hình thành. Từ đó để đảm bảo bao phủ toàn
bộ vùng làm việc, robot cần tìm ra một đường đi qua tất cả các cell trên đồ thị kề.
Cuối cùng, robot thực hiện đi theo đường ziczag tại mỗi cell, và di chuyển giữa các
cell theo đúng thứ tự chỉ ra trong đường đi đã xác định trên đồ thị. Thuật toán hình
thang [1] khá hiệu quả với các vùng làm việc đơn giản dạng đa giác.

10
Hình 2. 2: Ví dụ về thuật toán phân chia hình thang
2.1.1.2. Thuật toán phân chia Boustrophedon
Thuật toán dựa trên thuật toán trên và được ứng dụng khá nhiều là thuật toán
phân chia boustrophedon còn được gọi là thuật toán đường cày [1]. Thuật toán này
tương tự với thuật toán phân chia hình thang nhưng cho phép nối các cell kề nhau
mà robot có thể quét bởi một đường ziczag lại. Trong thuật toán này, một đỉnh chỉ
được xem xét khi nó có thể mở rộng cả lên trên và xuống dưới. Thuật toán
boustrophedon phát triển được kết hợp việc xây dựng lưới đồ thì A* tiêu biểu như
thuật toán BA*. Thuật toán được áp dụng phát triển trong bài toán bao phủ môi
trường chưa biết, thuật toán bao phủ on-line. Trong thuật toán này, vùng làm việc
của robot sẽ được chia thành các vùng boustrophedon có hình dạng phức tạp mà
robot có thể bao phủ trong một lần quét. Thuật toán BA* thực hiện tìm kiếm các
vùng boustrophedon ngay trong quá trình robot chạy, đồng thời đưa ra cơ chế quay
lui để đảm bảo tất cả các vùng boustrophedon đều được tìm thấy và không gian làm
việc của robot được bao phủ toàn bộ. Hình ở dưới đây mô tả một ví dụ phân chia
các vùng boustrophedon dựa vào thuật toán BA* với bốn vùng được đánh số từ 1
tới 4 và quỹ đạo di chuyển tương ứng của robot.

11
Hình 2. 3: Ví dụ về thuật toán BA*
2.1.2. Phương pháp dựa trên lưới ô vuông
Tìm đường đi bao phủ dựa trên lưới (grid-based) [1] là hướng tiếp cận mạnh
và được quan tâm nhiều nhất khi giải quyết bài toán tìm đường đi bao phủ. Phương
pháp này thể hiện toàn bộ môi trường làm việc của robot trên một bản đồ dạng lưới
ô vuông. Mỗi ô trên lưới nhận một giá trị cho biết tại vị trí ô đó là chướng ngại vật
hay vùng không gian trống. Toàn bộ lưới cho biết hình dạng xấp xỉ của không gian
hoạt động của robot và các chướng ngại vật bên trong. Hình dưới đây mô tả một ví
dụ bản đồ lưới ô vuông với hai vật cản. Kích thước của mỗi ô vuông thường bằng
kích thước của robot hoặc là gấp hai lần kích thước robot.

12
Hình 2. 4: Ví dụ phương pháp phân chia dựa trên lưới ô vuông với hai chướng
ngại vật
2.1.2.1. Thuật toán tràn sóng wavefront
Đây là thuật toán off-line, sử dụng lưới đại diện môi trường với kích thước
gấp hai lần kích thước robot. Thuật toán wavefront lập kế hoạch bao phủ hoàn thành
vào lưới điện trên. Phương pháp này đòi hỏi phải có ô bắt đầu và ô mục tiêu. Sự
thay đổi khoảng cách bằng cách lan truyền sóng từ ô mục tiêu đến ô bắt đầu sử
dụng để chỉ định số đặc trưng cho mỗi phần tử lưới. Đầu tiên thuật toán gán nhãn số
0 cho ô mục tiêu và sau đó gán nhãn số 1 cho tất cả các ô mà xung quanh ô đó. Quá
trình được thực hiện tương tự với các ô còn lại. Quá trình này lặp đi lặp lại từng
bước cho đến khi tất cả các ô được gán một số nhãn cụ thể. Quá trình đó được gọi là
quá trình transform (trán sóng). Hình 2.5 ví dụ thể hiện minh họa quy trình này trên
một môi trường [1]. Khi chuyển đổi khoảng cách được tính toán xong, kế hoạch bao
phủ có thể được tìm thấy bằng cách bắt đầu từ các ô bắt đầu và lựa chọn các ô lân
cận với các nhãn cao nhất chưa được thăm. Nếu có hai hoặc nhiều ô lân cận chưa
được thăm chia sẻ cùng một nhãn, thì một trong các ô được chọn ngẫu nhiên. Hình
2.6 thể hiện kế hoạch bao phủ thuật toán transform.

13
Hình 2. 5: Gán có số cho các ô bằng cách lan truyền bước sóng với ô bắt đầu (S)
và ô đích (G).

Hình 2. 6: Kế hoạch bao phủ sử dụng biến đổi khoảng cách với thuật toán
wavefront
2.1.2.2. Thuật toán cây bao trùm.
Thuật toán này thuộc phương pháp tiếp cận dựa trên lưới ô vuông đã đề cập
tới ở trên. Trong thuật toán này, chia nhỏ dần vùng làm việc thành các ô vuông kích
thước 2Dx2D gọi là cell, với D là kích cỡ mỗi robot (các robot được giả định là
giống nhau), mỗi ô chứa bốn ô con, gọi là subcell, có kích thước bằng kích thước
robot và bỏ qua những cell bị chiếm (một phần hoặc toàn phần) bởi vật cản. Các
cell trống tạo thành một cấu trúc đồ thị có các nodes là tâm điểm của từng cell và
các cạnh là đoạn thẳng nối tâm điểm các cell liền kề [2].

14
Hình 2. 7: Phân chia cell trong thuật toán cây bao trùm
Lớp thuật toán dựa trên cây bao trùm tiêu biểu là thuật toán Spiral-STC
(Spiral Spanning Tree Coverage). Spiral-STC [2] là thuật toán tìm đường on-line
với đường đi của robot được xây dựng theo hình xoắn ốc. Đường đi của robot trong
thuật toán này được hình thành bằng cách xuất phát từ cell chứa vị trí bắt đầu của
robot rồi đi sang các cell trống bên cạnh theo chiều ngược chiều kim đồng hồ. Quá
trình tiếp tục tới khi không còn cell nào trống thì robot bắt đầu đi theo chiều ngược
lại. Do kích thước cell là 2Dx2D, robot sẽ không bao giờ đi qua một subcell hai lần
và sẽ quay lại vị trí ban đầu sau khi đã bao phủ toàn bộ diện tích làm việc. Thuật
toán có đường đi tối, mỗi ô được thăm chỉ với một lần. Hình 2.8 mô tả một ví dụ về
đường bao phủ của robot được hình thành khi áp dụng thuật toán Spiral-STC.

15
Hình 2. 8: Đường bao phủ của robot khi áp dụng thuật toán Spiral – STC
Giải thuật Spiral-STC dần dần xây dựng một cây bao trùm cho đồ thị này và
sử dụng cây bao trùm đó để sinh ra đường dẫn bao phủ như sau: cùng với việc xây
dựng cây bao trùm, robot chia nhỏ mọi cell nó bắt gặp thành bốn subcell nhỏ đều có
kích thước D và có cùng kích thước cũng như hình dạng với dụng cụ quét. Dụng cụ
quét đi theo đường dẫn của các subcell vòng quanh dần dần theo cây bao trùm đã
được xây dựng cho đến khi toàn bộ tập hợp các cell trống được bao phủ. Ở đây một
cell trống là “mới” khi tất cả bốn subcell của nó chưa được bao phủ, ngược là thì coi
là “cũ”. Tức là chỉ cần 1 subcell trong cell đã được bao phủ, cell đó sẽ được coi là
“cũ”.
2.2. Phương pháp giải quyết sử dụng một nhóm robot
Phương pháp tiếp cận này sử dụng nhiều robot hoạt động song song, nhờ đó
cho phép rút ngắn thời gian bao phủ không gian làm việc bằng cách phân chia công
việc cho từng robot. Hơn thế nữa, khi kết hợp hoạt động của nhiều robot hệ thống
còn có thể giải quyết nhiều vấn đề khó khác. Chẳng hạn các robot có thể trợ giúp
lẫn nhau khi có robot gặp lỗi trong quá trình làm việc.
Các hệ thống sử dụng nhiều robot thường được xây dựng trên cơ sở mở rộng
các thuật toán tìm đường đi bao phủ của một robot như phân chia boustrophedon,

16
cây bao trùm, mạng nơ-ron. Ngoài ra cũng có một số thuật toán bao phủ dành riêng
cho hệ thống nhiều robot được phát triển.
Có thể nêu ra một số tiêu chí chính để đánh giá một thuật toán bao phủ, như
là “tính bao phủ toàn bộ” (tạo ra đường đi bao phủ toàn bộ được khu vực làm việc),
“tính hiệu quả” (robot di chuyển dựa theo thuật toán đó có thể hoàn thành công việc
trong thời gian nhanh nhất có thể), “tính mạnh mẽ” (các robot có thể hỗ trợ nhau
trong trường hợp có thành viên bị lỗi). Ngoài ra, người ta cũng xét cả tới việc không
dư thừa đường bao phủ, tức là không có một cell được quét lại hai lần trở lên.
Có thể lấy ví dụ tiêu biểu cho nhóm các thuật toán sử dụng phương pháp giải
quyết bài toán này là thuật toán phân chia boustrophedon sử dụng nhóm robot.
Thuật toán này nhằm bao phủ đường đi đầy đủ sử dụng một nhóm robot trong môi
trường chưa xác định (môi trường on-line). Nhóm tác giả của thuật toán này cho
rằng, việc sử dụng nhiều robot có thể giảm thời gian làm việc, tuy nhiên chỉ có thể
đạt được tối đa hiệu quả làm việc nếu như số lượng các vùng mà robot đi lặp lại là ít
nhất. Do đó thuật toán này tập trung vào việc giảm thiểu tối đa sự lặp đi lặp lại các
vùng di chuyển của robot. Thuật toán này sử dụng cùng một phương pháp phân tích
cell hai chiều như thuật toán bao phủ boustrophedon sử dụng robot đơn, nhưng nó
mở rộng để xử lý việc làm thế nào để các robot có thể đi hết các vùng đơn lẻ, và
làm thế nào để phân bố các robot giữa các vùng. Giải pháp của họ là tính toán để
hạn chế các thành viên trong nhóm robot di chuyển giao nhau trong quá trình làm
việc. Các robot sẽ di chuyển chủ yếu theo các đường thẳng. Để có thể quét được
toàn bộ vùng đang làm việc, các robot được chia làm hai nhóm để đảm nhận hai vai
trò: một vài robot, được gọi là explorer (robot thăm dò) đi men theo các ranh giới
của vùng mục tiêu hiện tại, trong khi các robot khác, được gọi là coverer (robot bao
phủ) thực hiện các chuyển động tới lui để có thể đi hết được các phần còn lại. Để
phân phối các nhiệm vụ cho các robot, cũng như phân phối các vùng hoạt động cho
từng robot, một cơ chế đấu giá tham lam được sử dụng [1].
Hình 2.9 mô tả việc hai robot explorer thực hiện di chuyển ở hai biên trên và
dưới của vùng mục tiêu, trong khi ba robot coverer thực hiện các chuyển động tới

17
lui ở phía trong vùng đó.

Hình 2. 9: Robot thực hiện bao phủ một cell theo thuật toán phân chia
boustrophedon sử dụng nhóm robot

18
CHƯƠNG 3. LÝ THUYẾT VÀ PHÁT TRIỂN THUẬT TOÁN MSTC

3.1. Các tiêu chí đánh giá


Cũng như đã đề cập ở trong phần phương pháp sử dụng nhóm robot ở trên,
ba tiêu chí chính để đánh giá một thuật toán bao phủ sử dụng nhóm robot là:
- Tính bao phủ toàn bộ: tạo ra đường đi bao phủ toàn bộ được khu vực
làm việc.
- Tính hiệu quả: robot di chuyển dựa theo thuật toán đó có thể hoàn thành
công việc trong thời gian nhanh nhất có thể.
- Tính mạnh mẽ: các robot có thể hỗ trợ nhau trong trường hợp có thành
viên bị lỗi.
Ngoài ra, trong nhiều trường hợp, khi xét tới tính hiệu quả của thuật toán,
người ta cũng xét cả tới việc không dư thừa đường bao phủ, tức là không có một ô
được quét lại 2 lần trở lên [3].
3.2. Thuật toán bao phủ với một nhóm robot dựa trên cây bao trùm trên môi
trường đã biết
3.2.1. Khu vực bao phủ
Ở thuật toán này robot đã biết khu vực làm việc, robot có một bản đồ đầy đủ
của khu vực làm việc, các ranh giới khu vực làm việc và tất cả các chướng ngại vật
(được giả định là tĩnh). Mỗi Robot có hình dạng công cụ liên quan giống 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. Giả định các robot có thể di chuyển với công cụ 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 ô con kích thước D.
Chia khu vực này thành các ô vuông (cell) có kích thước 2Dx2D (mỗi ô bao
gồm 4 ô con (subcell) có kích thước DxD) và loại bỏ các ô được bao phủ một phần
bởi các chướng ngại vật. Một cấu trúc đồ thị G (V, E). V được định nghĩa là tập hợp

19
các nodes, với nodes là những điểm trung tâm của mỗi ô, và E là tập các cạnh, là
những đoạn thẳng nối những điểm trung tâm của các ô lân cận. Xây dựng một cây
bao trùm cho đồ thị G sử dụng bất kỳ thuật toán xây dựng cây bao trùm. S0,..., Sk-1
là vị trí ban đầu của các robot trong phạn vi phân tích chia ô của khu vực làm việc.
Các robot được giả định là đồng nhất một tốc độ và kích thước công cụ của
chúng D. Sử dụng N để ám chỉ số lượng ô trong lưới, và n để ám chỉ số lượng các ô
con. Khu vực làm việc liên tiếp, tức là, tất cả các ô của khu vực làm việc đều có thể
truy cập từ bất kỳ vị trí bắt đầu nào.
3.2.2. Thuật toán MSTC Offline
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à R i+1. Tính toán khoảng cách lớn nhất D max= max R 1≤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  . 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' > nói cách khác nó sẽ cải thiện được  
 { }

20
Mã giả thuật toán 1:
Thuật toán 1: Creat_tree(W, S0,..., Sk-1)
Đầu vào:S 0,..., 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 R i,     do Với mỗi roboti R
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 ← N i
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 S i
c) Thiết lập giá trị khởi tạo ban đầu Best_result, S 0
d) If S i > 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      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 đó.
Việc xây dụng là đồng thời. Nếu có nhiều hơn một cell thì tính toán khoảng cách
Manhattan tối đa của khoảng cách tối thiểu đến robot còn lại nếu không có quay lui
về nút gốc. Bước thứ 2 là tìm các cầu cho cây bao trùm với cầu khởi tạo chính là

21
đ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:S 0,..., 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:

22
1. Chọn bất kì điểm bắt đầu: S0
2. Creat_tree(W, S0,..., Sk-1 )
3. Bắt đầu từ S 0, 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 S 0, 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.

Hình 3.2: Đường đi cho đa robot

23
Mã giả thuật toán 3:
Thuật toán 3 MSTC không quay lui (W, S0,..., Sk−1)
Đầu vào:S 0,..., 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 S t, 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,..., S k-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,..., S j ), 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ó.

24
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   :
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 S 0. 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   :
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ẽ
không thuộc bất kỳ cây con nào khác. Chính vì khu vực làm việc là liên tiếp
nên mỗi cell có thể đi đến bất kỳ cell nào. Vậy mỗi cell sẽ chỉ thuộc nodes
duy nhất trên cây. Tương tự như trường hợp với k = 1 các subcell trên cây sẽ

25
đượ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ừ S 0,..., S k-1, S 0 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ủ
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.
Đ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

26
đầ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
11. Cập nhập thông tin map về các vị trí ban đầu của các robot khác:
   


    
12. Khởi tạo  
 

27
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:
 3 cell lân cận của X theo chiều kim đồng hồ, bắt đầu từ sau cell W
1. 
2. for    do
3. if    then
4. continue tiếp tục với giá trị  tiếp theo

28
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 
  then

9. 
 
 
 


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


11. else
12. 
 
 

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
28. while tất cả các robot chưa thông báo hoàn thành công việc của chúng do
29. 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

29
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  gần với
hay 

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ó
lưu giá trị lần gặp đầu tiên

gặp trên đường di chuyển. Giá trị của 
lưu giá trị lần gặp gần

của robot hiện tại với robot , và giá trị của 
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

30
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ẽ
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   :
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   :
Giả sử rằng có    robot có thể hoàn thành một khu vực làm việc. Ta
chứng minh rằng  robot cũng có thể hoàn thành khu vực W. Không mất tính
tổng quát, ta xét một robot  đơn lẻ. Khi thực thi thuật toán MSTC on-line,
nó sinh ra một cây bao trùm cục bộ, với những cell cũ của riêng nó, và tạo ra

31
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    đường đi và được    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   
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    ở 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
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

32
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,..., A k-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.

33
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.

34
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
connection để lưu các kết nối của robot đó thì thay vào đó ta sử dụng một dạng xâu
chứa đầy đủ thông tin như ô, tên robot nó đã được gặp lúc thực hiện trên đường đi
để đảm bảo được backtrack sau này.

35
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    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 N i ) 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 ← N i
20. Kết thúc vòng lăp
21. if List_cell.size()>0 then
22. Tính toán khoảng cách Manhattan đến các robot còn lại

36
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
hiện xong
42. Vẽ cạnh từ  tới  và thông báo
43. Thực thi MSTC(X, Y)
44. Kết thúc vòng lặp
45. Dừng

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

37
Thuật toán 6 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 20 của thuật toán này, giống với thuật toán
ORMSTC đã trình bày ở trên. Việc thêm vào các cell là nó sẽ tìm kiếm tất cả các
cell theo bốn hướng (trên, dưới, trái, phải), tìm kiếm kiểm tra nó đã ở trong bất kỳ
cây con của robot nào hay chưa (dòng 6). Từ dòng 21 đến dòng 26 giống thành lập
cây con trong quá trình tạo cây bao trùm với thuật toán MSTC-offline. Nếu nó tìm
thấy nhiều hơn một cell mới thì dựa vào tính khoảng cách Manhattan qua đó khoảng
cách xa nhất tối thiểu theo Manhattan của robot đó đến các robot còn lại. Tại dòng
31 đến 44 thì giống với thuật toán ORMSTC đã trình bày ở trên kiểm tra các robot
khác.
3.4.1.4. Phân tích các tiêu chí của thuật toán cải tiế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ẽ. 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. Nếu
nó gặp được đúng lúc và biết được robot kia chết thì nó sẽ thực hiện công việc của
robot kia kịp thời tránh quay lui
Đoạn sau thuật toán, khi 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 của nó đã 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.
- 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   :
Với chỉ một robot, việc xây dựng cây con nó sẽ tìm hết bốn hướng. Nếu tìm

38
thấy nhiều hơn một ô. 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_N danh sách. Khi nó không tìm thấy cell mới
nào nữa thì nó sẽ quay về cell đi ra của cell đó (ô cha) và thực hiện tìm. Kết
thúc quay về cell ban đầu và tìm không tìm thấy cell nào nữa. Mà khu vực
làm việc liên tiếp nên nó sẽ không thể bỏ qua cell nào. Vậy sẽ tìm hết được
toàn bộ các cell trên khu vực W.
o Trong trường hợp   :
Ta xét một robot i đơn lẻ. Khi thực thi thuật toán MSTC, nó sinh ra một cây
bao trùm cục bộ, với những cell cũ của riêng nó, và tạo ra một đường bao
phủ cho một vài cell mà nó đảm nhiệm. Với một cell được nó tìm kiếm mà
nằm trong các cell của robot khác. Nó xem như cell đó được lấp đầy vật cản.
Tương tự với cell của nó trên cây con của nó, 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 k -
1 đường đi và được k - 1 robot bao phủ, giống như với giả sử ban đầu được
đặt ra. Robot i cũng xem tất cả các cell bị chiếm bởi k - 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 k = 1 ở trên.

- Tính không dư thừa


Nếu tất cả robot đều thực thi theo thuật toán 6 ở 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 của riêng nó. 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, không có một cell nào bị đi quá nhiều hơn 1 lần.

39
3.4.2. Triển khai thuật toán MSTC - Full
3.4.2.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 subcell kích thước DxD.
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 ô vuông có kích thước 2Dx2D, mỗi cell gồm bốn ô con kích
thước DxD. Nếu chướng ngại vật thuộc ô con nào thì xem ô con đó chính ô con
chướng ngại vật. Biểu thị số lượng tế bào trong lưới với N, và chỉ rõ số lượng
subcell của n, tức là, N = 4n. Khu vực ban đầu là không được biết như vậy mỗi ô
con 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,..., A k-1. Các vị trí ban đầu của mỗi robot được giả định là trong một ô
con 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.
Môi trường làm việc của MSTC – Full bao phủ hết tất cả những cell chứa ít
nhất kích thước DxD. Giải thuật đầy đủ sử dụng cấu trúc đồ thị bổ sung như sau:
các nodes của đồ thị là các tâm điểm của tất cả những cell trống hoặc bị chiếm một
phần. Các cạnh của đồ thị kết nối các tâm điểm của những cell liền kề chứa những
subcell trống và cùng chung một biên. Quá trình xây dựng đem đến hai dạng của
cạnh nối:“cạnh có hai phía” (double-sided edges) giữ các subcell trống ở cả hai phía
(hình 3.5.a), và “cạnh cómột phía” (single-sided edges) giữ ít nhất một subcell bị

40
chiếm ở một phía (hình 3.5.b). Ngoài ra một cấu trúc khác trong đồ thị lưới bổ sung
là “gấp đôi nút” (node doubling). Một cell bị chiếm một phần với các subcell trống
nằm chéo nhau được gọi là “mất kết nối cục bộ” (locally disconnected). Bởi vì dụng
cụ quét có thể vươn đến các subcell trống từ các cell lân cận, chúng ta biểu diễn
những cell như vậy như là hai nút, mỗi nút có cạnh riêng nối đến những cell liền kề
mà từ đó một subcell trống có thể được tiếp cận (hình 3.5.c)[2].

Hình 3.5: (a): Cạnh có hai phía; (b): Cạnh có một phía; (c): Gấp đôi nút ở cell
mất kết nối cục bộ
3.4.2.2. Ý tưởng thuật toán
Với môi trường làm việc thực tiễn thì việc khích thước vật cản không chỉ là
2Dx2D và nó còn có khích thước DxD. Với các bài toán trên hiểu mỗi cell có bất kỳ
subcell nào là chướng ngại vật thì hiểu chướng ngại vật khích thước 2Dx2D. Vậy
bài toán bao phủ sẽ không bao phủ được hoàn toàn nó còn có những subcell của cell
đó chưa được “thăm”. Áp dụng đối ý tưởng thuật toán 6 để giải quyết vấn đề bao
phủ cho vùng làm việc đối với kích thước chướng ngại vật DxD. Mỗi robot thực
hiện tìm nodes cho cây con của nó bằng cách robot phải đi hết tất cả các subcell của
cell nó đang đứng. Từ đó có thể biết hết các thông tin cell nào là có chướng ngại vật
và thông qua đó để tính toán khoảng cách xa tối thiểu đối các robots còn lại. Vậy
mỗi lần robot thực hiện đang xét một cell thì robot phải đi lại tất cả các subcell của
cell đó. Vậy tính hiệu quả của thuật toán sẽ không còn và lúc này có thể thời gian
bao phủ cho thuật toán MSTC sẽ nhiều hơn rất nhiều.

41
Hình 3.6: Vấn đề gặp phải khi thực hiện MSTC-full
Hình 3.5 nêu trên cho thấy bất cập khi sử dụng thuật toán 6 cho môi trường
có kích thước chướng ngại vật là DxD với tất cả cell xung quanh robot đều là cell
mới (ô chưa thăm). Với robot đứng ở subcell có vị trí 1 ở hình thì nó phát hiện được
3 cell mới không có vật cản. Robot đứng ở subcell có vị trí 2 thì nó phát hiện được
1 cell mới không có vật cản. Robot đứng ở subcell có vị trí 3 thì nó phát hiện được
3 cell mới không có vật cản. Robot đứng ở subcell có vị trí 4 thì nó phát hiện được
1 cell mới không có vật cản. Vậy với các vị trí đứng trên các subcell của cùng một
cell thì robot phát hiện số cell mới mà khác nhau.
Lấy ý tưởng cùng với thuật toán 6 và các vấn đề nêu trên để đảm bảo tính
hiệu quả trong môi trường có khích thước vật cản DxD. Tránh robot phải thực đi tất
cả các subcell để tìm nodes trên bốn hướng (trên, dưới, trái, phải) như ở trên. Luận
văn này lên với ý tưởng dựa vào các subcell robots đang đứng để thực hiện xét các
hướng thích hợp. Dựa trên robot biết được vị trí nó đang đứng nên nó có thể biết nó
thuộc subcell nào. Để dễ thực hiện và thuận tiên ở đây quy định các subcell của cell
được quy định như sau:

42
Hình 3.7: Các subcell của cell được định nghĩa
Với các subcell được định nghĩa ở trên ta thực hiện xét robot ở subcell vị trí
thứ 1 tìm kiếm dưới hoặc trái, ở subcell là ở vị trí thứ 2 tìm kiếm trên hoặc trái, ở
subcell vị trí thứ 3 tìm kiếm phải hoặc dưới, ở subcell vị trí thứ 4 tìm kiếm trên hoặc
phải. Thuật toán MSTC full thực hiện tương tự thuật toán MSTC khi tìm thấy nhiều
hơn một cell nó sẽ thực hiện tìm và đi đến cell có khoảng cách xa nhất.
3.4.2.3. Phát triển thuật toán
Giống với thuật toán MSTC khác nó cũng có thuật toán khởi tạo như thuật
toán 4. Để đảm bảo các robot biết trạng thái của nhau.
Mã giả thuật toán 7:
Thuật toán 7 MSTC-full (W,X)
Đầu vào: Cell robot vừa đi ra W (ô cha), cell robot vừa đi vào X
Các bước tiến hành:
1. List_cell ← null
2. Tìm cell lân cận ứng với vị trí subcell si mà nó đang đứng
3. Với nó là subcell là ở vị trí thứ 4 tìm kiếm trên hoặc phải
4. Với nó là subcell là ở vị trí thứ 3 tìm kiếm phải hoặc dưới
5. Với nó là subcell là ở vị trí thứ 2 tìm kiếm trên hoặc trái
6. Với nó là subcell là ở vị trí thứ 1 tìm kiếm dưới hoặc trái
7. //quá trình kiểm tra
8. for    do
9. if   then

43
10. continue tiếp tục với giá trị  tiếp theo
11. if  đã nằm trong một cạnh của cây bao trùm của một  robot khác
then
12. Hỏi robot  xem nó còn sống không
13. if robot  trả lời then
14. backtrack←(
 

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


16. //robot kia đã chết
17. else
18. if tìm thấy backtrack.find(tên robot chứa N i ) then
19. Xóa robot  khỏi backtrack
20. Xóa cạnh tất cả cạnh nối với cell robot đã đi và thông báo
nó đã xong
21. List_cell ← Ni
22. //không thuộc bất kỳ cây con nào
23. else
24. List_cell ← N i
25. Kết thúc vòng lăp
26. if List_cell.size()=0 then
27. if còn subcell chưa được quét then
28. Di chuyển đến subcell mới thuộc cell X
29. Quay trở lại bước 1
30. if List_cell.size()>0 then
31. Tính toán khoảng cách Manhattan đến các robot còn lại
32. 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
33. Vẽ cạnh từ  tới và thông báo
34. Thực thi MSTC(X, Ni )
35. else

44
36. if không phải cell ban đầu then
37. if subcell X chưa đươc thăm hết then thông báo X không thuộc
cell cũ của robot.
38. Trở về cell cha
39. Thực thi MSTC(T,W)//T là cell cha của cell W
40. else
41. Thông báo hoàn thành công việc của mình
42. 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
43. 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
44. if robot  đã chết then
45. Xóa cạnh nối với cell robot  đã đi và thông báo
46. Thông báo mình chưa hoàn thành công việc
47. Lấy thông tin cell backtrack
48. Di chuyển điểm đã kết nối với robot đã chết
49.  cell mình kết nối với robot j
50.  cell robot j kết nối với mình
51. Xóa các cell của robot j mà đã được cập nhật
52. Xóa robot j khỏi mảng backtrack và thông báo robot j đã
thực hiện xong
53. Vẽ cạnh từ  tới  và thông báo
54. Thực thi ORMSTC(X, Y)
55. Kết thúc vòng lặp
56. Dừng

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


Thuật toán 7 mô tả quá trình làm việc một robot cũng giống thuật toán 6 mỗi
robot tự xây dựng cây con của nó. Tất cả robot đều thực thi thuật toán này. Từ dòng
1 đến 29 là việc tìm kiếm cell mới tại mỗi subcell của nó. Việc tìm kiếm ứng với vị

45
trí robot trên cell con. Mỗi vị trí sẽ thực hiện tìm theo các hướng khác nhau. Nếu tại
vị trí subcell đó chưa tìm thấy thì nó sẽ tìm kiếm các subcell còn lại chưa thăm của
cell đó. Tại dòng 31 đến 55 thì giống với thuật toán MSTC đã trình bày ở trên. Với
các vật cản như hình 3.5.a và 3.5.b việc thêm nodes và xác định nodes giống các
thuật toán ORMSTC, mỗi cell sẽ thuộc duy nhất một cây con. Nhưng cũng sử dụng
phương pháp trên với các cell có chướng ngại vật như hình 3.5.c thì bao phủ sẽ
không bao phủ được hoàn toàn. Hình 3.8 là ví dụ với trường hợp khi thực hiện đúng
với các thuật toán ORMSTC. Robot 1 đi vào cell mất kết nối cục bộ, nó chưa thăm
hết các subcell còn lại và việc thăm subcell còn lại của robot 1 là không thể vì robot
1 không có cell liền kề để thực hiện di chuyển thới subcell đó. Với trường hợp này
subcell còn lại chỉ có thể bao phủ bởi robot 2. Vẫn giữ ý tưởng trên nhưng cell mà
robot 1 khi nó chưa thăm hết sẽ được định nghĩa là nodes ‘ảo’ trên cây con. Khi
robot 2 thực hiện hoàn thành bao phủ cell đó thì cell đó sẽ thuộc cây con của robot 2
(dòng 39) hình 3.9.

Hình 3.8: Vấn đề gặp phải khi cell mất kế nối cục bộ

46
Hình 3.9: Vấn đề gặp phải khi cell mất kế nối cục bộ
3.4.2.4. Phân tích các tiêu chí đánh giá thuật toán cải tiế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ẽ. 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. Nếu
nó gặp được đúng lúc và biết được robot kia chết thì nó sẽ thực hiện công việc của
robot kia kịp thời tránh quay lui.
Đoạn sau thuật toán, khi 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 của nó đã 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.
- 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:

47
o Trong trường hợp   :
Với chỉ một robot, việc xây dựng cây con nó sẽ tìm theo các hướng dựa trên
vị trí subcell của robot. Nếu không tìm thấy cell mới nào nó sẽ thực hiện tìm
kiếm các subcell còn lại của cell việc tìm kiến kết thúc khi khi tìm thấy hoặc
tất cả subcell của cell đã được thăm. Nếu tìm thấy nhiều hơn một ô. 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_N danh sách. Khi nó không tìm thấy cell mới nào nữa thì nó sẽ quay về
cell đi ra của cell đó (ô cha) và thực hiện tìm. Kết thúc quay về cell ban đầu
và tìm không tìm thấy cell nào nữa. Mà khu vực làm việc liên tiếp nên nó sẽ
không thể bỏ qua cell nào. Vậy sẽ tìm hết được toàn bộ các cell trên khu vực
W.
o Trong trường hợp   :
Giả sử rằng có    robot có thể hoàn thành một khu vực làm việc. Ta
chứng minh rằng  robot cũng có thể hoàn thành khu vực W. Không mất tính
tổng quát, ta xét một robot  đơn lẻ. Với các cell có vật cản như hình 3.5..a và
14.c và các cell như trong thuật toán 6. Khi thực thi thuật toán MSTC-full, nó
sinh ra một cây bao trùm cục bộ, với những cell cũ của riêng nó, và tạo ra
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    đường đi và được    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   
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    ở trên. Trường
hợp với như hính 14.c robot sẽ kiểm tra cho phép các subcell của cell mất kết
nối đó chỉ được bao phủ bởi duy nhất 1 robot.
- 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ư

48
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ỗi subcell của cell đó đã được xét thì nó sẽ không
thực hiện xét lại nữa. Nếu một cell đã được robot khác đi với các trường hợp cell
không giống hình 3.5.c, 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 cell cũ trường hợp hình 3.5.c thì mỗi vị trí
sẽ xem như là 1 cell và nó chỉ đươc xem chỉ thuộc nodes của một robot. 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.

49
CHƯƠNG 4. CÀI ĐẶT VÀ THỬ NGHIỆM CÁC THUẬT TOÁN MSTC

4.1. Giới thiệu một số công cụ, phần mềm sử dụng


4.1.1. Giới thiệu về ROS
ROS (Robot Operating System) là tập hợp các framework cung cấp những
chức năng tương tự hệ điều hành để phát triển các phần mềm sử dụng cho robot.
ROS hỗ trợ đầy đủ mọi dịch vụ tiêu chuẩn như trừu tượng hóa phần cứng, điều
khiển thiết bị mức thấp, thư viện, thực hiện truyền thông điệp và quản lý đóng gói.
Các tiến trình trong ROS được thử nghiệm theo cấu trúc đồ thị với mỗi tiến trình
ứng với từng node có thể nhận, thông báo và kết hợp các cảm biến, bộ điều khiển,
định mức hiện trạng, quy hoạch, bộ truyền động cùng nhiều thông điệp khác. Khả
năng phản ứng nhanh và độ trễ thấp là những yêu cầu quan trọng với ứng dụng
robot nhưng cho dù vẫn có thể tương tác với một số đoạn mã xử lý tức thời, bản
thân ROS không phải là hệ điều hành thời gian thực.
Các phần mềm trong ROS được chia làm 3 nhóm:
- Các công cụ độc lập với ngôn ngữ lập trình và nền tảng phần cứng dùng để
xây dựng và phân phối những phần mềm cơ bản cho ROS.
- Bộ thư viện áp dụng cho bên client để thử nghiệm.
- Các gói chứa mã hỗ trợ dùng cho một hoặc nhiều thư viện.
Các công cụ và thư viện chính viết bằng C++, Python hoặc LISP, được phát
hành theo bản quyền của BSD và đều là mã nguồn mở, miễn phí cho sử dụng trong
nghiên cứu hoặc ngay cả với mục đích thương mại. Đa phần những gói công cụ còn
lại phát hành dưới nhiều bản quyền mã nguồn mở đa dạng, đóng vai trò thử nghiệm
các chức năng và ứng dụng dùng chung như trình điều khiển phần cứng, mô hình
hóa robot, phân loại dữ liệu, quy hoạch, nhận thức, lập bản đồ, định vị đồng thời
hay mô phỏng cùng nhiều giải thuật khác.
Những thư viện chính của ROS thiết kế hướng tới hệ thống tương tự UNIX,
chủ yếu vì phải phụ thuộc nhiều vào lượng lớn những phần mềm mã nguồn mở.
Một trong số các hệ điều hành được hỗ trợ có thể kể đến như là Ubuntu Linux, còn
nhiều hệ điều hành khác chẳng hạn Fedora, Mac OS X hay Microsoft Windows vẫn

50
đang thử nghiệm. Trong khi đó thư viện rosjava viết bằng Java không bị giới hạn
như vậy nên khiến cho các phần mềm của ROS cài đặt được trên hệ điều hành
Android hay kết hợp sử dụng cùng các công cụ MATLAB, vốn có thể chạy trên
Linux, Mac OS X và dĩ nhiên cả Microsoft Windows. Còn thư viện roslibjs viết
bằng Javascript lại được phát triển để tương tác với hệ thống ROS thông qua bất kỳ
trình duyệt web chuẩn nào.
Sử dụng phiên bản ROS Indigo được cài đặt trên Ubuntu 14.04.
4.1.2. Giới thiệu về Gazebo
Gazebo là một chương trình mô phỏng nhóm robot 3 chiều trong nhà và
ngoài trời, hỗ trợ vật lý động học và động lực học cùng nhiều phương tiện khác.
Các trình cắm Gazebo giúp kết hợp ROS và Gazebo với nhau để hỗ trợ nhiều loại
robot và cảm biến. Vì các trình cắm này biểu diễn cùng giao diện thông điệp với hệ
thống ROS nên ta có thể viết các node của ROS hoàn toàn tương thích với bộ mô
phỏng, dữ liệu ghi nhật ký và phần cứng, cũng như có thể phát triển ứng dụng rồi
thử nghiệm cho robot trong môi trường thực tế mà không cần hoặc thay đổi rất ít mã
nguồn. Gazebo có thể thực hiện mô phỏng với độ chính xác và hiệu năng cao cho
môi trường nhóm robot cả trong nhà và ngoài trời. Gazebo cung cấp khả năng xử lí
chân thực cùng bộ các cảm biến hữu dụng và giao diện thân thiện cho người dùng
và chương trình. Sử dụng Gazebo phiên bản 2.2.6.
4.1.3. Giới thiệu robot Kobuki
Kobuki, tên gọi đầy đủ iClebo Kobuki là một thiết bị di động giá rẻ, thiết kế
cho mục đích giáo dục và nghiên cứu trong lĩnh vực robot. Ngoài khả năng hoạt
động liên tục, Kobuki có thể cấp nguồn cho máy tính khác cũng như các bộ phận
cảm biến và bộ phận vận động. Kobuki sở hữu dụng cụ đo hành trình được cải thiện
bằng con quay hồi chuyển đã hiệu chỉnh, cho phép di chuyển với độ chính xác cao.

51
Hình 4.1: Robot Kobuki
4.1.4. Giới thiệu Hokuyo
Là cảm biến dạng máy dò tầm quét laser, tối ưu cho công việc nhận dạng
môi trường. Hokuyo thích hợp với các robot thông minh thế hệ mới với hệ thống tự
động và bảo mật riêng tư.
Tính năng
- Độ chính xác và phân giải cao, góc nhìn rộng cung cấp giải pháp tốt nhất cho
robot tự động di chuyển trong môi trường không biết trước
- Kích thước nhỏ gọn tạo nên nhiều không gian thiết kế thoải mái. Nguồn năng
lượng tiêu thụ ít, có khả năng hoạt động thời gian dài.
- Không chịu ảnh hưởng bởi độ sáng môi trường, hiệu quả tốt cả trong bóng
tối.
- Nhận diện kích thước và vị trí vật thể mà không cần thăm dò quá gần.
Ứng dụng
- Hỗ trợ robot tự động nhận biết môi trường xung quanh
- Phát hiện kẻ xâm nhập
- Dùng trong cửa tự động, phân tích hành vi đặc thù của con người
- Phát hiện vật cản

52
Hình 4.2: Laze Hokuyo
4.2. Giải quyết bài toán giao tiếp giữa các robot
4.2.1. Vấn đề phát sinh
Trong các thuật toán MSTC ở trên, về lý thuyết thuật toán đã mặc nhiên coi
như các robot có thể thoái mái giao tiếp với nhau. Tuy nhiên, khi thử nghiệm thuật
toán trong mô phỏng cũng như trong thực tế, vấn đề giao tiếp giữa các robot với
nhau cũng là một vấn đề lớn cần quan tâm.
Trong môi trường mô phỏng, nếu chỉ mô phỏng trên một máy, việc giao tiếp
này có thể xử lý đơn giản bằng cách lưu thông tin toàn cục vào đâu đó, ví dụ như
lưu trong file. Trong quá trình làm luận văn này, cũng đã thử sử dụng ros bag để lưu
thông tin về các trạng thái robot, các cell đã đi qua của các robot trong một file bag
để các robot mô phỏng có thể truy cập. Việc sử dụng file như vậy có thể giải quyết
tạm thời được vấn đề giao tiếp khi mô phỏng trong một máy, tuy nhiên, khi mô
phỏng trên 2 hoặc nhiều máy khác nhau (mỗi máy là một robot, cùng chạy chung
một bản đồ), hoặc cao hơn, khi chạy trong môi trường thực tế, việc sử dụng file để
giao tiếp như vậy không thể giải quyết được vấn đề.

53
4.2.2. Áp dụng lập trình socket với thuật toán MSTC
Sử dụng giao tiếp client-server theo mô hình khách-chủ để giao tiếp giữa các
robot.

Hình 4.3: Mô hình client-server sử dụng


Với việc sử dụng một server chung để lưu các thông tin mà các robot cần
thông báo cho các đồng nghiệp biết, số lượng kết nối cần thiết sẽ giảm đi so với
trường hợp sử dụng mô hình ngang hàng. Khi triển khai trên thực tế, nếu điều kiện
không cho phép, hoàn toàn có thể đặt server trên một client, tức là robot được máy
tính đó điều khiển vừa chạy server, vừa chạy một thể hiện của client. Có thể hình
dung việc này giống như robot đó đóng vai trò là “robot đầu đàn”,
Chức năng của server
Server tiến hành thực hiện các bước cần thiết để khởi tạo server. Sau khi
khởi tạo để có thể tiếp nhận kết nối từ phía client thì server khởi tạo sẽ lưu hai biến
cần thiết như biến status và old_cells. Biến status trên server lưu trạng thái của tất
cả các robot. Nó nhiệm vụ quan trọng như lưu vị trí, trạng thái hay thời gian của
từng robot. Biến status là một biến kiểu string, lưu lại trạng thái của toàn bộ robot
đang hoạt động để biết robot đang ở đâu và trạng thái như thế nào và thời gian cập
nhật. Mỗi trạng thái của từng robot cách nhau bởi dấu “;”, và chúng có dạng: tên
robot, hoành độ của cell đang ở, tung độ của cell đang ở, trạng thái, thời gian cập
nhật lần cập nhật cuối cùng của từng robot. Server biết các trạng thái của từng robot
đó còn sống hay đã chết hay chưa dựa vào các cập nhật của từng robot trên từng
thời điềm. Nếu quá 15 giây không có cập nhật của bất kỳ Client nào nó sẽ hiểu là
robot đó đã chết và đưa ra trạng thái đó đến mọi robot. Dựa vào biến status để cập

54
nhật các old_cells. Biến old_cells để lưu các cell của tất cả robots đã đi qua. Nó
được thêm vào khi mỗi robot đi vào cell mới. Dựa vào biến old_cells để tránh nhiều
robot đi vào cùng một ô. Old_cells sẽ được cập nhật khi có bất kỳ robot nào chết.
Server phân biệt các hành động trong tin nhắn từ client nhờ phần mã trong tin nhắn
nhận được. Tin nhắn nhận được có dạng: “Mã|Dữ liệu”. Sau khi xử lý xâu, tùy vào
đoạn mã nhận được mà server sẽ có hướng xử lý với đoạn dữ liệu phía sau cho thích
hợp. Ý nghĩa một số tin nhắn từ client gửi lên server nói chung với mỗi thuật toán:
- [SAVE_STATUS]|Dữ liệu: Client yêu cầu lưu đoạn dữ liệu phía sau vào
biến status trên server.
- [SAVE_OLD_CELLS]|Dữ liệu: Client yêu cầu lưu thêm đoạn dữ liệu phía
sau vào biến old_cells trên server.
- [GIVE_ME_STATUS]|_: Client yêu cầu server trả về giá trị biến status của
server
- [GIVE_ME_OLD_CELLS]|_: Client yêu cầu server trả về giá trị biến
old_cells của server.
Hầu như các server trên các thuật toán là giống nhau chỉ khác thêm các công
cụ hỗ trợ cho phù hợp với từng thuật toán. Ví dụ như thuật toán MSTC-Ofline thì
nó chỉ cần lấy thông tin ban đầu và sau khi thực hiện xong thì nó kiểm tra con robot
tiếp theo của nó trạng thái như thế nào.….
Các mã giả phía client trên các thuật toán
Sau khi áp dụng lồng ghép lập trình socket vào, thuật toán ORMSTC chạy
trên mỗi robot (mỗi robot đóng vai trò là một client). Mỗi robot cũng giống như
thuật toán 4 nó sẽ tạo một thuật toán để tạo các khởi tạo ban đầu. Từ thuật toán 4 có
thể viết lại chính xác như sau:
Mã giả thuật toán 11 (pha khởi tạo):
Thuật toán 11: Initialization()
Đầu vào: Khu vực làm việc W, vị trí cell ban đầu của các robot
(starting_point), tên các robot (robot_name), địa chỉ IP và cổng của server
Các bước tiến hành:

55
1. Chạy hàm socket()
2. Chạy hàm connect()
3. Tính toán chia cell để biết starting_cell dựa trên starting_point
4. Khởi tạo biến status, biến current_cell và old_cells cục bộ trên mỗi robot
5. Gán current_cell = starting_cell
6. Thêm trạng thái của mình vào biến status của gửi lại lên server với yêu cầu
lưu trạng thái
7. Thêm starting_cell của mình vào danh sách old_cells, sau đó gửi lên server
với yêu cầu lưu old_cells
8. Lấy dữ liệu từ biến status và old_cells của các robot khác trên server xuống
để đồng bộ dữ liệu cục bộ.
Giải thích mã giả thuật toán 11
Client tiến hành khởi tạo. Bước 1 và 2 gọi các hàm cần thiết để kết nối tới
server. Sau đó tính toán từ vị trí ban đầu để biết cell bắt đầu của nó đang đứng.
Thêm trạng thái của nó trên status của robot. Thêm các cell bắt đầu starting_cell
thành cell cũ và lưu trên sever. Sau đó tiến hành lấy những giá trị mới nhất trên
server về để đồng bộ với dữ liệu cục bộ. Việc trao đổi giữa Server và Client dựa
trên các xâu ký tự nên từ đó ta sử dụng các xâu để lưu và xử lý. Ngoài ra, thay vì
lưu mảng connection như trong thuật toán bên lý thuyết, ở phần code thử nghiệm,
những kết nối này dưới dạng một biến string, đưa những xử lý về cập nhật kết nối
về dạng xử lý xâu. Lý do là bởi không thể biết trước một robot có thể gặp bao nhiêu
robot đồng nghiệp trong quá trình làm việc, bởi vậy việc khai báo toàn bộ các biến
connection như trong lý thuyết là lãng phí và cũng không thể biết trước có bao
nhiêu robot sẽ kết nối để khai báo. Bởi vậy, thay vì lưu nhiều giá trị trong mảng, khi
thử nghiệm thuật toán, việc lựa chọn việc nối thêm giá trị hoặc thay đổi một phần
giá trị vào biến string sau mỗi lần gặp. Như vậy có thể lưu được những kết nối cần
thiết chỉ với hai biến.
Các thuật toán ở trên đã nêu trên, để thuật toán đó áp dụng trên thực tế cần
áp dụng lập trình socket vào để tiến hành giao tiếp. Ý tưởng chung về lập trình trên

56
socket của nó đều giống nhau. Tuy nhiên, ở đây ta chỉ cần chỉ rõ ra những điểm cần
thiết cần xử lý trong quá trình thực thi thuật toán:
- Thuật toán lưu trạng thái các robot lại: Khi robot đi vào các subcell trên mỗi
bước đi của nó nó sẽ lưu lại trạng thái của nó. Trong đó, trạng thái được cập nhật
lên server bao gồm:
 ALIVE: biểu thị trạng thái robot đang hoạt động bình thường
 DEAD: biểu thị trạng thái robot đã chết
 DONE: biểu thị trạng thái robot đã hoàn thành công việc
Nhờ việc lưu lại các trạng thái của chúng trên biến status của server, mỗi lần
một robot cần kiểm tra xem một đồng nghiệp nào đó của nó còn sống hay không
trên server, server dựa vào biến status để biết được con robot đó chết hay chưa
và gửi trả lời đó đến các robot đang hỏi. Khi robot có biết câu trả lời là robot
đang được hỏi đó đã chết, server cũng đồng thời xóa các cell đã đi của robot
chết kia, cập nhật lại trạng thái là DEAD của robot kia thành DONE để tránh các
lần hỏi sau này đến server. Chính vì vậy robot phải đồng thời cập nhật biến
status và cập nhật old_cells trên server. Xóa các cell kết nối với robot đã chết kia
khỏi danh sách quay lui.
- Thuật toán này dựa vào biến old_cells chung trên server để xác định những cell
đã đi qua. Do đặc trưng của thuật toán là dựa trên cây bao trùm STC là nếu như
toàn bộ khu vực làm việc chưa được bao phủ, khu vực đó nhìn tổng quan vẫn
bẩn. Do mỗi robot có thể mới đi một vài subcell của một cell chứ chưa đi hết
toàn bộ cell đó. Bởi vậy, như đã nói ở trên, khi có một robot chết, toàn bộ cell
mà robot đó đã đi qua cần được loại bỏ các cell của robot đó khỏi old_cells, để
robot khác có thể đảm nhiệm việc bao phủ khu vực đó, nhằm đảm bảo toàn bộ
khu vực được bao phủ toàn bộ.
4.3. Vấn đề quay lui robot và giải quyết tính mạnh mẽ khi thử nghiệm thuật
toán
4.3.1. Vấn đề phát sinh
Các thuật toán MSTC ở trên, giả định robot hoàn toàn có thể quay lui dễ

57
dàng. Tuy nhiên, khi thử nghiệm trong thực tế thì đây cũng là một vấn đề quan
trọng cần xử lý. Cụ thể như sau:
- Khi tìm thấy cell quay lui của robot. Nếu sử dụng đường quay lui dựa đi quay
lui dựa vào đường đã đi nếu gặp robot ở cuối đường đi thời gian sẽ lâu hơn. Nếu
sử dụng với đường đi đó áp dụng với nhiều robot thì cứ mỗi lần nó quay lui
xong và thực hiện xong công việc của của một robot chết thì nó phải trở vị trí
ban đầu của nó. Lại thực hiện lại đường theo con đường nó đã đi thời gian sẽ lâu
hơn.
- Khi một robot chết thì robot còn phải tránh robot trên nhưng trong thực tế có
thể robot chết đứng giữa hai subcell với khoảng cách để laze với khích thước là
D thì không thể biết robot đã chết là một chướng ngại vật khi thực hiện bao phủ
hoàn toàn như hình dưới.
Việc quay lui được thực hiện để đảm bảo mục tiêu bao phủ hoàn toán. Đầu tiên
tìm kiếm một đường đi từ cell của nó đang đứng đến cell mà nó gặp robot đã chết.
Gọi cell đó là “ô bắt đầu mới”. Từ “ô bắt đầu mới” xây dựng đường đi bao phủ tất
cả các vùng làm việc của robot đã chết.

Hình 4.4: Tình huống robot chết nằm giữa hai subcell

58
4.3.2. Áp dụng phương pháp khoảng cách để di chuyển đến cell cần đi
Mô tả
Ý tưởng của phương pháp này dựa trên việc đơn giản hóa quá trình xử lý.
Khi cần quay lui, thay đi theo đường đi ban đầu sẽ vướng vào khó khăn trên nên
thực hiện khó khăn vì việc chạy đi chạy lại của robot đó. Thay vì cách trên ta sử
dụng tìm đường đi trên các cell cũ của robot đó sao cho khoảng cách là ngắn nhất.
Những cell cũ của robot này được lưu lại. Khi biết được cell mục tiêu cần di chuyển
nó sẽ thực hiện tìm các cell xung quanh robot đó đứng mà là cell cũ của nó thì đi
đến cell gần cell mục tiêu theo khoảng cách Manhatan. Và việc thực hiện lặp lại khi
nó cần phải bao phủ thêm khu vực bao khủ của robot đã chết khác.
Sau khi gặp cell mục tiêu nó thực hiện thuật toán của nó đến tất cả cell còn
lại cho đến khi bao phủ hoàn toàn nhưng nó có vấn đề phát sinh như ta đã nói trên.
Đó là robot chết nằm ở giữa hai subcell hay cell nó đi vào subcell mà bị bao phủ
một phần. Để tránh trường hợp đó. Sử dụng các biến điểm để lưu các vết của robot
khi robot chuẩn bị chạy đến subcell mới nó sẽ lưu vết cell đó và thực hiện xóa vết
khi nó đã đi xong.
Ưu điểm của phương pháp này:
- Chắc chắn tìm được đư ờng quay lui cần thiết.
- Đảm bảo một số trường hợp thì đường đi ngắn nhất.
- Không trở về vị tri ban đâu của cell đó để quay lui đến cell mục tiêu để thực
hiện bao phủ cho robot chết khác.
Nhược điểm của phương pháp này:
- Tốn nhiều xử lý để tìm ra đường đi.
- Việc tính toán theo khoảng cách Manhatan khi gặp các nhánh cho đường đi
khoảng cách ngắn nhưng nó trở thành đường cụt chính vì thế thời gian đôi lúc sẽ
lâu hơn.
Tóm tắt các bước chính
Phương pháp quay lui
Các bước tiến hành:

59
1. Lưu các cell đã đi của robot. Lưu vết subcell mà nó đang đứng.
2. Trong khi thực thi thuật toán MSTC ở phần trước khi gặp robot khác nó sẽ
thực hiện lưu cell nó đang đứng.
3. Sau khi robot hoàn thành xong công việc của mình, nếu vẫn còn robot chưa
hoàn thành công việc, định kỳ 15 giây kiểm tra xem có robot nào chết hay
không.
4. Nếu có robot chết, kiểm tra nó có phải là robot mình đã gặp hay không, nếu
đúng robot di chuyển đến cell mà đã gặp gọi là cell mục tiêu để thực hiện
giúp đỡ cho robot đã chết này.
5. Với các cell đã đi của robot tìm kiếm đường đi theo khoảng cách
Manhattan đến cell mục tiêu. Với mỗi lần đi, kiểm tra xem vị trí hiện tại
thuộc cell mục tiêu hay chưa.
6. Nếu đã vào cell mục tiêu sử dụng thuật toán của nó đến các cell của robot
đã chết. Dựa vào vết để tránh các subcell mà robot đã chiếm một phần.
7. Tiến hành giúp robot bị chết.
4.4. Vấn đề trong tính mạnh mẽ của thuật toán MSTC
Trong lý thuyết đã được giả định rằng, khi robot chết sẽ không làm cản trở
các robot đang sống, bởi vậy thuật toán MSTC trong lý thuyết đảm bảo được tính
mạnh mẽ.
Tuy nhiên, trong thực tế thì không phải vậy. Robot bị chết lúc này sẽ là vật
cản, đặc biệt với thuật toán bao phủ không đầy đủ như thuật toán 5 và thuật toán 6
khiến cho toàn bộ cell mà nó đang nằm bị coi là vật cản và cell đó không thể đi vào
được. Do đó sẽ ảnh hưởng khá nhiều tới các robot khác trong trường hợp các robot
khác muốn giúp đỡ robot bị chết này. Thậm chí, trong tình huống đặc biệt, khi mà
cell khởi đầu và cell mà robot chết tại đó bị trùng nhau, robot còn sống tuy đã quay
lui lại để mong có thể giúp robot chết quét được một phần đường, nhưng cũng
không thể giúp được gì. Tình huống được mô tả ở hình dưới đây là một minh họa
cho tình huống này.

60
Hình 4.5: Tình huống robot còn sống không thể giúp robot đã chết
Trong tình huống mô tả ở trong hình trên, robot phía trên chết ngay tại điểm
nút thắt. Cell đó có robot chết là vật cản nên cả cell đó bị coi là có vật cản và không
thể đi vào. Lúc này, robot còn sống khác không thể giúp đỡ để bao phủ vùng làm
việc của cell chết đó được. Thuật toán 7 trở nên được sẽ thực hiện được vì nó coi
robot đã chết là vật cản và cũng thực hiện đi vào.
4.5. Kết quả thử nghiệm
4.5.1. Thử nghiệm trên môi trường mô phỏng:
Sơ đồ hệ thống
Sau đây là sơ đồ mô hình hệ thống trong môi trường mô phỏng:

61
Hình 4.6: Sơ đồ hệ thống khi triển khai trong môi trường mô phỏng
Mô tả môi trường mô phỏng
- Khu vực làm việc: Mô phỏng bằng Gazebo chạy với khu vực làm việc có kích
thước 4Dx4D.
- Vật cản: Mô phỏng bằng Gazebo, có kích thước DxD. Có 3 vật cản trong khu
vực làm việc.
- Robot: Mô phỏng robot Kobuki bằng Gazebo, kích thước robot là D.
- Laze: Mô phỏng laze Hokuyo gắn trên robot bằng Gazebo.
Cấu trúc chương trình:
Phần lập trình được được áp dụng theo các tầng như sau:

62
Hình 4.7: Sơ đồ cấu trúc chương trình
- Tầng vật lý: Đóng vai trò giao tiếp với phần cứng, ánh xạ các tập lệnh, ghi nhận
và truyền thông điệp từ chương trình xuống bộ phận điều khiển robot. Tầng gồm
các file launch: một file đơn giản giúp khởi động môi trường giao tiếp tới robot,
một file giúp trao đổi tham số tới node và có cấu trúc cơ bản như sau:
- Các thẻ arg: Định nghĩa các đối số cung cấp thông tin về kích thước dụng cụ
quét (qua đó giúp robot hình dung được kích thước một cell và subcell), tên
giải thuật (tùy giải thuật dạng quét mà cách thử nghiệm khác nhau) và tọa độ
điểm xuất phát (không quá quan trọng khi thực hiện bao phủ nhưng thuận
tiện cho quá trình ghi nhật ký để kiểm thử và gỡ lỗi)
- Các thẻ remap: Ánh xạ các biến khai báo trong chương trình thành các cấu
hình cho robot để truyền và nhận thông điệp điều khiển nguồn, tốc độ tịnh
tiến và tốc độ góc hiện thời cũng như truy vấn trạng thái từ tọa độ và laser.
- Các thẻ param: Khai báo những chỉ số mẫu cho quá trình điểu khiển robot và
được thiết lập cố định sẵn như là tốc độ tịnh tiến và tốc độ góc khởi tạo và tối
đa.
- Tầng giao tiếp: Nhận thông điệp từ file launch gửi lên và truyền các lệnh điều
khiển xuống. Tầng này thực hiện những nhiệm vụ:

63
- Đọc các thông số báo cáo tham số đầu vào như kích thước dụng cụ quét, tên
giải thuật, tọa độ điểm xuất phát... để thiết lập cấu hình khởi tạo
- Tiếp nhận tình trạng hiện thời của robot: Vị trí, tốc độ tịnh tiến, tốc độ góc,
sự xuất hiện của vật cản ở 2 bên trái phải và trước mặt
- Truyền các lệnh điều khiển cơ bản: Thiết lập tốc độ tịnh tiến, tốc độ góc và
miền lấy mẫu cho cảm biến.
- Kết nối với server khi bắt đầu chạy và ngắt kết nối với server khi hoàn thành
xong.
- Tầng điều khiển: Trừu tượng hóa mọi xử lí ở tầng thấp hơn, cung cấp các hàm
hỗ trợ robot thực hiện những thao tác phức tạp như đi đến một điểm cho trước,
xoay một góc bất kỳ, tìm kiếm vật cản trong miền lấy mẫu... Tầng này đóng vai
trò trung gian giữa những lệnh phức tạp ở tầng dưới với giải thuật được sử dụng
ở tầng trên.
- Tầng thuật toán: Chứa mã nguồn của giải thuật. Các giải thuật được lập trình ở
tầng này. Ngoài việc thực thi các xử lí theo đúng mô tả giải thuật, những hàm
trên là đoạn mã duy nhất được truyền xuống các tầng dưới để robot hiểu và thể
hiện ra bên ngoài rằng giải thuật đã thực sự chạy như thế nào.
Kết quả mô phỏng:
Sau đây mà một số hình ảnh về tiến hành chạy robot trong môi trường mô
phỏng:
- Trường hợp chạy bình thường trên thuật toán offline:

64
Hình 4.8: Thuật toán MSTC_Offline chạy với 2 robot
- Trường hợp chạy với OMSTC

Hình 4.9: Thuật toán ORMSTC chạy với 2 robot

65
- Trường hợp chạy bình thường trên thuật toán MSTC đề xuất

Hình 4.10: Thuật toán MSTC chạy với 2 robot


- Trường hợp chạy bình thường trên thuật toán MSTC-full đề xuất:

Hình 4.11: Thuật toán MSTC-full chạy với 2 robot

66
- Trường hợp chạy với một robot chết khá sớm:

Hình 4.12: Thuật toán MSTC-full chạy khi biết kịp thời robot chết
Khi robot kịp thời biết được con robot kia chết nó sẽ xem robot đó là vật cản
và thực hiện bao phủ. Robot còn sống khi tới điểm gặp nhau lần đầu tiên giữa 2
robot đã nhận ra robot kia không còn sống và quét luôn cho robot đã chết.
- Trường hợp chạy với một robot chết muộn:

67
Hình 4.13 Thuật toán MSTC-full chạy xong và thực hiện kiểm tra để quay lui để
bao phủ cho robot lỗi
Khi robot không kịp thời biết robot kia đã chết nó sẽ gửi đến cho robot gửi
đến server xem robot nào chết. Khi có câu trả lời nó tìm đến cell cần quay lui và
giúp đỡ cho robot đã chết kia.
4.5.2. Đánh giá thuật toán trên môi trường giả lập
Việc đánh giá thời gian làm việc là không thể thiếu đối với bài toán bao phủ.
Việc xây dưng thuật toán trên một nhóm robot để giảm thiểu thời gian bao phủ trên
khu vực làm việc. Nên việc đánh giá thời gian của thuật toán với nhóm robot không
thể bỏ qua. Trong thuật toán áp dựng cho một nhóm robot thì hai yếu tố ảnh hưởng
đến thời gian bao phủ đó là vị trí ban đầu và số lượng robot. Vị trí ban đầu của các
robot trong khu vực làm việc ảnh hưởng đáng kể thời gian hoàn thành phạm vi bao
phủ nên đây chỉ là đánh giá tương quan trên môi trường gazebo.
Ở đây chỉ xét đánh giá với thuật toán chạy bình thường và không có robot nào bị
lỗi không quay lui và xét với thuật toán với một robot chạy trên thuật toán Spiral-
STC và xét trên cùng một môi trường tính thời gian trung bình khi thực hiện thuật
toán. Với thuật toán MSTC đề xuất ở trên chạy với 2 robot thì thời gian nhanh tối

68
thiểu là 1,6 lần khi tránh 2 robot trên cùng các cell gần nhau trong nút thắt hay nói
chính xác hơn tùy vào vị trí ban đầu của robot mà nó có thể cải thiện. Và thuật toán
MSTC đề xuất sẽ nhanh hơn khi số lượng robot nhiều hơn. Với thuật toán MSTC
full đề xuất việc sửa dụng tính toán khoảng cách Manhattan chưa thấy được tính
mạnh mẽ. Giả sử khi không có vật cản, mọi cell xung chưa được thăm và robot tại
vị trí subcell thứ 4. Robot tìm thấy 2 cell là cell bên trên và cell bên phải nó sẽ thực
hiện nếu đi vào cell ở trên nó sẽ vào subcell thứ 3 ngược lại nó sẽ đi vào subcell thứ
2. Tại các subcell mới được đi vào này nếu nó chỉ có thể tìm thấy một cell duy và
thực hiện đi vào cell đó. Do đó việc áp dụng dựa vào khoảng cách Manhattan của
thuật toán 7 không được thể hiện rõ rang. Việc quét với 2 robot trên thuật toán 7
nhanh gấp 1,4 so với một robot.
4.5.3. Thử nghiệm trên môi trường thực tế
Mô tả môi trường mô phỏng
- Khu vực làm việc: Khu vực làm việc thực tế có kích cỡ 3Dx3D.
- Vật cản: Không có
- Robot: 2 robot Kobuki.
- Laze: 2 laze hokuyo gắn trên mỗi robot.
Sơ đồ hệ thống

69
Hình 4.14: Sơ đồ hệ thống khi triển khai trong môi trường thực tế
Cấu trúc chương trình
Khi thử nghiệm robot chạy trong thực tế, có 2 điểm khác với khi chạy trong
mô phỏng:
- Ở tầng thấp nhất, file launch khởi tạo môi trường sẽ trở nên đơn giản hơn vì chỉ
cần thiết lập giao tiếp với robot, không cần những mô tả khởi tạo như lúc mô
phỏng.
- Robot Kobuki trên thực tế khi chạy có một số sai sót nên phải đưa thêm vào
những tham số hiệu chỉnh, tùy từng robot khác nhau mà sai số khác nhau nên
quá trình và kết quả hiệu chỉnh cũng khác nhau:
- Laser Hokuyo lúc quét sẽ xuất hiện những lỗi nhất định, mặt khác khi robot
di chuyển thì laser gắn trên đó có thể bị xê dịch dẫn đến nhận định về hướng
và tọa độ tương đối của laser với robot là không đồng xuất, làm cho các tính

70
toán để tìm ra vị trí vật cản trước mặt trả về giá trị không chính xác. Các
tham số hiệu chỉnh về tỉ lệ ngưỡng khi lấy mẫu và độ lớn miền lấy mẫu được
thêm vào giúp tăng khả năng chịu lỗi để những sai số trên nếu xuất hiện là
chấp nhận được.
Trong quá trình robot chuyển động, nếu địa hình không bằng phẳng sẽ làm cho
robot bị trượt thêm một quãng rất ngắn lúc phanh, còn nếu robot chạy trên bề mặt
có ma sát lớn thì bộ lập mã trên bánh xe sẽ xử lí không thích hợp, làm cho tọa độ
mà robot nhận được trở nên khác biệt dần với tọa độ thực tế theo thời gian. Ở đây
một vài tham số điều chỉnh hướng và độ lớn vận tốc tịnh tiến cùng vận tốc góc cũng
như độ lệch tọa độ giới hạn sẽ hỗ trợ robot phần nào di chuyển chính xác hơn và tự
điều chỉnh khi đi chệch hướng. Trên thực tế, một số robot có một bên động cơ yếu
hơn nên luôn bị đi lệch, các tham số trên được sửa đổi dần dần để tăng tốc bên động
yếu giúp robot lấy lại cân bằng tốt hơn.
Kết quả thực tế
Ưu điểm của MSTC-full là nó có thể bao phủ trên mọi trường hợp như trong
hính 3.4. Mỗi khi hai robot gần kề nhau nó tránh được các trường hợp robot này
chặn đường đi của robot kia. Rất thích hợp trong hài toán thực tế vì hầu như các
robot trong thực tế đặt gần nhau. Việc chạy trong môi trường thực tế áp dụng cho
thuật toán MSTC-full khi sử dụng trong môi trường 3x3 với việc thiết lập tọa độ vị
trí. Robot dựa vào laze robot sẽ hiểu được môi trường 4x4 và các vật cản xung
quanh làm cho việc quay lui nhiều hơn. Cũng giống như trong đánh giá thuật toán
trên môi trường giả lập thuật toán MSTC-full sửa dụng trên áp dụng cho các môi
trường thì việc sử dụng khoảng cách Manhattan là không cao nên việc phân chia
cell cho robot cũng phụ thuộc rất nhiều vị trí ban đầu của mỗi robot cũng giống môi
trường giả lập. Trong chạy giả lập mỗi robot sẽ có tốc độ giống nhau nhưng trong
thực tế tốc độ các robot là khác nhau nên việc phân chia cell trên cây con chưa thể
hiện hiệu quả.

71
Hình 4.15: Hình ảnh chạy thuật toán trong thực tế

72
KẾT LUẬN
A. Kết luận
Luận văn tốt nghiệp của tác giả với đề tài: “Nghiên cứu thuật toán tìm đường
bao phủ cho một nhóm robot di động” đã cơ bản hoàn thành. Đề tài đã tìm hiểu
được các vấn đề sau:
- Tìm hiểu những khái niệm về robot dịch vụ, ứng dụng cần thiêt của robot
dịch vụ, tại sao phải cần giải quyết bài toán bao phủ cho robot dịch vụ.
- Tìm hiểu các phương pháp giải quyết bài toán bao phủ cho một robot như
phương pháp chia ô cổ điển, phương pháp dựa trên lưới ô vuông.
- Tìm hiểu các phương pháp giải quyết bài toán bao phủ cho một nhóm robot
như phương pháp MSTC – Offline và phương pháp ORMSTC.
- Tìm hiểu các công cụ phần mếm sử dụng trong lập trính nhúng như ROS tập
hợp các framework cung cấp những chức năng tương tự hệ điều hành để phát
triển các phần mềm sử dụng cho robot.
Các kết quả chính đ ạt được trong đề tài:
- Đề tài dựa vào tìm hiểu các phương pháp giải quyết bài toán bao phủ cho
một nhóm robot như phương pháp MSTC – Offline và phương pháp
ORMSTC để giải quyết bài toán bao phủ MSTC.
- Tác giả đề xuất ý tưởng mới phát triển thuật toán MSTC.
- Mô phỏng và trên thực tế các thuật toán MSTC tìm hiểu được và MSTC đề
xuất.
Đề tài đã hoàn thành việc thử nghiệm được thuật toán MSTC chạy trên robot
trong môi trường mô phỏng với Gazebo và chạy được tình huống bình thường với
hai robot chạy trong môi trường thực tế. Phần lập trình đã bám sát được theo ý
tưởng chung của thuật toán. Dựa vào kết quả thử nghiệm có thể thấy được rõ điểm
mạnh, điểm yếu của thuật toán này.
B. Những điểm chưa hoàn thiện
- Khi thực hiện theo cơ sở bài toán đang dựa vào các tính toán và lý thuyết
robot biết vị trí của nó ban đầu và phân tích chia cell lưới.

73
- Khi thử nghiệm theo và thuât toán trên đã sửa dụng ý tưởng lý thuyết thuật
toán ORMSTC đưa ra, tính mạnh mẽ mới chỉ đảm bảo với thuật toán đề xuất
MSTC – full, còn thuật toán đề xuất MSTC chưa thực sự được đảm bảo về
tính mạnh mẽ.
- Thuật toán quay lui hiện tại còn chưa được tối ưu.
- Khi cho chạy thuật toán trong mô phỏng, môi trường mô phỏng chưa thể
thêm mô tả được đường đi, khiến cho việc theo dõi các robot trong quá trình
thực thi khó quan sát.
- Khi cho chạy thuật toán trong môi trường thực tế, robot chưa thể chạy ổn
định, dẫn đến kết quả không được như mong đợi như trong môi trường mô
phỏng.
C. Hướng phát triển đề tài
- Cố gắng khắc phục được điểm yếu trong tính mạnh mẽ của thuật toán
ORMSTC cho thuật toán MSTC đề xuất. Như trong hình 4.5 cho phép thuật
toán có thể đi vào các subcell của cell robot đã chết để thực hiện bao phủ.
- Cố gắng xây dựng môi trường dựa trên thông tin các client của robot cung
cấp để triển khai thuật toán A* để quay lui được tối ưu hơn.
- Tìm hiểu cách hiển thị được đường robot đã di chuyển trong mô phỏng,
nhằm thuận tiện hơn khi quan sát kết quả thử nghiệm.

74
TÀI LIỆU THAM KHẢO
[1] Enric Galceran, Marc Carreras, A survey on coverage path planning for
robotics, Robotics and Autonomous Systems, Volume 61, Issue 12, December
2013, Pages 1258-1276
[2] Yasutomi, F., Yamada, M., and Tsukamoto, K. (1988), Cleaning robot control.
In Proc. Conf. IEEE IntcRobotics and Automation, pages 1839–1841.
[3] Noam Hazon, Dr. Gal, A. Kaminka; Robustandefficient multi-robot coverage;
Bar-Ilan University Department of Computer Science,Ramat-Gan, Israel;
October 2005.
[4] Bộ slide môn học IT4062: Network Programming (HEDSPI), thầy Bùi Trọng
Tùng, Đại học Bách Khoa Hà Nội
URL:http://soict.hust.edu.vn/~tungbt/it4062/
[5] Service robot - Wikipedia, the free encyclopedia
URL: https://en.wikipedia.org/wiki/Service_robot
[6] Robot Operating System - Wikipedia, the free encyclopedia
URL: https://en.wikipedia.org/wiki/Robot_Operating_System
[7] kobuki/Tutorials - ROS Wiki
URL: http://wiki.ros.org/kobuki/Tutorials/
[8] Gazebo: Tutorial: Beginner: Overview
URL: http://gazebosim.org/tutorials?cat=guided_b&tut=guided_b1

75

You might also like