Để cho thuật toán đơn giản hơn, ta cho Mr = 0. Tức là kích cỡ 1 cell bằng kích thước của robot và bằng kích thước của dụng cụ quét.Vì 3 kích thước này bằng nhau nên thuật toán sẽ chỉ dừng khi visited(M) = 0. Phần này tác giả đã tham
39
khảo của các sinh viên nghiên cứu để triển khai thuật toán dễ dàng hơn. Sau
đây là các trường hợp gặp phải với thuật toán:
3.4.1. Trƣờng hợp robot bao phủ hoàn toàn:
Robot sử dụng thuật toán CCD* đi theo trọng số g(n) min, thực hiện replanning tại ô số 11 khi gặp vật cản tại đường đi theo kế hoạch ban đầu.
Hình 18: Thuật toán bao phủ hoàn toàn
3.4.2. Vấn đề gặp phải khi sử dụng thuật toán CCD*:
Khi triển khai thuật toán nảy sinh vấn đề trong một số trường hợp, thuật toán không bao phủ hoàn toàn. Khi đi vào đường cụt, thuật toán không thể quay lui như các ví dụ dưới đây:
40
Hình 19: Trường hợp thuật toán không bao phủ hoàn toàn
Thuật toán sẽ chạy theo thứ tự từ ô Start (8) - 4 - 3 - 7 - 9 -10 - 12 - 11. Ở đây khi đi vào đường cụt, sẽ lập lại kế hoạch và coi ô hiện tại là ô bắt đầu. Tại ô 11, robot sẽ không có đường đi tiếp và kết thúc thuật toán tại đây. Trong trường hợp này có thể thấy rằng thuật toán không bao phủ hoàn toàn.
3.4.3. Cải tiến thuật toán:
Khi sử dụng 2 lần D* và D*' với trọng số min nhưng không thoát được khỏi đường cụt, ở đây ta đề xuất sử dụng thêm 1 lần D*' (gọi là D*'') khi thuật toán không thể quay lui với giá trị trọng số là min, sử dụng trọng số max để thoát khỏi vòng lặp. Đường đi của thuật toán khi sử dụng D*'' sẽ như hình dưới:
41
Tại vị trí G khi thuật toán lập lại kế hoạch nhưng vẫn không thoát khỏi đường cụt, Thực hiện tiếp lệnh tìm kiếm D*'' với g(n) là giá trị lớn nhất cho đến khi thoát khỏi đường cụt và tìm được ô mới. Thuật toán quay về tìm kiếm D* với giá trị g(n) nhỏ nhất.
Hình 20: Cải tiến thuật toán để thoát khỏi đường cụt và bao phủ hoàn toàn.
Thuật toán 1(đã cải tiến): Tiến hành bao phủ Algorithm 1 Coverage(S)
1: C S //Set the current node S 2: Paux C 3: P 4: While 1 5: n Paux , m N, ||Cn - Cm|| < MR . ecell visited(m) = 1 6: n Paux , m N, ||Cn - Cm|| < 2MR .ecell overlapped(m) = 1 7: Nc {n N | ||Cn - CC||= (2MR + 1) . ecell
42 and Overlapped(n) = 0 and g(n) < } 8: if NC ≠ 0
9: find M NC with minimal g 10: Else
11: D*’(C) and stop at visited(M) = 0 //D*’ ở đây là xét với mininal g’ 12: If no such node M exists
13: D*’’(C) and stop at visited(M) = 0 //D*’’ ở đây là xét với maximum g’ 14: If no such node M exists
15: Return P 16: End
17: End 18: End
43
CHƢƠNG 4: CÀI ĐẶT VÀ THỬ NGHIỆMTHUẬT TOÁN CCD*
4.1. Robot trong môi trƣờng giả lập 4.1.1. Giới thiệu về ROS
a) Khái niệm
ROS 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 hoá phần cứng,điều khiển thiết bị mức thấp, 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 triển khai 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 để triển khai.
- 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ò triển khai 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 hoá 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.
44
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 đ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.
b) Các thành phần cốt lõi
Hạ tầng truyền thông:
Ở tầng thấp nhất này, ROS đưa ra một giao diện truyền thông điệp cung cấp giao tiếp liên tiến trình, đóng vai trò như phần trung gian hỗ trợ những tiện ích
Công bố và đăng ký truyền thông điệp vô danh: Giao tiếp là một trong các yếu tố đầu tiên cần thử nghiệm khi ứng dụng robot. Hệ thống thông điệp đã xây dựng sẵn và kiểm thử kỹ càng của ROS quản lý chi tiết quá trình giao tiếp giữa các node được phân phối qua cơ chế công bố và đăng ký vô danh. Cơ chế này giúp tiết kiệm thời gian và bắt buộc người dùng sử dụng những giao diện rõ ràng giữa các node trong hệ thống, từ đó cải thiện tính đóng gói và đẩy mạnh tái sử dụng mã nguồn. Cấu trúc của chúng được định nghĩa qua một Ngôn ngữ mô tả giao diện thông điệp.
Ghi chép rồi phát lại các thông điệp: Vì hệ thống công bố và đăng ký truyền thông điệp là vô danh và không đồng bộ nên dữ liệu có thể dễ dàng được nắm bắt và phát lại mà không cần thay đổi đoạn mã. Chẳng hạn ta có tác vụ 𝐴 đọc dữ liệu từ một cảm biến và ta đang phát triển tác vụ 𝐵 xử lý dữ liệu đưa ra từ 𝐴. ROS giúp mọi việc trở nên dễ dàng bằng cách thu thập dữ liệu 𝐴 công bố rồi ghi vào một file
45
để sau này công bố lại dữ liệu từ file đấy. Việc trừu tượng hoá quá trình truyền thông điệp khiến 𝐵 không biết nguồn của dữ liệu là gì, đó có thể là 𝐴 hoặc là file nhật ký. Đây là mẫu thiết kế mạnh mẽ làm tối ưu đáng kể giai đoạn phát triển và nâng cao khả năng linh hoạt cũng như tính đơn thể cho hệ thống.
Truy vấn hoặc hồi đáp các thủ tục gọi từ xa: Bản chất không đồng bộ của việc công bố và đăng ký thông điệp hoạt động hiệu quả đối với nhiều giao tiếp cho robot nhưng đôi khi ta cũng cần những tương tác truy vấn và hồi đáp đồng bộ giữa các tiến trình. Phần trung gian của ROS cung cấp những service để giải quyết điều này. Giống với một topic, dữ liệu được gửi giữa các tiến trình trong một lời gọi service được định nghĩa trong Ngôn ngữ mô tả giao diện thông điệp.
Hệ thống tham số phân phối: Phần trung gian của ROS ngoài ra còn hỗ trợ các tác vụ chia sẻ cấu hình thông tin qua bộ lưu trữ cặp khoá – giá trị toàn cục. Hệ thống này cho phép dễ dàng chỉnh sửa cài đặt tác vụ và thay đổi cấu hình của một tác vụ khác.
Những tính năng đặc tả robot.
Để bổ sung cho các thành phần cốt lõi trung gian, ROS đưa ra các thư viện và công cụ đặc tả robot cho phép robot khởi động và chạy nhanh hơn:
Các định nghĩa thông điệp tiêu chuẩn cho robot: Qua một thời gian dài cộng đồng cùng thảo luận và phát triển, một bộ các định dạng thông điệp tiêu chuẩn đề cập đến những vấn đề chung khi sử dụng robot đã được đưa ra. Đó là những định nghĩa cho các khái niệm hình học như hiện trạng, biến dạng và vector; cho cảm biến như camera, IMU và laser hay cho dữ liệu di chuyển như hành trình kế, đường đi và bản đồ cùng nhiều yếu tố khác. Sử dụng các thông điệp tiêu chuẩn này giúp mã nguồn tương thích với những công cụ phát triển còn lại trên hệ thống ROS.
Thư viện hình học robot: Một thách thức mà nhiều dự án cần lưu tâm là phải theo dõi các phần khác nhau tương ứng trên robot. Ví dụ nếu muốn tổ hợp dữ liệu từ camera với dữ liệu từ laser, ta cần phải biết mỗi cảm biến đó được lắp đặt ở đâu
46
trên vài khung tham chiếu chung. Vấn đề này đặc biệt quan trọng với robot hình người có các bộ phận chuyển động. Thư viện tf của ROS (viết tắt từ “transform”) giúp giải quyết điều này và mang lại hiệu quả rất cao. Thư viện này được sử dụng để quản lý dữ liệu tọa độ biến đổi cho robot với bậc tự do lớn hơn 100 và tốc độ cập nhật hàng trăm Hertz. Ngoài ra thư viện còn cho phép định nghĩa cả biến đổi tĩnh, như vị trí camera gắn sẵn trên đế di động, hoặc biến đổi động, như là mối nối trên cánh tay robot và thậm chí là biến đổi dữ liệu cảm biến giữa bất kỳ cặp khung tọa độ nào trong hệ thống. Thư viện tf hoàn toàn xử lý được trường hợp thực tế khi mà quá trình sản xuất hay tiêu thụ thông tin được phân phối qua mạng với tốc độ cập nhật ở nhiều tỉ lệ khác nhau.
Ngôn ngữ mô tả robot: Vấn đề khác của robot mà ROS đã giải quyết đó là việc miêu tả robot theo cách sao cho máy tính có thể đọc được. ROS cung cấp bộ công cụ giúp miêu tả và mô hình hoá robot để mọi phần còn lại của hệ thống hiểu được cấu trúc và cách thức hoạt động của robot. Định dạng miêu tả có tên gọi là URDF – Định dạng mô tả robot hợp nhất, bao gồm một tài liệu XML miêu tả toàn bộ đặc tính vật lý, từ độ dài chân tay, kích thước bánh xe cho đến vị trí cảm biến và hình dáng trực quan của mỗi phần robot. Khi đã được định nghĩa theo cách này, robot từ đó dễ dàng sử dụng thư viện tf, được biểu diễn 3 chiều trên phần mềm mô phỏng và quy hoạch chuyển động.
Các thủ tục gọi từ xa có thể giành quyền ưu tiên: Trong khi các topic (công bố – đăng ký vô danh) và service (thủ tục gọi từ xa) kiểm soát phần lớn trường hợp giao tiếp trong robot, thỉnh thoảng ta vẫn cần khởi động một hành vi hướng mục tiêu, giám sát quá trình thực hiện, có khả năng giành quyền ưu tiên và nhận thông báo khi nó kết thúc. ROS cung cấp các action cho mục đích này. Action giống với service ngoại trừ chúng có thể báo cáo quá trình trước khi trả về hồi đáp cuối cùng và có thể bị chiếm quyền ưu tiên từ người gọi. Do vậy action là công cụ mạnh mẽ được dùng nhiều trong hệ thống ROS.
47
Chẩn đoán: ROS cung cấp cách thức tiêu chuẩn để trình bày, thu thập và kết tập các chẩn đoán hiện thời cho robot, giúp thấy nhanh trạng thái hiện tại và xác định vấn đề nảy sinh tức thời.
c) Khái niệm Roslaunch
Đây là một công cụ cho phép khởi động nhiều node ROS cục bộ hay từ xa, cũng như thiết lập các cài đặt tham số và bao gồm cả các tuỳ chọn hỗ trợ tự động phục hồi các tiến trình vừa chết. Roslaunch nhận một hoặc nhiều file cấu hình dạng XML với phần mở rộng .launch, chỉ định những tham số và node để khởi động, cũng như thiết bị nào sẽ được sử dụng để thử nghiệm.
Một số thẻ cần chú ý trong cấu trúc XML của file .launch:
Thẻ launch: Là thẻ gốc của mọi file roslaunch, chứa các thẻ khác
Thẻ node: Chỉ định một node của ROS mà ta muốn khởi động, đây là thẻ rất
phổ biến trong roslaunch vì hỗ trợ tính năng quan trọng là kích hoạt và kết thúc các node. roslaunch không đảm bảo được rằng các node được chạy theo đúng thứ tự khai báo, nghĩa là không có cách nào biết một node đã hoàn toàn được khởi tạo thành công hay chưa, do đó người dùng phải tự kiểm soát mã nguồn để chắc chắn chương trình sẽ hoạt động.
Thẻ include: Thẻ này cho phép nhập file XML roslaunch khác vào file hiện
tại, vào đúng phạm vi và vị trí hiện thời, bao gồm mọi thẻ con của file đó ngoại trừ thẻ master vì thẻ này chỉ thực hiện lệnh từ file gốc.
Thẻ remap: Cho phép truyền tên đối số đến một node ROS cần nhiều tuỳ
biến bằng tay hơn là thiết lập trực tiếp qua thuộc tính args từ thẻ node. Thẻ này áp dụng cho mọi phạm vi khai báo về sau kể từ vị trí hiện tại.
Thẻ param: Định nghĩa một tham số với giá trị được gán bằng nhiều loại
thuộc tính như value, textfile, binfile hay command. Thẻ này có thể được đặt bên trong thẻ node để trở thành tham số riêng tư.
Thẻ arg: Cho phép tạo ra nhiều file khởi động có thể tái sử dụng và cấu hình
48
thẻ include hoặc qua một file ở cấp cao hơn. Một định nghĩa đối số cho thẻ arg không phải là toàn cục nên chỉ được giới hạn trong một file khởi động cụ thể. Sử dụng thẻ này giống như là gọi một phương thức để thực thi, phải truyền rõ ràng đối số vào trong file được nhập.
4.1.2. Giới thiệu về Gazebo a. Khái niệm a. Khái niệm
Gazebo là một chương trình mô phỏng đa 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 đa 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.
Mục đích sử dụng:
Kiểm thử các giải thuật quy hoạch
Thiết kế robot
Thực hiện kiểm thử hồi quy với kịch bản thực
Tính năng:
Các phương tiện mô phỏng vật lý đa dạng.
Hệ thống thư viện môi trường và mô hình phong phú.
Số lượng lớn các cảm biến.
49
b. Khái niệm mô hình vật thể trong Gazebo
Định dạng SDF: SDF là viết tắt của Định dạng mô tả mô phỏng, miêu tả các vật thể cho quá trình mô phỏng, trực quan hoá và điều khiển robot. Ban đầu SDF được phát triển như là một thành phần của Gazebo và thiết kế cho với mục đích