CHƯƠNG 1. GIỚI THIỆU: Lý do hình thành đề tài, tình hình nghiên cứu liên quan đến cánh tay robot di động và mục tiêu cần đạt được khi thực hiện đề tài. CƠ SỞ LÝ THUYẾT: Cơ sở lý thuyết liên quan đến việc tính toán Odometry và SLAM cho robot tự hành. Lý thuyết liên quan đến phương pháp Marker-Vision Tracking và ứng dụng trong robot tự hành.
Phương pháp sử dụng Aruco marker để xác định vị trí gắp cho cánh tay robot. THIẾT KẾ HỆ THỐNG CÁNH TAY ROBOT DI ĐỘNG: Thiết kế tổng thể hệ thống cánh tay robot di động. Thiết kế và lắp ráp cơ khí cho hệ thống cánh tay robot di động. Thiết kế tay gắp, khay xếp bảng mạch cho ứng dụng pich-and-place.
Xây dựng giải thuật và phần mềm điều khiển cho hệ thống. Ứng dụng những phương pháp đã nêu ở Chương 2 vào hệ thống. THỰC NGHIỆM VÀ KẾT QUẢ: Xác định sai số thực tế của phương pháp Marker-Vision Tracking trước và sau khi ứng dụng vào hệ thống. Kiểm tra và đánh giá khả năng vận hành của hệ thống trong môi trường nhà máy.
• CHƯƠNG 5: KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN: Các kết luận dựa trên số liệu khi vận hành hệ thống cánh tay robot di động trong thực tế. Nhận xét về kết quả thực nghiệm và nêu lên những hạn chế của đề tài. Đưa ra hướng phát triển trong tương lai cho đề tài. Xây dựng hệ thống robot tự hành sử dụng SLAM 2.
Tính toán Odometry của robot từ dữ liệu encoder Robot tự hành trong luận văn được thiết kế theo mô hình robot dẫn động hai bánh (differential drive robot). Giả sử robot chuyển động không trượt, ta sẽ ước lượng tọa độ của robot dựa vào giá trị hồi tiếp từ encoder. Trong hệ tọa độ, robot chuyển động với vận tốc tịnh tiến là 𝑣 và vận tốc xoay 𝜔. Trong khoảng thời gian rất bé, và 𝜔 không đổi, chuyển động của robot là chuyển động tròn quanh tâm quay tức thời với bán kính 𝑟.
Tại đầu khoảng thời gian 𝑑𝑡, tọa độ tâm 𝑂𝑚 của robot trong hệ tọa độ gồm bộ 𝑥 ba [𝑦], tại điểm này ta có tọa độ của tâm 𝐶: 𝜃 𝜋 𝑥𝐶 = 𝑥 − 𝑟 ∗ cos (𝜃 − ) = 𝑥 − 𝑟 ∗ 𝑠𝑖𝑛𝜃 (2.1 Mô hình robot dẫn động hai bánh 6 Sau khoảng thời gian 𝑑𝑡 góc 𝜃 thay đổi một lượng 𝑑𝜃 = 𝜔 ∗ 𝑑𝑡, tọa độ mới 𝑥′ của 𝑂𝑚 sau 𝑑𝑡 là [𝑦′], sử dụng lại phương trình (2.2) để tìm quan hệ giữa 𝜃′ 𝐶 và điểm này, ta có quan hệ giữa tọa độ mới và tọa độ cũ: 𝑥 ′ − 𝑟 ∗ sin(𝜃 + 𝜔 ∗ 𝑑𝑡 ) = 𝑥 − 𝑟 ∗ 𝑠𝑖𝑛𝜃 𝑦 ′ + 𝑟 ∗ cos(𝜃 + 𝜔 ∗ 𝑑𝑡 ) = 𝑦 + 𝑟 ∗ 𝑐𝑜𝑠𝜃 𝑥′ 𝑥 𝑟 ∗ sin(𝜃 + 𝜔 ∗ 𝑑𝑡 ) − 𝑟 ∗ 𝑠𝑖𝑛𝜃 [𝑦′] = [𝑦] + [−𝑟 ∗ cos(𝜃 + 𝜔 ∗ 𝑑𝑡 ) + 𝑟 ∗ 𝑐𝑜𝑠𝜃 ] (2.3) 𝜃′ 𝜃 𝜔 ∗ 𝑑𝑡 Ta sẽ tìm quan hệ giữa các đại lượng 𝑣, 𝜔, 𝑟 với giá trị thu được từ encoder và thay vào phương trình trên. Sử dụng quan hệ giữa vận tốc dài và vận tốc góc của một vật thể trong chuyển động tròn, ta có các phương trình sau: 𝐿 𝑣𝑅 = 𝜔 ∗ (𝑟 + ) (2.6) Trong đó: 𝑣𝑅 vận tốc dài quanh trục bánh phải. 𝑣𝐿 vận tốc dài quanh trục bánh trái. 𝐿 khoảng cách giữa 2 bánh xe.
𝑟 bán kính quay tức thời. 𝜔 vận tốc quay của robot. Lấy phương trình (2.4) trừ phương trình (2.5) ta được quan hệ giữa vận tốc của hai bánh và vận tốc góc: 𝑣𝑅 − 𝑣𝐿 𝜔= (2.7) 𝐿 7 Lấy phương trình (2.4) cộng phương trình (2.6) vào phương trình trên ta có quan hệ giữa vận tốc tịnh tiến và vận tốc hai bánh: 1 𝑣= ∗ (𝑣𝑅 + 𝑣𝐿 ) (2.9) 2 Ta suy ra được bán kính quay tức thời 𝑟 của robot từ các phương trình (2.10) 𝜔 2 𝑣𝑅 − 𝑣𝐿 𝑑𝑠𝑅 𝑑𝑠𝐿 Thay 𝑣𝑅 = và 𝑣𝐿 = vào phương trình (2.10) với 𝑑𝑠𝑅 và 𝑑𝑠𝐿 là 𝑑𝑡 𝑑𝑡 độ dài mỗi bánh dịch chuyển được trong thời gian 𝑑𝑡. Thay lại 𝑟 và 𝜔 trong các biểu thức này vào phương trình (2.11) 𝐿 𝜃′ 𝜃 𝑑𝑠𝑅 − 𝑑𝑠𝐿 [ 𝐿 ] Phương trình trên cho ta quan hệ chính xác giữa chuyển động của hai bánh với tọa độ của robot.
Ta có thể xây dựng giải thuật xấp xỉ phương trình trên để cập nhật tọa độ của robot với đầu vào ở mỗi thời điểm cập nhật là 𝑛𝑅 và 𝑛𝐿 , là số đếm tăng thêm từ encoder của mỗi bánh, và tọa độ 𝑥, 𝑦, 𝜃 cuối chu kỳ trước. Khi đó ta gán giá trị 𝑛𝑅 𝐷𝜋 và 𝑛𝐿 𝐷𝜋 vào vị trí của 𝑑𝑠𝑅 và 𝑑𝑠𝐿 trong phương trình (2.11) Nếu như chuyển động xoay của robot rất nhỏ, ta có thể xấp xỉ các phương trình trên trở thành dạng đơn giản.12) 2 𝜃′ 𝜃 𝑑𝑠𝑅 − 𝑑𝑠𝐿 [ 𝐿 ] 8 Phương trình xấp xỉ trên cũng là lim của phương trình gốc khi 𝑑𝑠𝑅 − 𝑑𝑠𝐿 → 0, ứng với việc robot chỉ di chuyển tịnh tiến theo phương có hệ số góc 𝜃. Để điều khiển robot, ta có có quan hệ giữa 𝑣𝑅 , 𝑣𝐿 với 𝑣 và 𝜔 như sau: 𝐿 𝑣𝑅 = 𝑣 + ∗ 𝜔 2 𝐿 𝑣𝐿 = 𝑣 − ∗ 𝜔 2 2. Ứng dụng SLAM cho robot tự hành trên nền tảng ROS 2.
Giới thiệu ROS Hình 2.2 Nền tảng ROS ROS hay Robot Operating System là một nền tảng mã nguồn mở, chuyên dụng thường được tích hợp cho robot. Nó cung cấp các dịch vụ như một hệ điều hành, bao gồm hỗ trợ giao tiếp phần cứng, điều khiển thiết bị cấp thấp, thực hiện các chức năng thông dụng, truyền thông giữa các tiến trình và quản lý gói tin. ROS có một số đặc điểm cơ bản như sau: - Gọn nhẹ: ROS được thiết kế nhỏ gọn, vì vậy có thể tích hợp ROS vào các phần mềm robot. - Ngôn ngữ lập trình: ROS được thực hiện trong một số ngôn ngữ lập trình hiện đại gồm Python , C ++, Lisp và cả thư viện thực nghiệm trong Java và Lua.
- Dễ dàng kiểm tra: ROS hỗ trợ các bộ công cụ hỗ trợ việc kiểm tra và giám sát quá trình truyền nhận thông tin. 9 - Các hệ điều hành có thể sử dụng ROS: ROS hiện chỉ chạy trên nền tảng Unix. Phần mềm cho ROS chủ yếu được thử nghiệm trên hệ thống Ubuntu và Mac OS X, mặc dù cộng đồng ROS đã góp phần hỗ trợ cho Fedora, Gentoo, Arch Linux và các nền tảng Linux khác. Một số khái niệm trong ROS Packages: chứa thư viện phụ thuộc, tập hợp dữ liệu, các file cấu hình.
Các gói là thành phần nguyên tử cơ bản để tạo ra các phần tử thực thi khác trong ROS. Node: Node là nơi quá trình tính toán được thực hiện. Một hệ thống điều khiển robot dùng ROS thường bao gồm nhiều node. Ví dụ, một node đọc các tín hiệu ngõ vào và trạng thái của robot, một node điều khiển động cơ bánh xe, một node thực hiện hoạch định đường đi, một node cung cấp đồ họa cho hệ thống.
ROS Master: Các ROS Master điều khiển việc giao tiếp và truyền nhận giữa các Node. Nếu không có master, các node sẽ không thể tìm thấy tin nhắn khác nhau và trao đổi thông tin. Messages: Các node giao tiếp với nhau bằng cách truyền gói tin. Một gói tin là một cấu trúc dữ liệu, bao gồm các kiểu dữ liệu, các mảng dữ liệu được xác định cấu trúc bởi chính người lập trình.
Topic: Message được định tuyến thông qua một hệ thống publish/subscribe. Một node tạo ra một message bằng cách publish nó vào một Topic. Topic là một tên được sử dụng để xác định các nội dung của message. Có thể có nhiều Publisher đồng thời và một Publisher chỉ publish cho một Topic duy nhất.
Một Node có thể publish/subscribe với nhiều topic khác nhau. 2D Navigation stack 2D Navigation stack dùng để lấy các thông tin, dữ liệu từ odometry, cảm biến (sensor), điểm mục tiêu (goal pose) và xuất ra tín hiệu vận tốc gửi xuống robot. 10 Việc sử dụng Navigation stack trên một robot bất kỳ thì khá là phức tạp. Điều kiện tiên quyết để sử dụng Navigation stack là robot phải được chạy trên ROS, phải có một tf transform tree, và publish dữ liệu của cảm biến theo đúng kiểu Message trong ROS.
Thứ hai, Navigation stack cần được cấu hình về hình dạng và đặc tính của robot để có thể hoạt động ở một cấp độ cao hơn. Mặc dù Navigation stack ược thiết kế sao cho dùng trong mục đích chung nhất có thể, nhưng vẫn có một số yêu cầu bắt buộc về phần cứng như sau: - Nó được thiết kế dành cho cả mô hình robot lái bằng hiệu tốc độ (differential drive) và mô hình robot có bánh xe đa hướng (holonomic wheeled robots). Nó chỉ việc gửi trực tiếp giá trị vận tốc xuống cho bộ phận điều khiển di chuyển của robot để đạt ược các giá trị của robot mong muốn như vận tốc theo trục x, vận tốc theo trục y và vận tốc xoay. - Navigation stack cần phải được lắp một cảm biến laser scan được gắn lên robot.
Laser scan này dùng để xây dựng bản đồ (mapping), định vị (localization) và phát hiện vật cản. - Nó được phát triển trên những robot có hình vuông vì thế để đạt được hiệu năng tốt nhất thì hình dạng robot nên là hình vuông hoặc hình tròn. Navigation stack cũng làm việc được trên robot có hình dạng và kích thước bất kỳ nhưng sẽ khó khăn với những robot có kích thước lớn khi làm việc trong những không gian hẹp.1 Tổng quan về Navigation stack Hình 2.3 Mô hình Navigation stack trong ROS Hình trên cho ta thấy được cái nhìn tổng quan về cách cài đặt cũng như những thành phần có trong Navigation stack. Những thành phần bên trong move_base (màu trắng) là những thành phần bắt buộc phải có.
Những thành phần như amcl, map_server (màu xám) là những thành phần tùy chọn. Và những thành phần còn lại (màu xanh) là những thành phần phải có tùy thuộc vào robot mà ta thiết kế.2 Costmap 2D Costmap 2D là một package để triển khai bản đồ chi phí (costmap) từ việc lấy dữ liệu của cảm biến từ môi trường, xây dựng một lưới các nơi bị chiếm chỗ và tăng vùng chi phí trong bản đồ chi phí 2D dựa trên lưới các nơi bị chiếm chỗ và bán kính tăng chi phí do người dùng định nghĩa.4 Bản đồ chi phí (costmap) trong ROS Costmap 2D dùng để chứa thông tin các vật cản cũng như những nơi mà robot không thể tới được. Costmap sử dụng dữ liệu của các cảm biến từ bản đồ đã được xây dựng trước đó và cập nhật thông tin của vật cản vào costmap.