Trong luận văn này, xe tự hành di chuyển với mục tiêu là xuất phát từ điểm đầu đến điểm đích nào đó cho trước với khoảng cách ngắn nhất và không va chạm vào các vật cản trên đường đi.. T
Trang 1TRONG KHÔNG GIAN 2D
LUẬN VĂN THẠC SĨ CÔNG NGHỆ THÔNG TIN
Trang 2TRONG KHÔNG GIAN 2D
Chuyên ngành: CÔNG NGHỆ THÔNG TIN
Trang 3Tôi xin gởi lời cảm ơn chân thành và sâu sắc nhất đến TS Vũ Đức Lung, người Thầy đã tận tình hướng dẫn tôi trong suốt quá trình thực hiện luận văn cao học và tạo mọi điều kiện để tôi có thể hoàn thành luận văn này
Tôi xin gởi lời cảm ơn đến khoa Khoa Công Nghệ Thông Tin, Đại Học Lạc Hồng; cùng Khoa Kỹ Thuật Máy Tính của Đại học Công Nghệ Thông Tin thuộc Đại học Quốc Gia TP.HCM và Thầy cô trong khoa trong thời gian qua đã góp ý, hỗ trợ cũng như tạo điều kiện thuận lợi cho tôi trong suốt thời gian làm luận văn
Tôi xin cảm ơn gia đình đã động viên và tạo điều kiện tốt nhất để tôi có thể theo đuổi việc học tập và nghiên cứu Tôi gởi lòng tri ân đến tất cả bạn bè, những người
đã động viên, thăm hỏi cũng như đã giúp đỡ thiết thực giúp tôi hoàn tất luận văn này
Trang 4Tôi cam đoan: Quyển luận văn tốt nghiệp này ngoại trừ các kết quả tham khảo
từ các công trình như đã ghi rõ trong luận văn, các công việc trình bày trong luận văn này là công trình nghiên cứu thực sự của cá nhân, được thực hiện trên cơ sở nghiên cứu lý thuyết, kiến thức kinh điển, nghiên cứu khảo sát tình hình thực tiễn và dưới sự hướng dẫn khoa học của Tiến sĩ Vũ Đức Lung
Một lần nữa, tôi khẳng định về sự trung thực của lời cam kết trên
Đồng Nai, ngày 25 tháng 10 năm 2013
Người cam đoan
Thái Quốc Thắng
Trang 5Trong những năm gần đây, robot tự hành (hoạt động không cần sự trợ giúp của con người, có thể được điều khiển hoặc theo dõi từ xa thông qua máy tính) đã
và đang rất phát triển từ quân sự tới dân sự, giúp giảm thiểu đáng kể nguy hại và công sức cho con người Một trong những vấn đề chính của robot tự hành là làm như thế nào để xử lý thông tin về môi trường xung quanh và đưa ra hành vi đúng đắn nhất Một robot có thể có rất nhiều hành vi khi hoạt động tự hành, và hành vi cụ thể mà luận văn này hướng đến là hoạch định đường đi ngắn nhất cho robot trong môi trường có nhiều vật cản từ một điểm đầu đến một điểm đích mong muốn nào
đó Sau khi đường đi tốt nhất đã được hoạch định, trong quá trình di chuyển robot
có thể gặp một số tác động ngoại gây cho việc bám đường di chuyển thiếu chính xác Vì vậy, luận văn cũng trình bày một phương pháp giúp robot di chuyển một cách chính xác theo một đường đi đã định trước
Về mặt lý thyết, luận văn tìm hiểu tổng quan các phương pháp tìm đường đi ngắn nhất cho robot, trong đó phương pháp tìm đường đi ngắn nhất cho robot dựa
việc xây dựng một đồ thị tầm nhìn (visibility graph) với độ phức tạp O(n2logn) kết
hợp với thuật toán Dijkstra được mô tả chi tiết Thêm vào đó việc điều khiển robot
di chuyển chính xác theo đường đi này được hiện thực dựa vào lý thuyết bộ điều khiển vi tích phân tỷ lệ (Proportional Integral Derivative - PID), một trong những lý thuyết được sử dụng rộng rãi trong lĩnh vực điều khiển tự động
Về mặt hiện thực, một môi trường kiểm thử được xây dựng để kiểm tra tính khả thi của lý thuyết bao gồm những vật cản giả lập và một robot Lego Mindstorm NXT được điều khiển thông qua máy tính Kết quả thực nghiệm cho thấy robot có thể di chuyển từ một điểm đầu đến một điểm đích mong muốn theo đường đi ngắn nhất mà không va chạm vào các vật cản một cách chính xác Đồng thời trong mô hình kiểm thử một camera quan sát cũng được lắp đặt trên robot, ghi nhận lại những hình ảnh quan sát trên đường đi và gởi về cho máy tính điều khiển nhằm mục đích phục vụ cho việc xử lý thông tin và phát triển luận sau này
Trang 6Trang Trang phụ bìa
Lời cảm ơn
Lời cam đoan
Tóm tắt luận văn
Mục lục
Danh mục các chữ cái viết tắt
Danh mục bảng
Danh mục hình
Lời mở đầu 1
Chương 1: GIỚI THIỆU ĐỀ TÀI 2
1.1 Lý do thực hiện đề tài 2
1.2 Nội dung đề tài 4
1.3 Tóm lược những kết quả đạt được 4
1.4 Cấu trúc luận văn 5
Chương 2: CÁC CƠ SỞ LÝ THUYẾT LIÊN QUAN 7
2.1 Tổng quát bài toán hoạch định đường đi (path planning) 7
2.1.1 Giới thiệu bài toán hoạch định đường đi 7
2.1.2 Các vấn đề liên quan khi giải quyết bài toán path planning 8
2.1.2.1 Không gian làm việc (Work space): 8
2.1.2.2 Không gian cấu hình (Configuration space): 8
2.1.2.3 Không gian tự do (Free space): 9
2.1.2.4 Vật di chuyển: 9
2.1.2.5 Vật cản (Obstacle): 10
2.1.2.6 Đường cong được rút ngắn nhất: 10
2.2 Tổng quan các giải pháp cho bài toán path planning theo visibility graph 12
2.3 Tìm hiểu giải thuật tìm đường đi ngắn nhất với độ phức tạp O(n2logn) 14
2.4 Tìm đường đi ngắn nhất trong visibility graph với giải thuật Dijkstra 18
Trang 73.1 Tìm hiểu Lego Mindstorm NXT 22
3.1.1 Giới thiệu 22
3.1.2 Lego Mindstorm NXT 23
3.1.3 Intelligent Brick NXT 25
3.1.4 Bluetooth trên Brick NXT 26
3.1.5 Lập trình với Brick NXT 27
3.1.5.1 NXT-G 27
3.1.5.2 C# và Microsoft Robotics Developer Studio 28
3.1.5.3 Các ngôn ngữ khác 28
3.2 Microsoft robotics develop studio 29
3.2.1 Giới thiệu 29
3.2.2 Lập trình 31
3.2.3.1 Các ngôn ngữ lập trình dạng viết code 31
3.2.3.2 Visual Programming Language (VPL) 31
3.2.3 Các robot được hỗ trợ 31
Chương 4: TÌM HIỂU BỘ ĐIỀU KHIỂN PID CHO ROBOT LEGO MINDSTORMS 32
4.1 Giới thiệu tổng quan về Bộ điều khiển PID 32
4.2 Các khâu chức năng trong bộ điều khiển PID 35
4.2.1 Khâu tỷ lệ “P” trong PID 35
4.2.1.1 Các mức công suất từ P đến mô tơ thực tế 39
4.2.1.2 Code mã giải cho bộ điều khiển P 39
4.2.1.3 Tóm tắt bộ điều khiển tỷ lệ “P” 42
4.2.2 Khâu tích phân “I” trong bộ điều khiển PID 42
4.2.2.1 Tổng thời gian chạy của error 43
4.2.2.2 Code mã giải cho bộ điều khiển PI 44
4.2.3 Khâu vi phân “D” của bộ điều khiển PID 45
4.2.3.1 Code mã giải cho bộ điều khiển PID 47
4.2.3.2 Điều chỉnh bộ điều khiển PID 48
4.3 Kết luận: 49
Trang 85.2 Tổng quan thiết kế 51
5.3 Hiện thực các hoạt động của xe tự hành trên mô hình thật 53
5.3.1 Chương trình tính đường đi ngắn nhất của xe tự hành: 53
5.3.2 Chương trình điều khiển, giao tiếp với xe tự hành 55
5.3.3 Xây dựng chức năng bám đường đi chính xác cho robot Lego Mindstorm NXT dựa trên PID: 59
5.3.4 Xây dựng chức năng xác định vị trí hiện tại của xe tự hành 61
5.3.5 Xây dựng chức năng ghi hình ảnh trên đường đi của xe tự hành 63
5.4 Kết luận 64
Chương 6: KẾT QUẢ ĐẠT ĐƯỢC VÀ HƯỚNG PHÁT TRIỂN 65
6.1 Kết quả đạt được 65
6.2 Hướng phát triển đề tài 66 TÀI LIỆU THAM KHẢO
Trang 9AI Artificial Intelligent
CCR Concurrency and Coordination Runtime
DSS Decentralized Software Services
MRDS Microsoft Robotics Develop Studio
PID Proportional Integral Derivative
SOA Service Oriented Architecture
VLSI Very Large Scale Integrated
VPL Visual Programming Language
VSE Visual Simulation Environment
Trang 10Bảng 3.1 Một số ngôn ngữ có thể lập trình với Lego Mindstorm NXT 28
Bảng 4.1 Code mã giải cho bộ điều khiển P 40
Bảng 4.2 Code mã giải cho bộ điều khiển PI 44
Bảng 4.3 Code mã giải cho bộ điều khiển PID 47
Bảng 4.4 Giá trị K’ của phương pháp Ziegler-Nichols 49
Bảng 5.1 Chương trình điều khiển Lego Mindstorm NXT bằng C# 57
Bảng 5.2 PID theo phương pháp điều chỉnh Ziegler–Nichols 60
Trang 11Hình 2.1 Vật cản dạng đa giác lõm 10
Hình 2.2 Đường cong được rút ngắn 10
Hình 2.3 Một đường cong được rút ngắn bằng đường cắt 11
Hình 2.4 G là tập hợp các đoạn đường đơn giản G v là tập các đường kết nối giữa mỗi đỉnh (visibility graph) 12
Hình 2.5 Visibility graph được tạo từ một tập các đa giác 13
Hình 2.6 Ví dụ một đường đi ngắn nhất trong visibility graph 14
Hình 2.7 Ví dụ về các cạnh giao nhau và cây tìm kiếm tương ứng 15
Hình 2.8 Điểm quét được bắt đầu với một nửa đường thẳng p 15
Hình 2.9 Một số ví dụ trong đó r chứa nhiều đỉnh 16
Hình 3.1 RCX 23
Hình 3.2 NXT 23
Hình 3.3 Các dạng robot thông dụng của họ Lego Mindstorm NXT 24
Hình 3.4 Các cảm biến trong bộ Lego Mindstorm NXT 25
Hình 3.5 Khả năng kết nôi với Bluetooth của Lego Mindstorm NXT 26
Hình 3.6 Môi trường lập trình trên NXT-G 27
Hình 4.1 Minh họa điểm đơn giản của robot với tất cả các chi tiết cần thiết 32
Hình 4.2 Cho thấy giá trị của ánh sáng màu trắng và màu đen 34
Hình 4.3 Phân chia ánh sáng thành ba phần 34
Hình 4.4 Minh họa ba mức độ của đường đi 35
Hình 4.5 Minh họa cách biến đổi trục để cân bằng giá trị error 36
Hình 5.1 Tổng quan về mô hình kiểm thử với xe tự hành 52
Hình 5.2 Giao diện mô phỏng 2D môi trường chưa vật cản 54
Hình 5.3 Ví dụ một tập tin gw trong thư viện LEDA hỗ trợ tạo đồ thị 54
Hình 5.4 Hình ảnh tìm đường di ngắn nhất trong chương trình demo 55
Hình 5.5 Kết quả kiểm tra thực tế 59
Hình 5.6 Quỹ đạo mong muốn và tập các đường đi của robot 60
Hình 5.7 Giao diện màn hình chính của chương trình CSTracker6 62
Hình 5.8 Ảnh thí nghiệm với robot Mindstorm NXT được chụp từ camera 62
Hình 5.9 Giao diện chương trình camera 64
Trang 12LỜI MỞ ĐẦU
Con người thường có thói quen dự định một việc gì đó trước khi làm và hầu như con người biết cần những hành động nào để đạt được những dự định đó Để giúp máy tính làm việc như con người, nghĩa là biết những hành động nào có thể đi đến mục tiêu, máy tính cần được cung cấp một lượng tri thức Tri thức ở đây rất đa dạng, máy tính “hiểu” được môi trường xung quanh nó như thế nào và các thao tác cần làm là việc rất khó khăn Một máy tính có những trang thiết bị hiện đại nhất hiện nay vẫn chưa thể cảm nhận hết những thay đổi của môi trường Tuy nhiên, với
sự phát triển mạnh mẽ của công nghệ thông tin những năm gần đây, máy tính đã có thể ghi nhận những tri thức liên quan và xử lý nó trong một số bài toán cụ thể đơn giản
Cùng với xu hướng này, vấn đề cụ thể mà luận văn hướng đến là xe tự hành và máy tính; cung cấp cho những hệ thống này một lượng tri thức cần thiết về môi trường mà nó sẽ hoạt động trong đó cũng như sinh ra một tập các hành vi cần cho một mục tiêu cụ thể nào đó Trong luận văn này, xe tự hành di chuyển với mục tiêu
là xuất phát từ điểm đầu đến điểm đích nào đó cho trước với khoảng cách ngắn nhất
và không va chạm vào các vật cản trên đường đi Một chương trình máy tính sẽ nhận lượng tri thức biết trước về môi trường, xử lý và sinh ra một tập các đường đi
dự đoán trước cho xe tự hành Thêm vào đó, xe tự hành luôn được điều khiển để đảm bảo di chuyển theo đúng tập đường đã quy hoạch Đề tài thực hiện trong luận văn là những bước đi đầu tiên trong việc hướng đến một hệ thống xe tự hành có đủ khả năng tự vận động và di chuyển trong không gian phức tạp với khả năng thu nhận tri thức cũng như xử lý nó
Phẩn việc cụ thể trong luận văn này là tổng quan lại cơ sở lý thuyết của bài toán quy hoạch đường đi (path planning), cụ thể là phương pháp dùng visibility graph Trong đó, luận văn đóng góp giải thuật xây dựng visibility graph với độ phức
tạp O(n2logn) và khối chức năng điều khiển xe tự hành di chuyển chính xác theo
đường đi đã được hoạch định – dùng ý tưởng từ bộ điều khiển PID (Proportional Integral Derivative) Bên cạnh đó một mô hình kiểm thử bao gồm một sân giả lập với nhiều vật cản và một robot Lego Mindstorm được xây dựng để kiểm tra tính khả thi của giải thuật
Trang 13đi từ một điểm khởi đầu đến điểm kết thúc trong không gian hai chiều hoặc nhiều chiều, đồng thời phải tránh được một tập hợp các vật cản Không gian có thể là tĩnh (các vật cản cố định và được biết trước) hoặc động (các vật cản không cố định hoặc không được biết trước) Quy hoạch đường chủ yếu có ba phương pháp tiếp cận: dựa trên tìm kiếm (Search-based), dựa trên lấy mẫu (Sampling-based) và tìm đường tổ hợp (Combinatorial-planning) [19] Đặc biệt với Combinatorial-planning thì việc tìm đường đi phải thông qua việc xây dựng một tập các đường có thể đi (roadmap)
và một trong những roadmap phổ biến là visibility graph Việc xây dựng một tập các đường có thể đi là nhiệm vụ chính trong toàn bộ quá trình Tuy nhiên, với một
số ứng dụng thực tế, ví dụ như: môi trường có nhiều vật cản thì giai đoạn này tốn rất nhiều thời gian Nhiều phương pháp đã được đưa vào để giảm độ phức tạp từ
O(n3) xuống O(n2logn) Tuy nhiên, kết quả O(nlogn) chỉ là một gợi ý lý thuyết [15]
Các tác giả của phương pháp này cũng khuyến cáo rằng nó là khá khó khăn để đạt
được độ chính xác O(nlogn) trong khi thực hiện, bởi vì cấu trúc dữ liệu của
O(nlogn) quá phức tạp Mặc dù tiêu tốn nhiều thời gian nhưng phương pháp tìm các
tập đường có thể đi vẫn hữu ích trong các ứng dụng tìm một đường đi đến điểm đích cho xe di chuyển tự động một cách chính xác Phương pháp này không yêu cầu thời gian thực hoặc trong môi trường tĩnh với số lượng vật cản trung bình, bởi vì nó đơn giản, trực quan và có thể thực hiện được Ngoài ra, phương pháp này có thể
Trang 14được áp dụng trong nhiều lĩnh vực khác như CAD/CAM, xử lý hình ảnh, VLSI, v.v…
Ở Việt Nam, trong những năm gần đây, một số đề tài cũng đã tìm hiểu và áp dụng lý thuyết của bài toán path planning vào các thiết bị tự hành trong thực tế Luận văn cao học “Nghiên cứu và xây dựng các giải thuật tìm đường đi ngắn nhất tránh vật cản cho thiết bị không người lái” của Trần Thị Như Nguyệt, Trường Đại Học Bách Khoa TP Hồ Chí Minh, năm 2011 đã tìm hiểu các giải thuật xây dựng visibility graph của nhánh Combinatorial-planning với nhiều độ phức tạp khác nhau, đồng thời đưa ra một vài phương pháp cải tiến cho quá trình xây dựng visibility graph và hiện thực kết quả trên xe tự hành thật [3] Tuy nhiên phần mềm ứng dụng vẫn chưa đầy đủ và chưa có thể áp dụng được trong thực tế
Thêm vào đó, có các đề tài khác như “Lập lộ trình chuyển động cho robot” của Trần Duy Quang, đồ án môn học, Trường Đại Học Khoa Học Tự Nhiên, năm
2011 [2]; Luận văn cao học “Một số phương pháp chính xác lập lộ trình chuyển động cho Robot” của Nguyễn Thị Thu Thủy, Trường Đại Học Thái Nguyên, năm
2008 [1] và luận văn cử nhân “Nghiên cứu Planning để giải bài toán xác định lộ trình” của Trần Thủy Tiên và Trần Hồng Thái, Trường Đại Học Khoa Học Tự Nhiên, năm 2003 [4] phần lớn tập trung vào tìm hiểu, nghiên cứu lý thuyết; chưa xây dựng các ứng dụng hỗ trợ một xe tự hành thật
Từ những lý do trên, luận văn “Tìm hiểu và xây dựng phần mềm hỗ trợ bài toán tìm đường đi ngắn nhất tránh vật cản cho xe tự hành trong không gian 2D” này
sẽ tập trung tìm hiểu lý thuyết của bài toán tìm đường theo hướng planning, cụ thể là phương pháp dùng visibility graph với độ phức tạp giải thuật là
combinatorial-0(n2logn) Và trên cơ sở kế thừa từ luận văn cao học [3], luận văn cũng sẽ xây dựng
thêm các khối chức năng cần thiết để hoàn chỉnh phần mềm ứng dụng của [3] và hiện thực thêm khối chức năng bám đường khi di chuyển giúp xe tự hành di chuyển theo đường đi định trước một cách chính xác kết hợp với các giải thuật tìm đường
có thể đưa vào thực tế sử dụng dễ dàng Thêm vào đó, luận văn cũng xây dựng thêm khối chức năng truyền nhận hình ảnh giữa xe tự hành và máy tính điểu khiển nhằm phục vụ cho việc xử lý thông tin sau này
Trang 151.2 Nội dung đề tài
Các nội dung chính trong đề tài gồm:
- Tìm hiểu tổng quát bài toán path planning
- Tìm hiểu tổng quan về các giải pháp cho bài toán tìm đường trên mặt phẳng, với các đặc tính cụ thể:
+ Vật cản đa giác lồi và lõm;
+ Vật cản tĩnh không di chuyển;
+ Đối tượng di chuyển trong không gian có kích thước (hình tròn)
- Tìm hiểu các giải thuật liên quan đến visibility graph với độ phức tạp O(n3)
và O(n2logn)
- Ứng dụng giải thuật Dijkstra để xây dựng đường đi ngắn nhất
- Tìm hiểu Bộ điều khiển PID cho robot Lego Mindstorms
- Tìm hiểu Lego Mindstorm NXT và Microsoft Robotics Develop Studio
- Trên những cơ sở lý thuyết đó, đề tài hoàn chỉnh các khối chức năng cần thiết để hoàn chỉnh phần mềm có thể áp dụng vào xe tự hành thật Các khối chức năng cụ thể dự kiến là:
+ Xây dựng chức năng điều khiển xe tự hành di chuyển chính xác theo đường đi ngắn nhất từ phần mềm
+ Xây dựng chức năng truyền hình ảnh trên đường đi về máy tính điều khiển
- Hiểu cách giải bài toán path planning theo visibility graph với các độ
phức tạp O(n3) và O(n2logn)
- Sau khi visibility graph được tạo ra, sẽ dùng giải thuật Dijkstra để tính đường đi ngắn nhất từ điểm A tới điểm B nào đó
- Tìm hiểu Lego Mindstorm NXT; Microsoft Robotics Develop Studio
Trang 16- Bộ điều khiển PID cho robot Lego Mindstorms
+ Khối chức năng truyền hình ảnh trên đường đi về máy tính điều khiển
- Xe tự hành nhận lệnh và đường đi ngắn nhất mà mình sẽ đi và di chuyển theo đường đi đó
- Một xe tự hành thật và một sân trên đó có chứa các vật cản sẽ được xây dựng để kiểm thử kết quả trong thực tế
1.4 Cấu trúc luận văn
Các chương còn lại của luận văn bao gồm:
Chương 2: Các cơ sở lý thuyết liên quan
2.1 Tổng quát bài toán path planning
2.2 Tổng quan các giải pháp cho bài toán path planning theo visibility graph
2.3 Tìm hiểu giải thuật tìm đường đi ngắn nhất với độ phức tạp
O(n2logn)
2.4 Giải thuật Dijkstra cho một đường đi ngắn nhất
Chương 3: Lego Mindstorm NXT và Microsoft Robotics Develop Studio 3.1 Tìm hiểu Lego Mindstorm NXT
3.2 Microsoft Robotics Develop Studio
Trang 17Chương 4: Tìm hiểu bộ điều khiển PID cho robot Lego Mindstorms
4.1 Giới thiệu tổng quan về Bộ điều khiển PID Controller
4.2 Các khâu chức năng trong bộ điều khiển PID
4.3 Kết luận
Chương 5: Hiện thực và đánh giá kết quả
5.1 Mục tiêu kiểm tra
5.2 Tổng quan thiết kế
5.3 Hiện thực
5.3.1 Môi trường và đối tượng cụ thể được sử dụng kiểm tra
5.3.2 Hiện thực các hoạt động của xe tự hành trên mô hình thật 5.3.2.1 Chương trình tính đường đi ngắn nhất của robot
5.3.2.2 Xây dựng khối chức năng bám đường đi chính xác cho
robot Lego Mindstorm NXT dựa trên PID
5.3.2.3 Chương trình điều khiển, giao tiếp với xe tự hành
5.3.2.4 Xây dựng chức năng xác định vị trí hiện tại của xe tự
hành
5.4 Kết luận
Chương 6: Kết luận và hướng phát triển
Trang 18Chương 2:
CÁC CƠ SỞ LÝ THUYẾT LIÊN QUAN
2.1 Tổng quát bài toán hoạch định đường đi (path planning)
2.1.1 Giới thiệu bài toán hoạch định đường đi
Path planning đôi khi được gọi là “Motion planning” là hành động của việc tìm kiếm một đường đi để đi từ vị trí A đến vị trí B Path planning là một bài toán tìm đường đi đã được áp dụng nhiều trong các lĩnh vực như sinh tin học, CAD/CAM, layout, xử lý ảnh,… và đặc biệt rất nhiều trong lĩnh vực robot Bài toán đặt ra là phải tìm ra đường đi tốt nhất theo một tiêu chuẩn tối ưu nào đó, sao cho một đối tượng có thể di chuyển dọc theo đường này từ điểm bắt đầu đến điểm kết thúc và không va chạm vào các vật cản trên đường đi trong môi trường hai hoặc nhiều chiều Các vật cản, điểm xuất phát và điểm đích là những đối tượng có kích thước và hình dạng khác nhau và motion planning là một trong những nhiệm vụ quan trọng trong việc kiểm soát thông minh của một robot di chuyển tự động Nó
thường được phân tách ra thành path planning và trajectory planning Path planning
là dùng để tạo ra một đường đi tự do có sự va chạm trong một môi trường với các vật cản và tối ưu hóa nó thông qua một số tiêu chí [20] Trajectory planning là lịch trình di chuyển của một robot, giúp robot di chuyển dọc theo đường đi đã được lập
kế hoạch trước
Có 2 phương pháp đã được đề xuất để giải quyết các vấn đề qui hoạch động
của một robot di động Phương pháp thứ nhất là Off-line planning là một địa hình
mà khi robot di chuyển trong đó được xem như tĩnh (điểm xuất phát và đích đến là biết trước và cố định, kích thước các vật cản không thay đổi, được cố định và biết
trước) hay còn gọi là tìm đường tĩnh toàn cục Phương pháp thứ hai là On-line
planning, tập trung vào việc giải quyết những sự không chắc chắn khi robot di
chuyển trong môi trường động hay còn gọi là tìm đường động cục bộ Trong một số
tài liệu, On-line path planning cũng được nghiên cứu với tên gọi navigation
problem
Trang 192.1.2 Các vấn đề liên quan khi giải quyết bài toán path planning
Giữa path planning và path mapping (bản đồ đường đi) thì không nên nhằm lẫn bởi vì path mapping tác động đến đặc tính của môi trường đường đi mà robot đi qua và có thể giúp nó xác định được vị trí cần đi đến Về mặt nghiên cứu, path planning được phân biệt dựa trên việc tính toán đường đi thông qua biểu hiện bởi tham số thời gian Do các robot khi di chuyển có những ảnh hưởng động học riêng đến từng loại robot, nên đường đi (path) phải được tính toán và kết hợp với nhiều yếu tố khác để giải quyết bài toán path planning:
2.1.2.1 Không gian làm việc (Work space):
Không gian làm việc (work space) là một mặt phẳng hai chiều gồm một robot được xem như một điểm di động và một tập S = {P1 ,… , P t} của các vật cản đa giác được đặt ở những vị trí cố định trước Việc xác định vị trí hoặc hình dạng của robot có thể được xác định bằng vector dịch chuyển Robot di chuyển
được thông qua một vector (x, y) bằng R(x, y) Vị trí của robot được xác định bởi
các tham số tương ứng với số bậc tự do (gọi là DOF - Degrees Of Freedom) của robot Khi robot di chuyển trên mặt phẳng không gian 2 chiều thì có bậc là 2, nếu số bậc tự do là 3 thì robot có thể di chuyển và quay trên mặt phẳng không gian 3 chiều Tham số để robot di chuyển trong không gian 3 chiều thì cao hơn Nhưng do thời gian và điều kiện nên trong luận văn này chỉ đề cập đến robot di chuyển trong mặt phẳng không gian 2 chiều
2.1.2.2 Không gian cấu hình (Configuration space):
Không gian mà các tham số của robot có thể di chuyển được gọi là không gian cấu hình (configuration space) Khái niệm này được giới thiệu bởi
Lozano-Perez [23] Không gian cấu hình được ký hiệu là C( ) Điểm p trong
không gian cấu hình thì tương ứng với một vị trí nhất định (p) của robot trong không gian làm việc Hình dạng của robot trên mặt phẳng cũng được xác định đến không gian làm việc Tuy nhiên, nó được dùng để phân biệt hai khái niệm: không gian làm việc và không gian cấu hình Không gian làm việc là không gian
mà trong đó các robot có thể xoay tròn và di chuyển được trong phạm vi đã được xác định trước; Không gian cấu hình là không gian chứa các tham số của robot Robot được xem là điểm hình tròn trong không gian làm việc, tương ứng bởi
Trang 20một điểm trong không gian cấu hình và bất kỳ điểm nào trong không gian cấu hình đều tương ứng với một số vị trí của robot trong không gian làm việc
Như vậy, không phải tất cả vị trí của robot trong không gian làm việc thì đều có thể đi được (nơi mà các robot giao nhau với một trong những vật cản
trong tập S) Do đó, điểm tương ứng trong không gian cấu hình không thể xảy ra
Phần của không gian cấu hình bao gồm những điểm này được gọi là không gian cấu hình vùng cấm hay không gian vùng cấm Không gian vùng cấm được ký
hiệu là C forb (R, S) Phần còn lại của không gian cấu hình, bao gồm những điểm
tương ứng với những vị trí tự do nơi mà các robot không cắt bất kỳ vật cản nào thì được gọi là không gian cấu hình tự do hay không gian tự do và nó được ký
hiệu là C free (R,S) Những vị trí của robot được ánh xạ đến những điểm trong không gian cấu hình, tương tự như một vật cản P trong không gian làm việc được ánh xạ tới một tập các điểm p trong không gian cấu hình sao cho (p) cắt nhau với P Tập kết quả đó được gọi là không gian cấu hình vật cản hay C-
obstacle của P
2.1.2.3 Không gian tự do (Free space):
Không gian dùng để thiết lập các cấu hình tránh va chạm với những vật cản
được gọi là C free hay còn gọi không gian tự do Phần bù của C free trong C được
gọi là vật cản hoặc khu vực vùng cấm
Thông thường, khu vực vùng cắm là rất khó để tính toán một cách rõ ràng
hình dạng của C free Tuy nhiên, việc thử nghiệm có được hay không thì hình
dạng đã cho trong C free cũng là hiệu quả Trước tiên, sự di chuyển về phía trước của robot sẽ xác định vị trí hình học của robot, và thử nghiệm sẽ cho thấy sự có
sự va chạm hay không nếu hình dạng của robot va chạm với hình dạng của môi trường
2.1.2.4 Vật di chuyển:
Cần phải xét đến hình dạng của vật di chuyển trong bài toán được thể hiện như thế nào khi nó di chuyển từ điểm xuất phát đến điểm đích, vì nó có ảnh hưởng rất lớn đến quá trình tính toán trong quá trình xây dựng một đường đi tốt nhất Ngoài ra cũng phải xét thêm vật di chuyển có phải là chất điểm hay có kích thước hoặc có bao nhiêu bậc tự do, Trong luận văn này, vật di chuyển được
Trang 21xem là một đối tượng di chuyển trong không gian có kích thước (hình tròn)
2.1.2.6 Đường cong được rút ngắn nhất:
Mục tiêu chính là tìm đường đi ngắn nhất tránh va chạm vào vật cản từ
điểm bắt đầu (P start ) đến điểm kết thúc (P goal ) của Robot R Chú ý rằng chỉ
cần có một đường đi ngắn nhất trong tất cả các đường đi được xem là ngắn
Để có được một đường đi ngắn nhất tồn tại, điều quan trọng cần lưu ý đến các vật cản là các tập mở Điều này có nghĩa là các robot được phép di chuyển men theo các vật cản
Hình 2.2 - Đường cong được rút ngắn [16]
Trang 22Nhìn vào cấu trúc của đường đi, xét các đường cong trong Hình 2.2, dễ dàng thấy rằng đường đi này có thể được rút ngắn theo đường gạch nối Có hai đặc điểm của đường đi rút ngắn cần lưu ý:
Đặc điểm thứ nhất, đường đi rút ngắn bao gồm các đoạn đường thẳng
mà không gồm các đoạn đường cong Đặc điểm này là do phần cong của đường đi có thể được thay thế bằng một đoạn thẳng mà đoạn thẳng vẫn tồn tại trong không gian tự do Nếu vật cản là các đa giác và đường đi là đường
cong thì có một điểm p trên vị trí đường cong của đường đi đó Như vậy, vị trí trung tâm của đường cong tập trung tại điểm p và hoàn toàn chứa trong
không gian tự do Khi đó, một phần của đường đi sẽ chứa bên trong vòng tròn và có thể được rút ngắn bằng cách thay thế nó bằng một đoạn nối hai điểm trên đường biên của vòng tròn Ý tưởng này được minh họa trong Hình 2.3
Hình 2.3 - Một đường cong được rút ngắn bằng đường cắt [16]
Đặc điểm thứ hai, đường đi chứa các đỉnh của những vật cản Nguyên
lý này cũng tương tự như đặc điểm thứ nhất Nếu có một đỉnh v trên đường
đi thì sẽ tạo ra một vòng tròn tâm tại v và hoàn toàn nằm trong không gian
tự do, đường đi có thể được rút ngắn bằng cách thay thế một phần của
đường đi được thực hiện lần lượt tại v bởi một đoạn đường đi ngắn hơn Rõ ràng đây sẽ là trường hợp, khi v là một đỉnh vật cản và ranh giới những
đường biên của các vật cản Đặc điểm này được thể hiện theo một cách chính xác trong Bổ đề 2.1 sau đây
Bổ đề 2.1: Bất kỳ đường đi ngắn nhất giữa P start và P goal trong một tập
S là các vật cản đa giác rời nhau thì sẽ có một đường đi đa giác mà bên trong là các đỉnh của S [10]
Trang 23Để tìm được một đường đi ngắn nhất, thông qua việc xây dựng từ tập các đường có thể đi (roadmap) và một trong những roadmap phổ biến là visibility graph
2.2 Tổng quan các giải pháp cho bài toán path planning theo visibility graph
Một đồ thị tầm nhìn, hay còn gọi là một visibility graph có hình ảnh như trong hình 2.4 và 2.5
Việc xây dựng một visibility graph có thể hiểu như một tiến trình mà dữ liệu
đầu vào là là đồ thị G được mô tả bằng một tập hợp các vật cản trong một không gian đa chiều, và dữ liệu đầu ra là đồ thị G v mô tả khả năng hiển thị giữa mỗi đỉnh
và mọi đỉnh khác trong G Visibility được xác định như là một đường thẳng có thể
đi giữa hai đỉnh mà không cắt bất kỳ cạnh khác trong đồ thị G Bằng cách này, hai
đỉnh nhìn thấy nhau được cho là không bị cản trở bởi bất kỳ vật cản nào, và một
đường thẳng được vẽ giữa chúng và đưa vào đồ thị G v
Một ví dụ về visibility graph trong không gian mặt phẳng 2 chiều cho tập các đoạn thẳng được thể hiện trong hình 2.4 và visibility graph cho tập các đa giác được thể hiện trong hình 2.5
Hình 2.4 - G là tập hợp các đoạn đường đơn giản và Gv là tập các đường kết nối giữa
mỗi đỉnh (visibility graph) [9]
Tập các vật cản trong đồ thị G có thể bao gồm nhiều kiểu hình dạng khác nhau
như: thẳng, tròn, đoạn thẳng, đa giác lồi, đa giác lõm hoặc thông thường nhất là các
đa giác đơn lẻ Đã có nhiều thuật toán khác nhau được phát triển dựa trên giả thuyết
mà trong đó các kiểu hình dạng của vật cản được cho phép Nhưng trong phần này chỉ tập trung vào các đa giác lồi lõm đơn lẻ mà không cắt nhau
Trang 24Hình 2.5 - Visibility graph được tạo từ một tập các đa giác
Ký hiệu tập các vật cản là S, các nút của visibility graph là các đỉnh của S và các cạnh của visibility graph là một cung giữa hai nút v và w nếu nó nhìn thấy
mọi đỉnh khác Nghĩa là, nếu đoạn ̅̅̅̅ hoặc là biên của vật cản hoặc là không cắt
vật cản trong S sẽ trở thành một cạnh của visibility graph Nói cách khác, hai đỉnh
mà nhìn thấy mọi đỉnh khác thì gọi là visible, và đoạn nối chúng là một cạnh tầm nhìn (visibility edge) Lưu ý, hai điểm trên cùng một cạnh của đa giác thì luôn
luôn thấy mọi đỉnh khác
Nếu bài toán thêm vào hai đỉnh P start và P goal cho mục đích xác định một đường tối ưu nào đó giữa đỉnh này, P start và P goal sẽ được đưa vào tập đỉnh trong visibility graph và các cạnh visibility edge giữa hai đỉnh này và và các đỉnh khác cũng được thiết lập
Để tính toán một đường đi ngắn nhất từ P start đến P goal, có thể áp dụng giải thuật sau:
ShortestPath(S, P start , P goal )
Đầu vào: một tập S của các đa giác rời nhau, 2 điểm P start và P goal trong
không gian tự do
Đầu ra: Đường đi ngắn nhất mà không va chạm với đường nối giữa hai
điểm P start và P goal
1 G vis VisibilityGraph ⋃
2 Gán mỗi cung (v,w) trong G vis một trọng số, là chiều dài của đoạn ̅̅̅̅
3 Sử dụng giải thuật Dijkstra để tính đường đi ngắn nhất giữa điểm
Trang 25
Như vậy để giải quyết bài toán path planning sử dụng visibility graph có 2 vấn
đề cần giải quyết:
(1) Tạo ra một visibility graph
(2) Dùng giải thuật Dijkstra để tìm đường đi ngắn nhất của robot trên visibility graph đã tạo ra (có thể sử dụng các giải thuật tìm đường đi ngắn nhất trên đồ thị có trọng số khác như: Bellman-Ford, A* search, Floyd-Warshall)
Hình 2.6 - Ví dụ một đường đi ngắn nhất trong visibility graph [16]
2.3 Tìm hiểu giải thuật tìm đường đi ngắn nhất với độ phức tạp O(n2logn)
Như trình bày trong phần 2.2, để tính visibility graph của S, cần phải tìm tất
cả các cặp đỉnh khác mà chúng có thể thấy nhau được Thực hiện bằng cách quan sát những đoạn thẳng nối giữa cặp đỉnh để kiểm tra xem chúng có cắt nhau với bất kỳ vật cản nào không, cách tiếp cận này dẫn đến thời gian chạy của giải thuật
O(n3) Phần này trình bày giải thuật giúp giảm thời gian xây dựng một visibility
graph xuống còn O(n2logn)
Quá trình xây dựng một visibility graph được trình bày gồm các bước:
Trang 26hiện thực sử dụng một cấu trúc dữ liệu cây T như hình 2.8 Từ một đỉnh, một đường thẳng p như ví dụ có thể cắt các cạnh theo thứ tự e 1 , e 2 , e 3 , e 4 , e 5 , e 6 Các cạnh này được lưu trong cây theo thứ tự sao cho lá ngoài cùng bên trái là cạnh
đầu tiên được cắt bởi p và lá ngoài cùng bên phải là cạnh cuối cùng được cắt Các nút bên trong của T cũng lưu trữ các cạnh dùng để hướng dẫn tìm kiếm
Hình 2.7 - Ví dụ về các cạnh giao nhau và cây tìm kiếm tương ứng [16]
Như vậy, từ một điểm bất kỳ có thể tao một tia quét vòng tròn xung quanh
để xác định các cạnh bị cắt, và từ đó cũng xác định được tập đỉnh mà “visible”
với đỉnh này Thuật toán VisibleVertices mô tả quá trình này cho một điểm p bất
kỳ và trả về tất cả các đỉnh đa giác có thể nhìn thấy từ p
Hình 2.8 - Điểm quét được bắt đầu với một nửa đường thẳng p [10]
Điểm quét được bắt đầu với một nửa đường thẳng p theo hướng được xác
định và được xử lý theo chiều kim đồng hồ (xem Hình 2.9) Vì vậy, các thuật
toán trước tiên sắp xếp các đỉnh theo góc chiều kim đồng hồ mà đoạn từ p đến đỉnh khác nằm trên trục x Để có thể quyết định tầm nhìn của một đỉnh w, cần
phải biết phí cắt ̅̅̅̅ trong vật cản bất kỳ Do đó, rõ ràng sự lựa chọn là để xem xét bất kỳ đỉnh đó có thể nằm trong ̅̅̅̅ trước khi xử lý w Nói cách khác, các đỉnh mà góc là giống nhau thì được xử lý theo thứ tự tăng dần khoảng cách đến p
Trang 27VisibleVertices(p,S)
Đầu vào: Xét tập S của vật cản đa giác rời nhau và một điểm p không nằm
bên trong bất kỳ vật cản
Đầu ra: Tập hợp tất cả các đỉnh vật cản nhìn thấy từ p
Sắp xếp các đỉnh vật cản nằm xung quanh tâm p theo chiều kim đồng hồ Bắt đầu với một nửa đường ρ : y = 0
Tìm tất cả các cạnh vật cản bị cắt bởi p và lưu trữ chúng vào cây cân bằng
T
W
for i 1 to n
do if Visible(w i ) then thêm w i vào W
Chèn các cạnh mới liên quan đến w i vào T Xóa các cạnh cũ liên quan đến w i từ T
return W
Trong chương trình VisibleVertices có hàm con Visible, hàm này phải quyết định xem một đỉnh w i có thể bị nhìn thấy hay không
Hình 2.9 - Một số ví dụ trong đó r chứa nhiều đỉnh [10]
Trong tất cả các trường hợp wi-1 là nhìn thấy được
Trong hai trường hợp trái wi cũng có thể nhìn thấy và trong hai trường hợp phải wi là không nhìn thấy được
Một số trường hợp có thể xảy ra khi có hoặc không thể cắt bên trong của các vật cản đến các đỉnh Như vậy cần phải kiểm tra tất cả các cạnh với đỉnh
Trang 28trên để quyết định xem w i có thể nhìn thấy không May mắn thay là đã kiểm tra chúng trong khi xem xét các đỉnh trước đó nằm trên Do đó, có thể quyết
định khả năng hiển thị của w i như sau Nếu w i-1 không nhìn thấy được thì w i cũng
không thể nhìn thấy được một trong hai Nếu w i-1 có thể nhìn thấy thì w i có thể
cũng nhìn thấy được cả hai Hoặc toàn bộ đoạn w i-1 và w i nằm trong vật cản trong
đó cả w i-1 và w i là đỉnh, hoặc đoạn được cắt bởi một cạnh trong T (Bởi vì trong trường hợp này cạnh nằm giữa w i-1 và w i nó phải cắt đoạn ) Thử nghiệm này là chính xác bởi vì ⋃ (Nếu i = 1, thì không có
đỉnh ở giữa p và w i, nên chỉ nhìn đoạn ) Chương trình con:
Visible(w i )
If đoạn cắt phía trong vật cản, khi đó w i là một đỉnh cục bộ tại w i
then return false else if i = 1 or w i-1 thì không nằm trên đoạn
then tìm trong T với cạnh е trong lá ngoài cùng bên trái
if e tồn tại và đoạn cắt е
then return false else return true else if w i−1 thì không nhìn thấy
then return false else tìm trong T với cạnh е mà cắt
if е tồn tại
then return false else return true
Thuật toán này được giới thiệu bởi Lee [11] Quan sát VisibileVertices, có
thể thấy rằng thời gian tiêu tốn trước khi cho vòng lặp chi phối bởi bước phân
loại, quá trình này đòi hỏi thời gian là O(nlogn) Mỗi lần thực hiện thời gian của vòng lặp yêu cầu O(logn) để thực hiện liên tục một số xử lý trên T, cộng với thời
gian để thực hiện liên tục một số thử nghiệm về hình dạng Vì thế, thời gian để
thực hiện một lần là O(logn), dẫn đến thời gian để chạy toàn bộ O(nlogn) Tuy
nhiên, phải áp dụng VisibileVertices cho mỗi đỉnh n của S để tính toàn bộ
visibility graph, dẫn đến thời gian thực hiện được bằng O(n2logn)
Trang 292.4 Tìm đường đi ngắn nhất trong visibility graph với giải thuật Dijkstra
Để tạo visibility graph, giải thuật đơn giản nhất là lần lượt kiểm tra từng đoạn thẳng có trong đồ thị xem đoạn thẳng này có bị cắt bởi bất kỳ vật cản nào không
Giải thuật này chạy trong thời gian O(n3) Để giải thuật để đạt được độ phức tạp tốt
hơn, Lee đã cải tiến độ phức tạp từ O(n3) xuống O(n2logn) Lee sử dụng phương
pháp quét xoay tròn và một danh sách lưu lại thứ tự quét lần trước để làm giảm độ phức tạp của giải thuật [8]
Visibility graph thường được nghĩ đến để sử dụng trong việc tìm kiếm con
đường đi ngắn nhất trên mặt phẳng ơ-lít từ một điểm bắt đầu s đến điểm đích d và
nhiệm vụ là tìm đường đi nối tiếp tối ưu thông qua không gian trở ngại mà không vi phạm các ràng buộc vật lý Thực tế ứng dụng này được khai thác khi các đường đi ngắn nhất được tìm thấy trên các đường cong của visibility graph Một khi đồ thị visibility graph đã được xây dựng, vấn đề tìm con đường ngắn nhất có thể được giải quyết bằng cách sử dụng các thuật toán nổi tiếng như các thuật toán Dijkstra, thuật toán tìm kiếm A*, hoặc thuật toán Floyd-Warshall
Việc sử dụng thuật toán Dijkstra để giải quyết bài toán tìm đường đi ngắn nhất
từ đỉnh xuất phát đến đỉnh đích trong đồ thị có trọng số trên các cung của đồ thị không âm là tối ưu nhất
Thuật toán được xây dựng trên cơ sở gán các đỉnh là các nhãn tạm thời Nhãn của mỗi đỉnh sẽ cho biết cận trên của độ dài đường đi ngắn nhất từ điểm xuất phát đến nó Các nhãn này sẽ được biến đổi theo thủ tục lặp, nghĩa là ở mỗi bước lặp sẽ
có một nhãn tạm thời trở thành nhãn cố định Nếu nhãn của một đỉnh nào đó trở thành cố định thì nó sẽ không phải là cận trên mà là độ dài đường đi ngắn nhất từ đỉnh xuất phát đến nó Thuật toán Dijkstra được mô tả như sau:
Procedure Dijkstra;
Đầu vào : Đồ thị có hướng G = (V, E) với n đỉnh, s V là đỉnh xuất phát,
a[u,v] V là ma trận trọng số;
Giả thiết : a[u,v] ≥ 0; u,v V
Đầu ra : khoảng cách từ đỉnh s đến tất cả các đỉnh còn lại d[v], v V
Begin (*Khởi tạo*)
For v V do
Trang 30Tim dinh u T thỏa mãn d[u] = min{d[z]:z T};
T := T {u}; (*cố định nhãn của đỉnh u*)
For v T do (*gán nhãn lại cho các đỉnh trong T*)
If d[v] > d[u] + a[u,v] then
Đánh giá số phép toán cần thực hiện theo thuật toán: Ở mỗi bước lặp để tìm ra
điểm u thì cần thực hiện O(n) phép toán, để gán nhãn lại cũng cần thực hiện một số lượng phép toán là O(n) Thuật toán cần phải thực hiện n - 1 bước lặp Vậy thời gian tính toán của thuật toán là cỡ O(n2)
Giải thuật tìm đường đi ngắn nhất giữa cặp đỉnh:
Định nghĩa 1: Xét đồ thị có trọng số G = (V,E,w), với hàm trọng số w: ER là
ánh xạ từ tập các cạnh E đến tập số thực R
Định nghĩa 2: Đường đi p đi từ đỉnh u đến đỉnh v là dãy các cạnh nối tiếp
nhau, bắt đầu từ đỉnh u kết thúc tại đỉnh v được biểu diễn như sau:
p = (u = v 0 , v 1 , …,v k = v) Định nghĩa 3: Độ dài của đường đi p = (v 0 , v 1 , …, v k), ký hiệu (p) là tổng các trọng số của các cạnh trên đường đi:
Trang 31∑
Định nghĩa 4: Gọi ρ(u,v) là tập tất cả đường đi từ u đến v Độ dài đường đi
ngắn nhất từ đỉnh u đến đỉnh v được xác định bởi:
d(u,v) = min{ (p) p (u,v)}
Định nghĩa 5: Đường đi ngắn nhất p min (u,v) từ đỉnh u đến đỉnh v là đường đi
có độ dài d(u,v)
Giải thuật Dijkstra:
Đây là bài toán tìm một đường đi giữa hai đỉnh sao cho tổng trọng số của các cạnh tạo nên đường đi đó là nhỏ nhất Định nghĩa một cách hình thức, cho trước
một đồ thị có trọng số (nghĩa là một tập đỉnh V, một tập cạnh E, và một hàm trọng
số có giá trị thực f : E → R), cho trước một đỉnh v thuộc V, tìm một đường đi p từ v tới mỗi đỉnh v' thuộc V sao cho là nhỏ nhất trong tất cả các đường nối từ v tới
v' Bài toán tìm đường đi ngắn nhất giữa mọi cặp đỉnh là một bài toán tương tự,
trong đó, phải tìm các đường đi ngắn nhất cho mọi cặp đỉnh v và v'
Ở mọi đỉnh v giải thuật Dijkstra xác định ba thông tin: k v , d v , và p v Trong đó:
k v : mang giá trị boolean xác định trạng thái được chọn của đỉnh v
Ban đầu, khởi tạo tất cả các đỉnh v chưa được chọn, nghĩa là: k v =
false, v V
dv: chiều dài đường đi được tìm thấy cho đến thời điểm đang xét
Khởi tạo d v = ∞, v V{a}, da = 0
pv: đỉnh trước của đỉnh v trên đường đi ngắn nhất đi từ a đến b Đường đi ngắn nhất từ a đến b có dạng {a, …, p v , v, …, b}
Khởi tạo, p v = null, v V
Các bước của giải thuật Dijkstra:
B1: Khởi tạo: Đặt k v := false v V; d v = ∞, v V{a}, da := 0
B2: Chọn v V sao cho k v = false và d v = min{d tt V, k t = false}
Nếu d v = ∞ thì kết thúc, không tồn tại đường đi từ a đến b
B3: Đánh dấu đỉnh v, gán k v := true
B4: Nếu v = b, kết thúc và d b chính là độ dài đường đi ngắn nhất đi từ a đến b Ngược lại nếu v ≠ b thì chuyển sang B5
Trang 32B5: Với mỗi đỉnh u kề với v mà k u = false, kiểm tra
Nếu d u > d v + w(v,u) thì d u := d v + w(v,u)
Ghi nhớ đỉnh v: p u := v Quay lại bước B2
Độ phức tạp của giải thuật Dijkstra:
Gọi f(n) số lần giải thuật Dijkstra khảo sát một cạnh của đồ thị G trong trường hợp xấu nhất Khi đó có: f(n) < O( V2)
Chứng minh: Cho n = V, B5 là vòng lặp chứa các bước B2B5, vòng lặp
được thực hiện đến khi v = b Vì ở mỗi vòng lặp sẽ rút ra một đỉnh của V và khởi đầu V có n phần tử, nên vòng lặp được xử lý nhiều nhất là n lần
Ở B2 số đỉnh tối đa được khảo sát là n – 1 đỉnh
Ở B5 số đỉnh kề tối đa được khảo sát là n – 1 đỉnh
Do đó: f(n) ≤ 2(n – 1)n < O( V2)
Vậy độ phức tạp của giải thuật Dijkstra là O( V2)
Trang 33Phiên bản phần cứng và phần mềm của bộ thiết bị Mindstorms Robotics Invention System là một khối có khả năng lập trình được tạo ra tại MIT Media Lab, kết hợp giữa MIT và Lego Môi trường lập trình trực quan đầu tiên được gọi là LEGOsheets được tạo ra bởi Trường đại học University of Colorado vào năm 1994 dựa trên AgentSheets
Những thiết bị Mindstorms cũng được bán và sử dụng như một thiết bị hỗ trợ giáo dục Ban đầu thông qua sự hợp tác giữa Lego và MIT Media Laboratory Các sản phẩm cho phiên bản giáo dục được gọi là Lego Mindstorms được sử dụng cho các trường học, và đi kèm với các phần mềm lập trình dựa trên ROBOLAB GUI
Nó được phát triển tại Đại học Tufts bằng cách sử dụng National Instruments LabVIEW như một động cơ Ngoài ra, phần mềm vận chuyển có thể được thay thế bằng phần mềm của đối tác thứ ba hoặc ngôn ngữ lập trình, bao gồm một trong số những phổ biến nhất được sử dụng bởi các chuyên gia trong ngành công nghiệp hệ thống nhúng như Java và C, Sự khác biệt duy nhất giữa các phiên bản giáo dục được gọi là các “Challenge Set” và hàng loạt người tiêu dùng được gọi là “Inventor Set”, nó bao gồm một cảm biến cảm ứng và nhiều lựa chọn hơn trong ngành
Những sản phẩm thuộc họ Lego Mindstorm thông dụng:
Robotics Invention System:
RCX (Programming languages);
Lego Mindstorm NXT: Lego Mindstorm NXT Educational Version; Lego Mindstorms NXT 1.0 và Lego Mindstorms NXT 2.0
Trang 34 Những sản phẩm hỗ trợ kỹ thuật khác: Lego camera; 4.5V PC Interface; Technic Control Center; Dacta Control Lab; Cybermaster; Codepilot; Scout; Micro Scout; Spybotics và Lego Mindstorms NXT
RCX và NXT (gọi tắt là NXT) được như một khối não, gắn vào các hệ thống robot hoặc hệ thống nhúng để điều khiển các hoạt động xung quanh Chúng chứa vi điều khiển, bộ nhớ, các cổng giao tiếp,… RCX là thế hệ đầu tiên, NXT được phát triển sau với nhiều cải tiến hơn
RCX là thế hệ đầu tiên của Lego Mindstorm được xây dựng thành một hệ thống nhúng để điều khiển các hoạt động xung quanh Nó chứa một vi xử lý 8-bit Renesas (một phần của Hichi), H8/300 được xem như là một vi điều khiển bên trong của nó Nó cũng chứa 32K bộ nhớ RAM để lưu trữ các chương trình phần mềm và người dùng RCX được lập trình bằng cách đưa một chương trình (viết bằng một trong những ngôn ngữ lập trình có sẵn) từ một máy tính chạy hệ điều hành Windows hay Mac vào bộ nhớ RAM của nó thông qua một (IR) giao diện hồng ngoại đặc biệt
Hình 3.1 - RCX [24]
NXT là thế hệ sau của RCX, nó được xem như não của một Mindstorms robot, giúp robot điều khiển và thực hiện các hành động khác nhau NXT chứa vi xử lý 32-bit ARM7, 256 Kbytes FLASH, 64Kbytes RAM
Hình 3.2 - NXT [24]
3.1.2 Lego Mindstorm NXT
LEGO Mindstorms NXT là một bộ các robot có khả năng lập trình, được thay thế bởi LEGO vào cuối tháng 07 năm 2006 và là phiên bản đầu tiên của bộ LEGO Mindstorms, nó được gọi là Robotics Invention System Cơ bản thì Robotics Invention System có 2 phiên bản: Reil Version (set #8527) và Education Base Set
Trang 35(set #9797), đi kèm với phần mềm lập trình là NXT-G hay tùy chọn trong LabVIEW cho LEGO MINDSTORMS Một phien bản mới của bộ LEGO Mindstorms là Lego Mindstorms NXT 2.0 được thay thế ngày 01 tháng 08 năm
2009, bao gồm một cảm biến màu và nhiều khả năng khác được nâng cấp, như là:Các thiết bị lắp ghép; 3 mô tơ; 4 loại cảm biến (cảm biến siêu âm, cảm biến chạm, cảm biến ánh sang, cảm biến màu); 7 dây cáp kết nối, một cáp giao diện USB
và 1 NXT Intelligent Brick
Từ bộ kit này, có thể xây dựng rất nhiều loại robot có hình dạng khác nhau và
có thể lập trình điều khiển chúng hoạt động theo yêu cầu Có 4 dạng robot thông dụng nhất được xây dựng và hỗ trợ bởi NXT-G:
(a) Dạng xe (b) Dạng cánh y (c) Dạng người (d) Robot dạng xe
Hình 3.3 - Các dạng robot thông dụng của họ Lego Mindstorm NXT [24]
Lego Mindstorm NXT gồm các phiên bản: Lego Mindstorms NXT Educational Version; Lego Mindstorms NXT 1.0 và Lego Mindstorms NXT 2.0 Trong đó:
Lego Mindstorms NXT Educational Version: Phiên bản giáo dục, được thiết
kế nhằm mục đích hỗ trợ các trường học Bao gồm: Một cảm biến ánh sang, một cảm biến siêu âm, một cảm biến âm thanh, ba đèn, một cặp cảm biến chạm Phiên bản đầu chứa 400 mẫu, phiên bản thêm chứa 600 mẫu
Lego Mindstorms NXT 1.0 và 2.0: Là những phiên bản thương mại, mà phiên bản 2.0 có thêm vào cảm biến màu, tăng thêm số lượng các cảm biến khác lên và cũng có thêm một số hoạt động khác như: làm việc trên số thực thay vì chỉ làm việc trên số nguyên như phiên bản 1.0
Lego Mindstorm NXT 2.0 có thể được xem là sự kết hợp linh hoạt trong việc xây dựng một hệ thống cho robot họ Lego với tất cả những kỹ thuật mới Bao gồm một vi điều khiển, một phần mềm lập trình kéo thả, cùng với các thiết bị cung cấp
Trang 36kèm trong Mindstorm NXT 2.0 Do đó, giúp dễ dàng tạo ra rất nhiều dạng robot khác nhau, thực hiện rất nhiều công việc khác nhau
Hình 3.4 - Các cảm biến trong bộ Lego Mindstorm NXT [24]
3.1.3 Intelligent Brick NXT
Intelligent Brick NXT có thể được xem như thành phần chính trong bộ kit, là não của hệ thống Mindstorms Nó làm cho robot có thể tự động thực hiện những hoạt động khác nhau như: lấy input từ các cảm biến, điều khiển các mô tơ, giao tiếp với máy tính nhận hoặc gởi dữ liệu
Các thành phần chính trong bộ Lego Mindstorm là một khối gọi là NXT thông minh gạch AKA (Ciara) Nó có thể dữ liệu đầu vào từ 4 cảm biến và điều khiển 3
mô tơ thông qua cáp RJ12 (không tương thích với RJ11) Intelligent Brick NXT có một màn hình LCD 100 × 60 điểm ảnh đơn sắc và bốn nút có thể được sử dụng để điều hướng các trình đơn phân cấp thông qua giao diện người dùng để lấy dữ liệu đầu vào từ các cảm biến, điều khiển các mô tơ, giao tiếp với máy tính để nhận hoặc gởi dữ liệu Những đặc tính kỹ thuật của Intelligent Brick NXT 2.0:
- Bộ xử lý chính: 32-bit Atmel AT91SAM7S256 (256 KB bộ nhớ flash, 64KB RAM) và 8-bit Atmel ATmega48@4 MHz (4 KB flash memory, 512 Bytes RAM);
- Bộ xử lý phụ: 8-bit AVR và 4 Kbytes FLASH, 512 Byte RAM, 8MHz;
- Giao tiếp không dây Bluetooth (Bluetooth Class II V2.0 compliant);
- Cổng Giao tiếp USB (12 Mbit/s): được dùng để gắn USB cáp, kết nối NXT với máy tính để nạp chương trình từ máy tính tới NXT hoặc lấy dữ liệu từ NXT về máy tính Có thể sử dụng một kết nối bluetooth thay thế cho USB port này;
Trang 37- 4 port dữ liệu vào 6-pin, để gắn các cảm biến vào (đặt tên là Port 1, 2, 3 và 4);
- 3 port dữ liệu ra 6-pin, để điều khiển các mô tơ (được đặt tên: Port A, B và C);
- LCD đơn sắc 100 x 64 pixel và 4 nút nhấn để thực hiện một số thao tác cơ bản cho Brick;
- Loudspeaker: âm thanh 8 kHz và độ phân giải 8-bit;
- Nguồn: 6 AA batteries;
- Four Push Buttons;
- Orange button: On/Enter;
- Light grey arrows: Di chuyển sang trái và sang phải trong menu NXT;
- Dark grey button: Clear/Go back
Lego phát hành firmware cho NXT Intelligent Brick như một Open Source, có thể được nâng cấp thường xuyên [24]
3.1.4 Bluetooth trên Brick NXT
Một trong những đặc trưng quan trọng nhất của Brick NXT là khả năng kết nối đến những thiết bị khác có hỗ trợ bluetooth Việc kết nối này giúp robot gởi nhận dữ liệu (chương trình, lệnh, tập tin âm thanh, …) với các thiết bị khác một cách có thứ tự Từ đó, những lệnh có thể được gởi để điều khiển robot từ xa Bluetooth giao tiếp giữa máy tính (hoặc một vài dạng điện thoại di động) với NXT Brick, hoặc giữa các NXT Brick với nhau
Các đặc tính kỹ thuật của bluetooth: CSR BlueCoreTM 4 v2.0 +EDR System; Supporting the Serial Port Profile (SPP); Internal 47 KByte RAM; External 8 MBit FLASH; 26 MHz và kết nối với tối đa ba thiết bị khác tại một thời điểm
NXT brick hỗ trợ giao tiếp không dây sử dụng bluetooth bằng cách sử dụng một chip CSR BlueCoreTM 4 v2.0 NXT brick có thể kết nối không dây cùng lúc tới ba thiết bị khác, nhưng tại một thời điểm chỉ có thể giao tiếp với một thiết bị
Hình 3.5 - Khả năng kết nôi với Bluetooth của Lego Mindstorm NXT [24]
Trang 38Khoảng cách giao tiếp bluetooth có thể lên đến 10m Nhưng làm thế nào để thiết lập giao tiếp bluetooth giữa máy tính và khối NXT tham khảo thêm trong [24] Các vấn đề như: Cài đặt giao tiếp giữa các NXT brick, Interface giữa ARM7
và BlueCore chip, UART giữa ARM7 và BlueCore chip, hay các vấn đề kỹ thuật khác có thể tham khảo tại [24]
3.1.5 Lập trình với Brick NXT
Với những chương trình đơn giản, chương trình có thể lập trình sử dụng những menu trực tiếp trên NXT Intelligent Brick Với những chương trình phức tạp hơn, việc lập trình được thực hiện trên máy tính, sử dụng một số ngôn ngữ hoặc môi trường lập trình đặc biệt dành cho Mindstorm NXT, sau đó nạp vào Brick để điều khiển robot
Những môi trường lập trình thông dụng cho Mindstorm NXT thông thường chia làm nhóm chính:
Nhóm môi trường lập trình trực quan dạng kéo thả, cung cấp lập trình theo từng khối, kết nối các khối với nhau, như NXT-G, LabView, VPL-Microsoft …
Nhóm môi trường lập trình dạng thủ tục, từng dòng code điều khiển robot
sẽ được viết cùng với một thư viện hỗ trợ, như leJOS, RobotC, C#- Microsoft …
Hình 3.6 - Môi trường lập trình trên NXT-G [26]
Trang 39NXT-G có hai phiên bản, một chung với phiên bản của Education của Lego Mindstorm NXT, và một phiên bản thương mại được bán rời rạc NXT-
G hỗ trợ đầy đủ cho những lập trình cơ bản như: điều khiển mô tơ, nhận dữ liệu từ những cảm biến, tính toán, điều khiển luồng …
3.1.5.2 C# và Microsoft Robotics Developer Studio
Là một đại diện trong nhóm lập trình điều khiển robot bằng cách lập trình thủ tục, viết code thay vì kéo thả C# cùng với VPL là hai cách lập trình điều khiển robot, cụ thể là Lego Mindstorm NXT, trong bộ Microsoft Robotics Developer Studio Luận văn này sử dụng C# để lập trình điều khiển một robot dạng xe, được tạo từ Lego Mindstorm NXT Giới thiệu về C# và Microsoft Robotics Developer Studio được trình bày cụ thể hơn trong phần 3.2 và chương 5
3.1.5.3 Các ngôn ngữ khác
Để lập trình cho robot Lego Minstorm NXT, còn rất nhiều ngôn ngữ có thể sử dụng Bảng 3.1 liệt kê một số ngôn ngữ lập trình và cùng với đặc trưng của nó
Bảng 3.1 - Một số ngôn ngữ có thể lập trình với Lego Mindstorm NXT [24]
FLL NXT Navigation Uses NXT-G and txt files
Trang 40ROBOTC
An Integrated development environment rgeted towards students that is used to program and control LEGO NXT, VEX, RCX and Arduino robots using a programming language based on the C programming language
3.2 Microsoft robotics develop studio
3.2.1 Giới thiệu
Microsoft Robotics Developer Studio (được viết tắc là MRDS), là một môi trường lập trình dựa trên nền Windows dùng cho việc mô phỏng và điều khiển chung các loại robot
RDS được dựa trên CCR (Concurrency and Coordination Runtime), là một thư viện tồn tại trên nền NET dùng quản lý những công việc bất đồng bộ;
Và được sự hỗ trợ của DSS (Decentralized Software Services), dùng để điều phối sự phối hợp của nhiều dịch vụ nhằm đạt được nhiều hoạt động phức tạp Tính năng bao gồm: Microsoft Visual Programming Language là một công cụ lập trình trực quan cho việc tạo và gỡ lỗi các ứng dụng robot, dựa trên giao diện web và windows có mô phỏng 3D để dễ dàng truy cập vào các cảm biến của robot và các thiết bị truyền động Ngôn ngữ lập trình chính là C# Mục tiêu của MRDS hướng tới phát triển một môi trường lập trình tương thích cho nhiều phần cứng robot khác nhau, đáp ứng nhiều nhu cầu từ thương mại, học thuật cho đến đáp ứng những sở thích cá nhân
MRDS có các đặc trưng: Giao diện dựa trên windows và cả web ; Công
cụ debug và mô phỏng 3D (bao gồm cả gia tốc của phần cứng) và có công cụ