GIỚI THIỆU
TỔNG QUAN VỀ ĐỀ TÀI
Trong tương lai gần, robot sẽ trở thành người bạn đồng hành thân thiết bên cạnh mỗi chúng ta, vượt xa chiếc PC hay điện thoại thông thường Nhờ vào sự tiến bộ không ngừng của khoa học và kỹ thuật, robot ngày càng đóng vai trò quan trọng như một bộ phận không thể thiếu trong cuộc sống hàng ngày Chúng sẽ là những cánh tay đắc lực, hỗ trợ con người trong mọi công việc, góp phần nâng cao năng suất và chất lượng cuộc sống.
Kể từ khi ngành kỹ thuật điều khiển và tự động hóa ra đời, robot đã được hoàn thiện và ngày càng phổ biến trong các lĩnh vực sản xuất, giáo dục, y tế và khoa học công nghệ Robotics mang lại nhiều lợi ích quan trọng, như thay thế lao động con người trong điều kiện môi trường độc hại và nguy hiểm, tăng năng suất lao động nhanh chóng, và góp phần thúc đẩy quá trình công nghiệp hóa đất nước và phát triển của nhân loại.
Robot đem lại lợi ích to lớn cho con người, khiến việc sử dụng robot ngày càng phổ biến Robots tự hành đa dạng về kích cỡ, hình dáng và phương thức hoạt động nhằm mục đích hỗ trợ con người Để hoạt động hiệu quả, robot cần ưu tiên giải quyết ba vấn đề chính: xác định toạ độ trong hệ thống, tạo bản đồ di chuyển và tránh vật cản chính xác, cùng khả năng cảm nhận thế giới xung quanh qua giác quan, đặc biệt là thị giác Trong bối cảnh Việt Nam, ứng dụng xe tự động vẫn còn hạn chế do công nghệ cao chưa phổ biến rộng rãi, nhưng cần đẩy mạnh nghiên cứu để phục vụ tốt hơn cho xã hội Nhóm nghiên cứu đã chọn đề tài "Lập bản đồ và điều hướng chuyển động tránh vật cản cho robot di động trên nền tảng hệ điều hành ROS1" nhằm mở rộng kiến thức, kỹ năng, góp phần phát triển lĩnh vực xe tự hành ở Việt Nam, nâng cao đời sống và thúc đẩy sự phát triển của đất nước.
Hình 1.1 Robot tự hành trên nền tảng ROS
MỤC ĐÍCH CỦA ĐỒ ÁN
Mục đích chính của đồ án là phát triển robot tự hành có khả năng lập bản đồ và điều hướng chính xác, tránh va chạm với vật cản Robot di động này có ứng dụng đa dạng và tiềm năng lớn trong các lĩnh vực công nghiệp, tự động hóa, và dịch vụ Đồ án tập trung vào phát triển các chức năng chính dựa trên nền tảng ROS (Robot Operating System), nhằm nâng cao khả năng tự lập trình và tích hợp hệ thống cho robot Việc sử dụng ROS giúp tối ưu hóa quá trình phát triển phần mềm, tăng tính linh hoạt và mở rộng khả năng của robot trong các môi trường phức tạp.
Hiểu được cơ bản các thuật toán trong điều hướng cho xe tự hành dựa trên bản đồ đã dựng từ môi trường thực tế
Mô phỏng và điều hướng robot trên Gazebo và Rviz
Thiết kế và chế tạo robot có khả năng vẽ bản đồ trong một không gian chưa xác định
Robot có khả năng định vị và hoạch định đường đi ngắn nhất, đi theo đường đã hoạch định
Robot có khả năng di chuyển linh hoạt nhờ vào công nghệ cảm biến hiện đại, giúp tránh các vật cản cố định một cách chính xác Ngoài ra, robot còn phản ứng nhanh chóng và thích nghi tốt để né tránh các vật cản di động, đảm bảo quá trình hoạt động suôn sẻ và hiệu quả Tính năng này giúp nâng cao độ an toàn và độ chính xác trong quá trình vận hành của robot.
PHƯƠNG PHÁP THỰC HIỆN
ROS hỗ trợ đa dạng trong các bài toán định vị, bao gồm định vị cục bộ (Simultaneous Localization) và định vị toàn cục (Simultaneous Globalization) dựa trên các gói hàm thư viện đóng gói Thư viện Global_planner giúp giải quyết bài toán định vị toàn cục bằng thuật toán Dijkstra để tìm đường đi ngắn nhất Ngoài ra, thư viện Dwa_local_planner (Dynamic Window Approach - DWA) cung cấp bộ điều khiển linh hoạt cho robot trong các tác vụ định vị và lập kế hoạch di chuyển.
Robot di chuyển trên mặt phẳng được điều khiển dựa trên kết quả của bài toán tìm đường, giúp robot đi từ vị trí xuất phát đến đích một cách chính xác Khi có bản đồ, bộ tìm đường tạo ra quỹ đạo động học phù hợp để dẫn dắt robot theo lộ trình tối ưu Trong quá trình di chuyển, bộ tìm đường xây dựng bản đồ lưới nhỏ quanh robot và điều khiển robot di chuyển qua các ô lưới này để đảm bảo tuyến đường an toàn và hiệu quả Bộ điều khiển xác định vận tốc dài và vận tốc góc để gửi lệnh điều khiển tới robot, tối ưu hóa quá trình di chuyển Sau khi tinh chỉnh các thông số của các hàm thư viện toàn cục và cục bộ, quá trình SLAM (Simultaneous Localization and Mapping) bắt đầu, giúp robot đồng thời di chuyển, tính toán vận tốc, định vị chính xác và cập nhật bản đồ môi trường Quá trình xây dựng bản đồ trong hệ thống được thiết kế theo mô hình minh họa như trong Hình 1.2.
Quy trình xây dựng bản đồ tự động bắt đầu khi robot sử dụng cảm biến Lidar để thu thập dữ liệu môi trường chưa xác định Các tọa độ này được xử lý bằng phương pháp Gmapping để tạo ra bản đồ hiện tại, xác định các vị trí còn thiếu cần robot di chuyển đến để hoàn thiện bản đồ Robot tự động di chuyển đến các vị trí được xác định, dữ liệu thu thập được cập nhật liên tục trên máy tính, giúp người kiểm soát có thể theo dõi tình hình robot trong quá trình hoạt động Quá trình thu thập dữ liệu diễn ra liên tục cho đến khi Lidar không còn thu thập được dữ liệu mới hoặc bản đồ đã hoàn tất, kết thúc quá trình SLAM Sau đó, người điều khiển có thể điều hướng robot đến bất kỳ vị trí nào trên bản đồ theo yêu cầu.
Hình 1.2 Quy trình tự động xây dựng bản đồ
PHẠM VI ÁP DỤNG
Trong kỷ nguyên cách mạng công nghiệp lần thứ tư, nhu cầu về robot tự hành ngày càng tăng cao để thay thế con người trong các công việc cá nhân Robot tự hành có khả năng thu thập dữ liệu từ môi trường xung quanh một cách hiệu quả và duy trì hoạt động liên tục trong thời gian dài mà không cần sự can thiệp của con người Những tiến bộ công nghệ này đang thúc đẩy sự phát triển của các giải pháp tự động hóa độc lập, góp phần nâng cao năng suất và tối ưu hóa hoạt động trong nhiều lĩnh vực.
Nghiên cứu và phát triển robot tự hành, xe tự lái không người điều khiển đang trở thành xu hướng nổi bật trong lĩnh vực công nghệ toàn cầu Các nhà khoa học tập trung thiết kế và chế tạo các hệ thống robot tự hành nhờ vào các công cụ phần cứng mạnh mẽ, nâng cao khả năng tự hoạt động độc lập Ứng dụng của những tiến bộ này giúp nâng cao hiệu quả và an toàn trong nhiều lĩnh vực như giao thông vận tải, tự động hóa công nghiệp và dịch vụ.
Các cảm biến mắt máy (camera 3D), cảm biến quét Laser (Lidar), cảm biến siêu âm cùng công nghệ trí tuệ nhân tạo và xử lý hình ảnh đóng vai trò then chốt trong việc nhận dạng, nhận biết và điều hướng của robot Việc xử lý dữ liệu phức tạp, đa dạng, độ phân giải cao từ các cảm biến này đòi hỏi phần mềm điều khiển mạnh mẽ, và ROS (Robot Operating System) đã trở thành công cụ lập trình lý tưởng giúp robot xử lý các tác vụ này một cách hiệu quả Hiện nay, ROS được sử dụng rộng rãi trong việc thiết kế và lập trình các loại robot tự hành, xe tự lái trên toàn thế giới, mang lại khả năng điều hướng chính xác và tối ưu.
Robot được phát triển dựa trên nền tảng ROS, tích hợp đầy đủ các chức năng định vị, tạo bản đồ và lập kế hoạch đường đi để phục vụ các nhu cầu của con người Mục tiêu chính của robot là xây dựng bản đồ từ những không gian chưa xác định, giúp ích trong các lĩnh vực như trang bị cho bệnh viện, hỗ trợ phục vụ và khử khuẩn trong khu cách ly, cũng như vận hành trong các nhà máy công nghiệp Ngoài ra, robot còn được ứng dụng trong dịch vụ dẫn đường tự động và vận chuyển hàng hóa trong kho bãi, góp phần nâng cao hiệu quả và tự động hóa các quy trình logistic.
SƠ LƯỢC VỀ NỘI DUNG ĐỒ ÁN
Nôi dung đồ án bao gồm:
Chương 1 giới thiệu tổng quan về vấn đề cần giải quyết của đồ án, mô tả phương pháp tiếp cận để xử lý vấn đề hiệu quả và nêu rõ mục đích cũng như phạm vi nghiên cứu của đồ án.
Chương 2: Cơ sở lý thuyết: Trình bày các kiến thức về lý thuyết liên quan tới đồ án
Chương 3: Phân tích và thiết kế phần cứng cho robot: Trình bày tổng quan về phần cứng, sơ đồ đấu dây và sơ đồ khối của hệ thống
Chương 4: Xây dựng phần mềm dựa trên nền tảng ROS: Sử dụng các kiến thức liên quan để xây dựng hệ thống định vị và dẫn đường cho robot
Chương 5: Kết quả: Trình bày các kết qủa đạt được của đồ án
CỞ SỞ LÝ THUYẾT
GIỚI THIỆU TỔNG QUAN HỆ ĐIỀU HÀNH ROS
Robot Operating System (ROS) là hệ điều hành mã nguồn mở dành cho robot, đóng vai trò là một framework quan trọng trong lĩnh vực robot nhờ tính linh hoạt và khả năng mở rộng cao ROS được sử dụng rộng rãi trong cộng đồng robotics để phát triển các giải pháp tự động hóa và điều khiển robot hiệu quả Nhờ các tính năng nổi bật như khả năng tích hợp dễ dàng và cộng đồng hỗ trợ lớn, ROS trở thành nền tảng lý tưởng cho các dự án robotics mới và nghiên cứu ứng dụng tự động hóa.
Nền tảng phần mềm của chúng tôi được thiết kế để hoạt động trên nhiều loại robot khác nhau, giúp giảm thiểu việc điều chỉnh phần mềm khi chuyển đổi thiết bị Điều này mang lại sự linh hoạt và tiết kiệm thời gian trong quá trình phát triển và tích hợp hệ thống robot Với giải pháp này, doanh nghiệp có thể nâng cao hiệu quả vận hành và mở rộng quy mô dễ dàng hơn.
ROS ra đời nhằm mang lại sự thuận tiện trong chia sẻ dữ liệu và khả năng sử dụng lại trên nhiều phần cứng robot khác nhau, giúp giảm thiểu thời gian và công sức xây dựng lại nền tảng từ đầu Điều này giúp các nhà phát triển tiết kiệm đáng kể nguồn lực và thúc đẩy sự sáng tạo trong lĩnh vực robot.
ROS là hệ điều hành mã nguồn mở, thu hút sự quan tâm lớn từ cộng đồng phát triển và thúc đẩy sự đa dạng của các công cụ, thư viện hỗ trợ Hiện nay, mô hình robot dựa trên ROS ngày càng phổ biến, với nhiều ứng dụng mang tính thực tiễn cao trong các lĩnh vực công nghiệp, nghiên cứu và tự động hóa.
ROS là hệ điều hành cho robot cung cấp các dịch vụ như phần cứng trừu tượng, kiểm soát thiết bị cấp thấp, thực thi các chức năng phổ biến và quản lý tin nhắn giao tiếp giữa các quá trình Nó còn hỗ trợ quản lý gói và cung cấp nhiều công cụ, thư viện giúp tham khảo, biên dịch, viết và chạy chương trình trên nhiều nền tảng khác nhau.
Nhóm đã chọn hệ thống ROS để phát triển robot với khả năng vẽ bản đồ và định vị dựa trên những ưu điểm sau:
ROS là hệ điều hành mã nguồn mở
Các tài liệu kỹ thuật, tài liệu hướng dẫn và các kênh hỗ trợ đầy đủ
Một trong những yếu tố chính tạo nên sức mạnh của ROS chính là cộng đồng rộng lớn và nhiệt huyết Nguồn tài nguyên của ROS chủ yếu được đóng góp bởi cộng đồng, dựa trên sự hợp tác với các viện nghiên cứu và trường đại học hàng đầu, giúp hệ sinh thái ngày càng phát triển và bền vững.
Trong hoạt động trao đổi dữ liệu và giao tiếp trong ROS, hệ thống tích hợp nhiều chuẩn giao tiếp khác nhau nhằm tối ưu hóa hiệu quả vận hành Cụ thể, ROS hỗ trợ giao tiếp đồng bộ theo chuẩn RPC thông qua các dịch vụ (services) giúp thực hiện các tác vụ yêu cầu phản hồi ngay lập tức Đồng thời, hệ thống còn truyền dữ liệu bất đồng bộ qua các topic, cho phép các thành phần hoạt động độc lập, linh hoạt hơn trong quá trình trao đổi thông tin Ngoài ra, ROS còn lưu trữ dữ liệu trên Parameter Server để quản lý cấu hình và thông tin hệ thống một cách dễ dàng và tiện lợi.
Hiện tại, ROS chỉ hoạt động trên nền tảng Unix, chủ yếu được thử nghiệm trên hệ điều hành Ubuntu và Mac OS X để đảm bảo sự ổn định và khả năng tương thích tối ưu Nhờ cộng đồng mạnh mẽ, ROS đang từng bước mở rộng hỗ trợ cho các nền tảng Linux khác như Fedora, Gentoo, Arch Linux, nhằm đa dạng hóa khả năng sử dụng và phát triển phần mềm robot trên nhiều hệ điều hành khác nhau.
Hệ điều hành ROS, cùng với các công cụ và thư viện hỗ trợ, thường được phát hành dưới dạng ROS Distribution, tương tự như các Linux distribution ROS Distribution cung cấp một bộ phần mềm phong phú giúp người dùng dễ dàng sử dụng, xây dựng và phát triển các dự án robot một cách hiệu quả và thuận tiện.
TÍNH NĂNG CỦA ROS
ROS cung cấp các gói công cụ được tiêu chuẩn hóa giúp:
Quản lý phần cứng bằng cách viết trình điều khiển
Quản lý bộ nhớ và các quy trình
Quản lý đồng thời, song song và hợp nhất dữ liệu
Cung cấp các thuật toán lý luận trừu tượng, sử dụng trí tuệ nhân tạo
Mô hình ROS gồm ba tầng: Filesystem, Computation Graph, và Community
Hệ thống tập tin (filesystem) trong ROS cung cấp các dạng hình thức và cấu trúc thư mục cần thiết để hệ thống hoạt động hiệu quả Nó chủ yếu quản lý các tài nguyên của ROS, bao gồm các tập tin cấu hình, mã nguồn và dữ liệu cần thiết cho quá trình vận hành Các dạng hình thức trong filesystem của ROS nằm trên đĩa cứng, giúp tổ chức và truy xuất dữ liệu một cách tối ưu, đảm bảo hệ thống ROS hoạt động ổn định và dễ mở rộng Nội dung tối thiểu của filesystem bao gồm các thư mục chính và các tập tin quan trọng như package, launch, và configuration, nhằm duy trì hiệu quả vận hành và phát triển các dự án ROS.
Hình 2.1 Mô hình ROS File System level
Gói dữ liệu đóng vai trò quan trọng trong cấu trúc chính của hệ điều hành ROS, bao gồm các lệnh thực thi của ROS (nodes), thư viện phụ thuộc, file cấu hình và dữ liệu quan trọng trong ứng dụng.
Manifest là bảng kê khai thông tin dữ liệu của package (manifest.xml), cung cấp cơ sở dữ liệu về gói dữ liệu đó, bao gồm điều kiện cấp phép (license) và các yếu tố phụ thuộc cần thiết Ngoài ra, manifest còn chứa thông tin về đặc trưng của ngôn ngữ lập trình, như các cờ báo (flags) của trình biên dịch, giúp quản lý và kiểm soát quá trình xây dựng phần mềm hiệu quả.
Một "stack" là tập hợp các package phối hợp với nhau để thực hiện một chức năng cụ thể Ví dụ, "navigation stack" gồm các package hỗ trợ dẫn hướng cho robot, giúp robot có thể xác định vị trí và di chuyển chính xác trong môi trường Việc xây dựng stack giúp tích hợp các thành phần phần mềm một cách hiệu quả để đảm bảo hoạt động trơn tru của hệ thống robot.
Stack Manifests (stack.xml) cung cấp cơ sở dữ liệu chi tiết về một stack, gồm các điều kiện cấp phép (license) và các thông số phụ thuộc vào các stack khác, giúp quản lý và cấu hình hệ thống một cách hiệu quả.
Message (msg): Định nghĩa cấu trúc dữ liệu cho các messages được gửi trong ROS
Service (srv): Định nghĩa cấu trúc dữ liệu cho các lệnh truy cập (request) và các phản hồi (response) của các services trong ROS
Trong ROS, việc tính toán được thực hiện thông qua mạng quy trình gọi là các nút ROS, giúp xây dựng hệ thống phân tán hiệu quả Mô hình đồ thị tính toán gồm các thành phần chính như Nodes, Master, Parameter server, Messages, Topics, Services, và Bags, mỗi thành phần đóng vai trò quan trọng trong việc xây dựng và vận hành hệ thống robot Các nút ROS phối hợp với nhau để xử lý dữ liệu và thực thi các tác vụ, trong khi Master quản lý các thành phần khác, còn Parameter server lưu trữ dữ liệu cấu hình Thông điệp (Messages), Topics, Services và Bags giúp truyền tải, trao đổi dữ liệu một cách linh hoạt và hiệu quả trong hệ thống ROS, từ đó tối ưu hóa hiệu suất vận hành của robot.
Hình 2.2 Mô hình tầng ROS Computation Graph
Trong hệ thống robot, các nút đại diện cho các quy trình thực hiện tính toán riêng biệt, được xây dựng dựa trên các thư viện máy khách ROS như roscpp và rospy Nhờ vào API của các thư viện này, người phát triển có thể triển khai nhiều phương thức giao tiếp đa dạng giữa các nút ROS, giúp chúng tương tác hiệu quả với nhau Một robot thường có nhiều nút đảm nhận các nhiệm vụ khác nhau, và thông qua các phương tiện giao tiếp của ROS, các nút này có thể liên lạc và trao đổi thông tin một cách liên tục và linh hoạt.
ROS Master đóng vai trò quan trọng trong việc đăng ký tên và tra cứu các nút trong hệ thống ROS, giúp các nút có thể nhận diện và kết nối với nhau Khi không có ROS Master, các nút sẽ không thể tìm thấy, trao đổi tin nhắn hoặc gọi dịch vụ, khiến hệ thống hoạt động không hiệu quả Trong các hệ thống phân tán, việc chạy ROS Master trên một máy tính trung tâm là cần thiết để các nút từ xa có thể dễ dàng giao tiếp, giảm thiểu sự cố kết nối và đảm bảo hoạt động trơn tru của toàn bộ hệ thống ROS.
Parameter Server: Cho phép dữ liệu được lưu trữ bởi các từ khóa trong một vị trí trung tâm Nó là một phần của Master
Trong hệ thống, các node giao tiếp với nhau thông qua messages, là các cấu trúc dữ liệu đơn giản gồm các trường như integer, floating point, boolean, giúp truyền tải thông tin hiệu quả Messages có thể chứa các kiểu cấu trúc phức tạp và mảng lồng nhau, đảm bảo khả năng mở rộng và linh hoạt trong việc trao đổi dữ liệu giữa các node.
Trong hệ thống vận chuyển thông điệp, Messages được phân loại thành hai dạng chính: publish (đưa tin) và subscribe (đăng ký nhận thông tin) Một node gửi tin bằng cách gửi message tới một topic, nơi topic đóng vai trò là tên nhận diện nội dung của thông điệp.
Mô hình publish/subscribe mang lại sự linh hoạt trong giao tiếp, phù hợp với truyền đa đối tượng và truyền một chiều, nhưng không thích hợp cho các hệ thống yêu cầu phản hồi theo dạng request/reply Vì vậy, trong các hệ thống này, việc truyền nhận theo kiểu request/reply thường được thực hiện qua các dịch vụ (services) Dịch vụ được định nghĩa dựa trên một cặp cấu trúc dữ liệu gồm request và reply, giúp đảm bảo quá trình trao đổi thông tin diễn ra đúng quy trình và hiệu quả hơn.
Bags là định dạng lưu trữ và phát lại dữ liệu ROS message, đóng vai trò quan trọng trong việc lưu trữ dữ liệu cảm biến cần thiết cho nghiên cứu, phát triển và kiểm tra thuật toán robot Việc sử dụng bags giúp dễ dàng thu thập và phân tích dữ liệu phức tạp, đặc biệt hữu ích trong quá trình phát triển các loại robot mang tính phức tạp cao.
ROS Community là nguồn tài nguyên Open Source của hệ sinh thái ROS, nơi các đơn vị nghiên cứu có thể chia sẻ phần mềm và kiến thức kỹ thuật của mình Các nguồn tài nguyên này bao gồm các package, thư viện phần mềm, tài liệu hướng dẫn và các dự án cộng đồng giúp thúc đẩy phát triển robot mở và hợp tác trong cộng đồng ROS Tham gia ROS Community giúp các nhà phát triển cập nhật các công nghệ mới nhất, tăng cường khả năng tùy biến và mở rộng phần mềm robot một cách dễ dàng.
Distributions: Là tổng hợp các phiên bản của stack mà chúng ta có thể cài đặt ROS Distributions có vai trò tương tự như Linux Distributions
Hình 2.3 Một số phiên bản của ROS ở từng giai đoạn khác nhau
ROS là một nền tảng mã nguồn mở dựa trên cộng đồng, cho phép các viện nghiên cứu và trường đại học cùng hợp tác phát triển và chia sẻ mã nguồn liên quan đến mô hình robot của họ Đây là nguồn tài nguyên quý giá giúp thúc đẩy sự sáng tạo và ứng dụng công nghệ robot trong cộng đồng nghiên cứu.
ROS Wiki là kho tài liệu phong phú về Robot Operating System (ROS), nơi mọi người có thể dễ dàng chia sẻ, cập nhật và viết hướng dẫn liên quan đến ROS bằng tài khoản đã đăng ký Đây là nguồn kiến thức mở, giúp cộng đồng phát triển kỹ năng và chia sẻ kiến thức về ROS một cách thuận tiện và hiệu quả.
CÁC NODE CHÍNH TRONG ROS
Hệ thống điều khiển robot dựa trên ROS được xây dựng dựa trên kiến trúc các node, mỗi node đảm nhận nhiệm vụ và chức năng riêng biệt Để robot có thể di chuyển theo quỹ đạo mong muốn và đến đích chính xác, cần xác định liên tục vị trí và hướng của robot tại mỗi thời điểm Các thông tin này được trao đổi giữa các node thông qua các tin nhắn với giao thức truyền dữ liệu đã được chuẩn hóa, đảm bảo khả năng giao tiếp hiệu quả với các hệ thống bên ngoài Sơ đồ cấu trúc hệ thống ROS và quá trình truyền nhận dữ liệu được mô tả rõ ràng trong Hình 2.4, giúp minh họa rõ các bước và giao thức truyền thông giữa các thành phần trong hệ thống.
Hình 2.4 Sơ đồ cấu trúc hệ thống trên ROS
Node Key Teleop nhận thông tin điều khiển từ người dùng qua bàn phím để chuyển đổi thành vận tốc góc và vận tốc tuyến tính của robot Các dữ liệu đầu vào là lệnh điều khiển, còn đầu ra là các giá trị vận tốc tuyến tính v (m/s) và vận tốc góc ω (m/s), giúp điều khiển chính xác hành trình của robot như mô tả trong Hình 2.5.
Hình 2.5 Vận tốc ứng với lệnh điều khiển
Node Twist thực hiện chuyển đổi giữa vận tốc tuyến tính và vận tốc góc thành các giá trị vận tốc của từng động cơ, giúp điều phối chính xác hoạt động của hệ thống Mối quan hệ giữa vận tốc tuyến tính v, vận tốc góc ω và vận tốc động cơ bên trái v_l, động cơ bên phải v_r thể hiện rõ qua Hình 2.6, đảm bảo sự phối hợp hiệu quả trong quá trình vận hành.
Hình 2.6 Các giá trị vận tốc của robot
𝑙 là khoảng cách giữa hai bánh xe (m)
𝐼 là tâm ảo của đường tròn khi robot được chạy theo quỹ đạo cong
𝑅 là khoảng cách từ tâm ảo đến trọng tâm của robot Khi đó vận tốc của từng động cơ được tính theo công thức sau:
Khi đó vận tốc của từng động cơ được tính theo công thức sau:
Vi điều khiển nhận và xử lý tốc độ động cơ, sau đó xuất xung PWM để điều khiển hai động cơ thông qua mạch điều khiển BTS7960 Hệ thống này tích hợp thuật toán PID giúp duy trì vận tốc đã đặt một cách chính xác, đảm bảo hiệu quả hoạt động ổn định của các động cơ trong quá trình vận hành. -Tối ưu điều khiển động cơ với vi điều khiển, PWM và thuật toán PID qua mạch BTS7960 – chính xác, ổn định ngay hôm nay!
Serial Node [4] thực hiện giao tiếp giữa MCU và ROS thông qua giao tiếp Serial Hai chức năng chính của Serial Node là:
Đọc giá trị encoder trái và phải Những giá trị này được gửi dưới dạng
Serial Node sẽ thực hiện xử lí chuỗi để tách giá trị tương ứng
Các giá trị vận tốc điều khiển của hai động cơ được gửi từ Node Twist To Motor xuống MCU để ước lượng vị trí robot Sau đó, các giá trị này được xuất sang Node Odometry nhằm mục đích tính toán chính xác vị trí của robot trong hệ thống điều khiển Quá trình này giúp đảm bảo cập nhật liên tục thông tin về vị trí và hướng di chuyển của robot dựa trên dữ liệu vận tốc động cơ.
Odometry có nhiệm vụ ước lượng chính xác vị trí của robot, bao gồm các tọa độ (x, y) và hướng θ, dựa trên dữ liệu từ encoder Vị trí của robot được biểu diễn qua bộ ba thông số k = {x, y, θ}, trong đó x, y là tọa độ trong hệ thống tọa độ Decade và θ là góc hướng của robot so với trục x Quá trình theo dõi quỹ đạo của robot sau thời gian t được thể hiện qua chuỗi các vị trí x 0:t = {x_0, x_1, x_2, , x_t}, bắt đầu từ vị trí ban đầu (x_0, y_0, θ_0).
Vị trí mới của robot sau một khoảng thời gian t di chuyển được một đoạn d và xoay góc θ như Hình 2.8 được tính theo công thức:
Trong đó x, y, θ là khoảng cách di chuyển và xoay góc của robot trong khoảng
∆ t , được tính theo công thức:
Tốc độ góc ω được tính từ encoder để xác định góc quay của robot, tuy nhiên trong quá trình thử nghiệm, phương pháp này gây ra sai số lớn ảnh hưởng đến độ chính xác của việc xác định vị trí Khoảng cách di chuyển d của robot được tính dựa trên giá trị đọc của encoder của hai bánh xe trái và phải, thông qua công thức riêng biệt, nhằm nâng cao độ chính xác trong quá trình điều khiển và định vị robot.
{ d = d left + d right d left =∆encoder_left tick_meter d right =∆encoder_right tick_meter Trong đó:
∆encoder_left, ∆encoder_right là số xung encoder đọc được trong khoảng thời gian ∆ t (xung)
d left , d right là khoảng cách hai bánh xe trái và phải đi được (m)
Tick_meter là số xung encoder khi hai bánh xe đi được một mét (ppm)
Hình 2.8 Odometry thực hiện cập nhật vị trí mới của robot
Node SLAM [6] xây dựng bản đồ môi trường dựa trên dữ liệu cảm biến Lidar và ước lượng vị trí của robot Trong lần đầu, người dùng điều khiển robot thủ công để tạo bản đồ bằng phương pháp Hector SLAM Sau đó, Node AMCL đảm nhận xác định vị trí của robot trong bản đồ đã vẽ, hoạt động khi robot tự định vị và di chuyển trong môi trường Hai node SLAM và AMCL không hoạt động đồng thời nhằm đảm bảo hiệu quả trong quá trình định vị và lập bản đồ.
Node Rplidar thu thập dữ liệu khoảng cách từ cảm biến laser Lidar, cho phép robot nhận diện vật cản trong phạm vi rộng đến 12m và quét 360 độ toàn diện Dữ liệu này giúp robot tạo bản đồ môi trường, xác định vị trí chính xác và thực hiện các chức năng tránh vật cản hiệu quả.
Hình 2.10 Node Rplidar thực hiện quét dữ liệu môi trường
Node Robot State Publisher [7] hỗ trợ hiển thị vị trí và hướng xoay của robot trong phần mềm mô phỏng 3D, giúp người dùng dễ dàng quan sát trạng thái của robot trong không gian Mỗi bộ phận của robot được biểu diễn bằng một vector vị trí trong không gian, ví dụ như trạng thái vị trí của robot tại thời điểm t được mô tả bằng một vector như Hình 2.8 Đối với các robot có nhiều khớp nối hoạt động độc lập, như robot 6 trục, mỗi trục sẽ được biểu diễn bằng một vector riêng biệt, phản ánh chuyển động của từng khớp Khi sử dụng phần mềm giả lập, người dùng có thể dễ dàng theo dõi sự thay đổi của các khớp nối thông qua các vectors, cũng như mối quan hệ giữa các vectors khi robot di chuyển.
Node Map Server là hệ thống quản lý bản đồ cho robot, cung cấp công cụ nhập và lưu bản đồ từ quá trình SLAM, cũng như tải bản đồ để phục vụ các thuật toán như AMCL Bản đồ được lưu trữ dưới dạng hai file riêng biệt: một file YAML chứa các thông số quan trọng như tên bản đồ, độ phân giải, gốc tọa độ ban đầu (thường là (0,0,0)) và ngưỡng xác định vật cản, giúp hệ thống hiểu rõ cấu trúc bản đồ File ảnh bản đồ thường là ảnh xám, trong đó các pixel đen tượng trưng cho vật cản, màu trắng thể hiện vùng không có vật cản, còn màu xám chỉ các khu vực chưa được quét hoặc chưa có thông tin.
Node Move Base [8] sử dụng dữ liệu vị trí robot từ AMCL và bản đồ từ Map Server để điều hướng robot đến đích một cách chính xác Thuật toán Dijkstra được dùng để xác định lộ trình tối ưu dựa trên đường đi đã vạch sẵn, giúp robot di chuyển hiệu quả Trong quá trình di chuyển, nếu phát hiện vật cản, robot sẽ tự động tính toán lại lộ trình mới để tiếp tục hướng đến đích một cách an toàn Các lệnh điều khiển bao gồm vận tốc tuyến tính và vận tốc góc được truyền tới Node Twist To Motor, đảm bảo việc điều khiển robot linh hoạt và chính xác.
PHÉP BIẾN ĐỔI TỌA ĐỘ TRONG ROS
Trong hệ tọa độ gắn liền với robot, hệ tọa độ tại tâm quay của robot gọi là “base_footprint” Cảm biến trên robot cần được xác định rõ nằm trong hệ tọa độ nào và cần thực hiện phép biến đổi tọa độ từ hệ “base_footprint” đến hệ tọa độ của cảm biến đó Các gói phần mềm như Hector SLAM và Navigation đòi hỏi phải khai báo đầy đủ các phép biến đổi hệ tọa độ để hoạt động chính xác Hình 2.12 trực quan hóa các hệ tọa độ trên mô hình 3D của robot bằng công cụ Soliword, giúp hình dung rõ ràng các phép biến đổi hệ tọa độ trong quá trình lập bản đồ và điều hướng robot.
27 Hình 2.12 Các hệ tọa độ trực quan hóa
PHÂN TÍCH VÀ THIẾT KẾ PHẦN CỨNG CHO ROBOT
TỔNG QUAN VỀ PHẦN CỨNG
3.1.1 Sơ đồ khối của hệ thống
Robot tự hành trong nhà là hệ thống gồm khung xe, các ngoại vi và mạch điều khiển tích hợp nhằm đáp ứng yêu cầu xử lý cảm biến, tự hành tránh vật cản và điều khiển từ xa Phần cứng của robot bao gồm các thành phần chính như khung xe chắc chắn, các cảm biến phát hiện vật cản, mạch điều khiển linh hoạt và các thiết bị ngoại vi giúp robot hoạt động hiệu quả trong môi trường nội thất Các công nghệ cảm biến tiên tiến và hệ thống điều khiển tự động hỗ trợ robot thực hiện nhiệm vụ một cách chính xác, an toàn và tối ưu hóa trải nghiệm người dùng.
Vi điều khiển giao tiếp với ngoại vi và máy tính Arduino Mega 2560
Mạch điều khiển động cơ BTS7960 để điều khiển động cơ
Nguồn điện cung cấp vào mạch điều khiển động cơ BTS7960
Máy tính được cài hệ thống ROS trên hệ điều hành Linux
Hình 3.1 Sơ đồ khối của hệ thống
Khối nguồn và khối Lidar
Hình 3.2 Sơ đồ đấu dây của khối nguồn và khối Lidar
Hình 3.3 Sơ đồ đấu dây của khối động cơ
Hình 3.4 Sơ đồ đấu dây của khối encoder
Hình 3.5 Sơ đồ đấu dây của khối vi điều khiển
THIẾT KẾ PHẦN CỨNG
3.2.1 Lựa chọn vật liệu và chế tạo khung robot
Robot tự hành có chức năng chính là tự hành tránh các vật cản cố định và phản ứng thích hợp với các vật cản di động Thân robot được đặt trên laptop có khối lượng 2,2 kg, thiết kế hình chữ nhật với kích thước 47x30cm Để giảm thiểu rủi ro và đảm bảo độ chính xác trong di chuyển, nhóm đã chọn vật liệu nhôm định hình 2x2cm để làm khung xe, giúp tăng độ chắc chắn và giảm sai lệch khi nối các khớp Nhờ cấu trúc chắc chắn của khung nhôm, robot dễ dàng tính toán khoảng cách đến các vật cản ở mọi hướng, tránh vật cản và di chuyển qua các không gian hẹp một cách hiệu quả.
Hình 3.6 Mặt trái của mẫu thiết kế 3D của robot
Hình 3.7 Mặt phải của mẫu thiết kế 3D của robot
3.2.2 Phân tích và lựa chọn động cơ DC Servo Động cơ được sử dụng cho robot là động cơ JGB 37-520/ 12V-35RPM Động cơ được tích hợp thêm Encoder hai kênh AB giúp đọc và điều kiển chính xác vị trí, chiều quay của động cơ trong các ứng dụng cần độ có chính xác cao: điều khiển PID, Robot tự hành Động Cơ DC Servo JGB37-520 DC có cấu tạo bằng kim loại cho độ bền và độ ổn định cao, được sử dụng trong các mô hình robot, xe, thuyền, , hộp giảm tốc của động cơ có nhiều tỉ số truyền giúp bạn dễ dàng lựa chọn giữa lực kéo và tốc độ (lực kéo càng lớn thì tốc độ càng chậm và ngược lại), động cơ sử dụng nguyên liệu chất lượng cao (lõi dây đồng nguyên chất, lá thép 407, nam châm từ tính mạnh, ) cho sức mạnh và độ bền vượt trội hơn các loại giá rẻ trên thị trường hiện nay (sử dụng lõi dây nhôm, nam châm từ tính yếu) Thông số kỹ thuật của động cơ như Bảng 3-1
Hình 3.8 Động cơ DC giảm tốc JBG 37-520 kèm encoder Bảng 3.1.Thông số kỹ thuật của động cơ DC
Tỉ số truyền 270:1 (Động cơ quay 270 vòng trục chính động cơ quay 1 vòng)
Dòng chịu đựng tối đa khi có tải 1A
Tốc độ không tải 35RPM (35 vòng 1 phút)
Tốc độ chịu đựng khi có tải 28RPM (28 vòng 1 phút)
Lực kéo Moment định mức 30KG.CM
Lực kéo Moment tối đa 35KG.CM
Chiều dài hộp số L 26,5mm
Số xung encoder trên mỗi kênh trên 1 vòng quay của trục chính 11x270)70 xung
Khi di chuyển tự hành, robot cần duy trì tốc độ phù hợp để đảm bảo hiệu quả và an toàn Để hỗ trợ việc kéo tải dễ dàng hơn, động cơ DC được trang bị hộp số giảm tốc giúp tăng mô men xoắn Việc điều khiển vận tốc và vị trí của robot đòi hỏi hệ thống phản hồi chính xác về số vòng quay của bánh xe, được thực hiện bởi bộ encoder Bộ encoder đóng vai trò quan trọng trong việc cung cấp thông tin vận hành chính xác, góp phần nâng cao hiệu suất hoạt động của robot tự hành.
Encoder gồm hai loại chính: Encoder tương đối và Encoder tuyệt đối Encoder tương đối có đầu ra gồm hai kênh tín hiệu A và B lệch pha nhau, giúp xác định số xung trên mỗi vòng quay và chiều quay của động cơ dựa vào pha A trễ hay sớm hơn pha B Tín hiệu khe Z trong Encoder tương đối được sử dụng để xác định khi động cơ hoàn thành một vòng quay đầy đủ Ngược lại, Encoder tuyệt đối cung cấp chuỗi n bit cho biết chính xác vị trí của động cơ sau mỗi vòng quay, giúp người dùng xác định vị trí mà không cần xử lý thêm.
Hình 3.9 Encoder tương đối gồm 2 kênh A và B Nguyên tắc hoạt động của Encoder:
Nguyên lý cơ bản của Encoder là một đĩa tròn xoay quay quanh trục, có các lỗ (rãnh) trên bề mặt Khi đĩa quay, đèn LED chiếu sáng mặt đĩa, và các lỗ trên đĩa cho phép ánh sáng xuyên qua, trong khi những vùng không có lỗ thì không cho ánh sáng qua Phía đối diện của đĩa, một cảm biến thu nhận tín hiệu từ ánh sáng chiếu qua hoặc không qua các lỗ Hệ thống ghi nhận trạng thái có hoặc không có ánh sáng để xác định vị trí và hướng quay của đĩa, giúp Encoder chuyển đổi chuyển động quay thành tín hiệu điện chính xác.
Số xung đếm được và tăng lên nó tính bằng số lần ánh sáng bị cắt
Encoder tạo ra các tín hiệu xung vuông từ ánh sáng xuyên qua lỗ, giúp chuyển đổi chuyển động thành tín hiệu điện Tần số của các xung này phụ thuộc trực tiếp vào tốc độ quay của tấm tròn, cho phép đo đạc độ chính xác về vận tốc của đối tượng đang theo dõi Đây là nguyên lý hoạt động cơ bản của các hệ sensor quang học dùng trong đo lường chuyển động.
Hình 3.10 Nguyên tắc hoạt động của Encoder Thông số kỹ thuật và sơ đồ chân của Encoder như Bảng 3-2 và Bảng 3-3
Bảng 3.2 Thông số kỹ thuật của Encoder Đại lượng Giá trị
Số xung mỗi kênh/1 vòng quay trục chính 2970 xung
Loại encoder Encoder tương đối
Bảng 3.3 Sơ đồ chân của encoder:
M1 Dây cấp nguồn cho động cơ
GND Dây cấp nguồn cho Encoder, 0VDC
VCC Dây cấp nguồn cho encoder điện áp
M2 Dây cấp nguồn cho động cơ
3.2.3 Mạch điều khiển động cơ BTS7960
BTS7960 là mô-đun điều khiển động cơ DC dòng cao tích hợp đầy đủ, phù hợp cho các ứng dụng truyền động động cơ yêu cầu dòng điện cao Thiết bị này giúp điều khiển chính xác và hiệu quả các động cơ DC công suất lớn, đảm bảo hiệu suất hoạt động ổn định Với khả năng tích hợp sẵn các linh kiện và tính năng bảo vệ, BTS7960 là lựa chọn lý tưởng cho các hệ thống điều khiển động cơ công nghiệp và tự động hóa.
Mạch này tích hợp một MOSFET bên cao kênh P và một MOSFET bên thấp kênh N, cùng với vi mạch trình điều khiển tích hợp trong cùng một gói Việc giao tiếp với vi điều khiển trở nên dễ dàng nhờ vào các đầu vào mức logic của vi mạch điều khiển, đồng thời đảm bảo an toàn cho hệ thống nhờ các chức năng bảo vệ chống quá nhiệt, quá áp, quá dòng và ngắn mạch, nâng cao độ tin cậy và hiệu quả hoạt động của mạch.
Hình 3.11 Mạch điều khiển động cơ BTS7960
Bảng 3.4 Chân vi điều khiển (Dòng thấp): Điện áp cũng cấp 6 ~ 27VDC
Tự động ngắt khi áp dưới 5.5V Mở lại sau khi áp lớn hơn 5.5V
RPWM Chân đảo chiều hoặc cấp PWM nửa cầu phải, Mức tích cực cao
LPWM Chân đảo chiều hoặc cấp PWM nửa cầu trái, Mức tích cực cao
R_EN 0 Disable nửa cầu phải, 1 Enable nửa cầu phải
L_EN 0 Disable nửa cầu trái, 1 Enable nửa cầu trái
R_IS giới hạn dòng nửa cầu phải
L_IS giới hạn dòng nửa cầu trái
Bảng 3.5 Chân động cơ (Dòng điện cao)
M+ Chân dương của động cơ
M- Chân âm của động cơ
B+ Điện áp dương đầu vào
B- Điện áp âm đầu vào
Hình 3.12 Sơ đồ các chân của BTS7960
3.2.4 Nguồn điện Để robot có thể tự hành, di chuyển một cách linh hoạt trong một không gian cần nguồn điện độc lập cho hệ thống Có hai nguồn điện chính để cấp cho hệ thống Một nguồn được lấy trực tiếp từ pin của laptop cấp trực tiếp cho vi điều khiển và RP Lidar Nguồn còn lại được dùng để cấp nguồn cho động cơ
Pin 18650 có kích thước 18mm x 65mm, là dòng pin lithium-ion sạc lại phổ biến của nhiều thương hiệu như Sony, Panasonic, Akasha, Ansmann Chúng cung cấp công suất từ 1800mAh đến 3500mAh và điện áp 3,7V, thường được sử dụng trong các thiết bị như laptop, đèn pin, phụ kiện máy ảnh như gimbals và thanh trượt Để cấp nguồn cho động cơ có điện áp từ 4V đến 24V, các nhóm pin 18650 được ghép nối với nhau, mỗi pin có điện áp từ 3,7V đến 4,2V, tạo ra nguồn điện phù hợp từ 14,8V đến 16,8V.
Lidar là công nghệ đo khoảng cách chính xác bằng cách phát chùm xung lazer pulsed laser và cảm biến đo các xung phản xạ từ các đối tượng Công nghệ này dựa trên sự khác biệt về thời gian truyền và bước sóng của các xung lazer để tính toán và xây dựng mô hình 3D của vật thể Lidar được ứng dụng rộng rãi trong tự động hóa, ô tô tự lái, bản đồ 3D và các hệ thống định vị chính xác để nâng cao hiệu quả và độ tin cậy của các dịch vụ liên quan.
Lidar được sử dụng rộng rãi trong nhiều lĩnh vực thực tế như xây dựng bản đồ số trong ngành địa chất và khảo cổ học, cũng như hệ thống dẫn đường bằng laser Một trong những ứng dụng nổi bật của công nghệ Lidar hiện nay là trong xe tự hành và robot tự hành, giúp chúng xác định môi trường xung quanh chính xác và nâng cao hiệu quả hoạt động.
MÔ HÌNH ĐỘNG HỌC CỦA ROBOT
Mô hình động học là phần nghiên cứu về chuyển động của các hệ thống cơ học mà không xem xét đến các lực tác động Mục đích chính của mô hình động học là mô tả mối quan hệ giữa vận tốc của robot và vận tốc bánh xe, cùng với các thông số hình học của robot để hiểu rõ cách robot di chuyển trong không gian.
Gọi V R , V L là vận tốc dài của 2 bánh trái và phải Ta có vận tốc dài của robot:
2 và vận tốc góc của robot là:
2LTốc độ của robot trong khung robot bây giờ có thể được biểu diễn dưới dạng vận tốc của tâm A trong khung robot như sau:
Vận tốc có thể thu được trong khung quán tính như sau: q̇ I = [ ẋ a r ẏ a r θ̇
Phương trình (19) thể hiện mô hình động thuận của robot, giúp mô tả chính xác mối liên hệ giữa vận tốc dài và vận tốc góc của robot trong hệ tọa độ Robot Mô hình này là cơ sở để xác định vận tốc đầu vào của robot qua vector q̇ I = [ẋ a r, ẏ a r, θ̇], hỗ trợ tối ưu hóa quá trình điều khiển và lập kế hoạch chuyển động Việc hiểu rõ đặc trưng này giúp nâng cao hiệu quả vận hành và điều chỉnh robot phù hợp với các tác vụ yêu cầu độ chính xác cao.
Ngoài ra ta còn có ràng buộc động học của robot như sau: ẋ a I sinθ − ẏ a I cosθ = 0 ẋ a I cosθ + ẏ a I sinθ = ωR + Lθ ẋ a I cosθ + ẏ a I sinθ = ωL − Lθ
Giả sử, vị trí ban đầu của robot là( x a I 0 , y a I 0 , θ 0 )chuyển động trong thời gian t(s) khi đó tọa độ trong khung quán tính của robot như sau: x a I (t) = x (a I 0 ) + V t cos (θ(t)) y a I (t) = y (a I 0 ) + V t sin(θ(t)) θ(t) = θ 0 +V R − V L
Từ hai công thức (15) và (16) ta cũng có phương trình động học ngược của robot như sau: ω R R = 2 (V + L θ̇) ω L L = 2 (V − L θ̇)
ĐIỀU KHIỂN ĐỘNG DC CƠ SỬ DỤNG THUẬT TOÁN PID
3.4.1 Khái niệm bộ điều khiển PID
Thuật toán PID đóng vai trò quan trọng trong đề tài, giúp điều chỉnh hướng đi của robot một cách ổn định hơn Việc áp dụng PID là mục tiêu chính để nâng cao hiệu suất điều khiển và giảm thiểu sai số trong hệ thống Nhờ đó, robot có thể duy trì quỹ đạo chính xác, đảm bảo hoạt động hiệu quả và ổn định trong quá trình thực thi nhiệm vụ.
Bộ điều khiển PID (bộ vi tích phân tỉ lệ) là một cơ chế phản hồi vòng điều khiển được sử dụng rộng rãi trong công nghiệp để điều chỉnh hệ thống một cách chính xác PID hoạt động bằng cách tính toán sai số dựa trên hiệu số giữa giá trị đo và giá trị mong muốn, từ đó điều chỉnh đầu vào nhằm giảm thiểu sai lệch Trong trường hợp không có kiến thức nền về quá trình, PID là lựa chọn tối ưu nhất để điều khiển hệ thống Tuy nhiên, để đạt hiệu quả tối đa, các tham số PID cần được điều chỉnh phù hợp với đặc thù của từng hệ thống, mặc dù kiểu điều khiển vẫn phải giữ nguyên Giá trị tỉ lệ P xác định ảnh hưởng của sai số tại thời điểm hiện tại, giá trị tích phân I phản ánh tổng các sai số quá khứ, còn giá trị vi phân L đo tốc độ biến đổi của sai số để điều chỉnh kịp thời.
Một bộ điều khiển PID cơ bản được biểu diễn như ở Hình 3.15
Hình 3.15 Bộ điều khiển PID
Ngõ ra của bộ điều khiển PID chính là tổng của ngõ ra ba khâu này:
PID out = P out + I out +D out
Khâu tỉ lệ là tích giữa sai số hiện tại với hằng số độ lợi K p :
Khâu tích phân là tích giữa tổng sai số tức thời theo thời gian với độ lợi K 1 :
Khâu vi phân là tích giữa độ dốc sai số theo thời gian với độ lợi vi phân
Hàm truyền của bộ điều khiển PID liên tục:
Sự phát triển của các hệ thống số yêu cầu cần có những bộ điều khiển rời rạc
Thuật toán điều khiển PID rời rạc được ứng dụng rộng rãi trên máy tính và hệ thống nhúng do khả năng tối ưu hóa và linh hoạt trong điều khiển hệ thống số Việc chuyển đổi từ miền liên tục sang miền rời rạc giúp cải thiện độ chính xác và đáp ứng nhanh hơn trong quá trình điều khiển Các phương pháp chuyển đổi này cho phép thực hiện điều khiển PID hiệu quả trên các thiết bị số, phù hợp với yêu cầu của các hệ thống điều khiển tự động hiện đại.
Khâu tỉ lệ: u(kT) = K p xe(kT)
Khâu tích phân: u(kT) = K I ∑ e(k)xT k
Khâu vi phân: u(kT) = K D e(kT) − e[(k − 1) T ]
Với T là chu kỳ lấy mẫu (giây) Tác đó cho ta ngõ ra tác động u(kT) là: u(kT) = K p xe(kT) + K I ∑ e(k)xT k 0
Hình 3.16 Giải thuật PID trong chương trình
3.4.2 Cân chỉnh hệ số PID cho động cơ
Có nhiều phương pháp để chỉnh PID cho hệ thống điều khiển bao gồm cân chỉnh thủ công, sử dụng phương pháp Ziegler-Nichols và phần mềm hỗ trợ Tùy thuộc vào độ phức tạp và yêu cầu cụ thể của hệ thống, mỗi phương pháp sẽ phù hợp với các tình huống khác nhau Nhóm đã thực hiện chỉnh PID thủ công theo các bước đã được xác định rõ ràng để đảm bảo hiệu quả tối ưu cho hệ thống.
Bước 1: Khởi tạo các giá trị K p , K I , K D ban đầu bằng 0
Bước 2: Tăng dần K p cho đến khi đáp ứng động cơ bắt đầu dao động, khi đó K p sẽ được chọn bằng 1/2 giá trị bắt đầu dao động
Trong bước 3 của quá trình điều chỉnh, cần cân chỉnh K D để giúp bộ điều khiển nhanh chóng trở về giá trị đặt khi gặp hiện tượng quá vọt lố, đảm bảo hoạt động ổn định của hệ thống Trong hệ thống điều khiển động cơ, tại ngõ ra đã có phần tích phân lý tưởng, vì vậy giá trị của K I sẽ được đặt bằng 0 để tối ưu hóa hiệu suất điều khiển.
PHƯƠNG PHÁP ĐỌC ENCODER BẰNG NGẮT NGOÀI
Ngắt (interrupt) là các tên gọi hàm tự động được hệ thống sinh ra khi xảy ra một sự kiện Những sự kiện này do nhà sản xuất vi điều khiển lập trình bằng phần cứng cấu hình trong chương trình với các tên gọi khác nhau, giúp hệ thống xử lý các tình huống một cách linh hoạt và hiệu quả.
Chức năng ngắt hoạt động độc lập và tự sinh ra khi được cấu hình giúp chương trình điều khiển dễ dàng thực hiện Một ví dụ điển hình về ngắt là hàm millis(), hoạt động tự động cùng với chương trình và liên tục thu được giá trị tăng lên theo thời gian, hỗ trợ việc theo dõi thời gian chính xác trong các ứng dụng điều khiển tự động.
Mặc dù chúng ta không cần phải cài đặt hàm millis(), namun hàm này rất hữu ích vì có thể được sử dụng để tạo các chức năng dùng để ngắt tự động trong mã Arduino, giúp tối ưu hiệu suất và nâng cao khả năng điều khiển của dự án.
Ngắt giúp chương trình khởi động và xử lý nhanh hơn trong các ứng dụng điều khiển như xác định trạng thái nút nhấn Khi xác định một nút nhấn có được nhấn hay không, bạn cần so sánh trạng thái của nút với hàm digitalRead() trong vòng lặp (loop()) của chương trình Cài đặt ngắt thông thường chỉ yêu cầu đặt nút nhấn ở vị trí phù hợp để kích hoạt ngắt khi trạng thái chuyển từ HIGH sang LOW, gọi hàm xử lý ngắt khi xảy ra sự kiện này Biến trong đoạn mã ngắt cho phép bạn theo dõi trạng thái của nút nhấn một cách nhanh chóng và hiệu quả Số lượng ngắt phụ thuộc vào loại vi điều khiển: Arduino Uno có 2 ngắt, Arduino Mega 2560 có 6 ngắt, và Arduino Leonardo có 5 ngắt, giúp mở rộng khả năng xử lý nhiều tín hiệu cùng lúc.
Bảng 3.6 Số lượng ngắt trên các loại arduino
Board Int.0 Int.1 Int.2 Int.3 Int.4 Int.5
ISR: tên hàm sẽ gọi khi có sự kiện ngắt được sinh ra
mode: kiểu kích hoạt ngắt, bao gồm
LOW: kích hoạt liên tục khi trạng thái chân digital có mức thấp
HIGb cnbH: kích hoạt liên tục khi trạng thái chân digital có mức cao
RISING: kích hoạt khi trạng thái của chân digital chuyển từ mức điện áp thấp sang mức điện áp cao
FALLING: kích hoạt khi trạng thái của chân digital chuyển từ mức điện áp cao sang mức điện áp thấp
Cách đọc Encoder bằng ngắt ngoài: Đây là phương pháp dễ nhưng chính xác để đọc encoder và cũng là phương pháp được dùng trong bài học này
Ý tưởng của phương pháp rất đơn giản, chúng ta nối kênh A của encoder với 1 ngắt ngoài (INT2 chẳng hạn) và kênh B với một chân nào đó bất kỳ
(không phải chân ngắt) Cứ mỗi lần ngắt ngoài xảy ra, tức có 1 xung xuất hiện trên ở kênh A thì trình phục vụ ngắt ngoài tự động được gọi
Trong quá trình phục vụ ngắt, cần kiểm tra mức của kênh B và dựa trên mức độ này để điều chỉnh biến đếm xung, tăng hoặc giảm một đơn vị tương ứng Tuy nhiên, việc sử dụng phương pháp này đòi hỏi tính toán cẩn thận để đảm bảo độ chính xác và ổn định của hệ thống.
PHÂN TÍCH VÀ XÂY DỰNG PHẦN MỀM DỰA TRÊN NỀN TẢNG ROS
THUẬT TOÁN VẼ BẢN ĐỒ HECTOR SLAM
Hector SLAM là kỹ thuật SLAM 2D được phát triển vào năm 2018, giúp xác định vị trí và xây dựng bản đồ môi trường chính xác Trong ROS, hector_slam là gói phần mềm nhỏ giúp cài đặt hector_mapping cùng các gói liên quan, hỗ trợ quá trình lập bản đồ và định vị trong robot một cách hiệu quả Các gói chính của hector_slam bao gồm các thành phần quan trọng để tối ưu hóa khả năng tự động hóa và xử lý dữ liệu trong hệ thống robot.
Hector_mapping là một node SLAM dựa trên công nghệ LiDAR, không yêu cầu dữ liệu odometry và có tài nguyên tính toán thấp, giúp tối ưu hiệu quả trong các ứng dụng di động và robot Các tham số của node hector_mapping được phân loại rõ ràng để tối ưu hoá quá trình lập bản đồ, đảm bảo độ chính xác cao và tích hợp dễ dàng với hệ thống cảm biến LiDAR Công nghệ này phù hợp với các dự án đòi hỏi độ tin cậy cao và chi phí thấp trong việc tạo bản đồ môi trường.
- Tham số tf: gồm các tham số để điều chỉnh khung tf
- Tham số bản đồ: gồm các tham số để thiết lập các thuộc tính bản đồ như kích thước, vị trí xuất xứ, thời gian xuất bản bản đồ
Thông số Laser là các thiết lập giúp điều chỉnh ngưỡng cho máy quét laser, đảm bảo hoạt động chính xác và hiệu quả Các giá trị mặc định của chế độ này thường phù hợp với các thông số của cảm biến LiDAR Hokuyo, giúp tối ưu hóa khả năng quét và đo lường trong hệ thống tự động hóa Việc thiết lập đúng các thông số Laser không chỉ nâng cao độ chính xác mà còn đảm bảo tính ổn định của cảm biến trong các ứng dụng khác nhau.
hector_geotiff: Lưu bản đồ và quỹ đạo robot vào các tệp hình ảnh địa lý
hector_trajectory_server: Nơi lưu quỹ đạo dựa trên TF Hình 4.1 biểu thị mối liên hệ giữa các node trong Hector SLAM được tích hợp trong ROS
Hình 4.1 Các node của Hector SLAM
Hector SLAM xác định vị trí robot dựa trên phương pháp scan matching và phép đo hình học (odometry) từ xung encoder của hai bánh xe, giúp lập bản đồ hiệu quả trong điều kiện thông tin về khung tọa độ của robot bị sai lệch hoặc không đo được chính xác Thuật toán này phù hợp với các loại robot cần hoạt động trong môi trường có dữ liệu odometry không ổn định hoặc thiếu hụt, nhờ khả năng xác định vị trí chính xác dựa trên dữ liệu cảm biến quét laser Để đạt hiệu quả cao, Hector SLAM yêu cầu sử dụng thiết bị quét tầm xa có tốc độ cao, đảm bảo quá trình thu thập dữ liệu nhanh chóng và chính xác.
Trong đồ án này, nhóm sử dụng cảm biến khoảng cách Lidar RPLIDAR A1M8 360° Laser Range Scanner, với khả năng quét xa từ 0.15 đến 12 mét, giúp xây dựng bản đồ chính xác Cảm biến giao tiếp qua UART, có tốc độ quay 5.5Hz và tần số lấy mẫu lên đến 8000 điểm mỗi giây, đảm bảo dữ liệu phong phú để tạo bản đồ chi tiết Các đặc điểm nổi bật của cảm biến này giúp nâng cao hiệu quả và độ chính xác trong các dự án liên quan đến dẫn đường tự động.
Hình 4.2 Sơ đồ quá trình vẽ bản đồ
Từ hình 4.2 ta có các bước vẽ bản đồ bằng Hector SLAM như sau:
Bước 1 trong quá trình quét môi trường bằng cảm biến LIDAR là cảm biến sẽ thực hiện quét 360 độ xung quanh để thu thập dữ liệu Giá trị trả về từ cảm biến gồm 360 điểm đo tương ứng với các hướng khác nhau trên vòng tròn, mỗi điểm phản ánh khoảng cách từ LIDAR đến vật cản trong môi trường Dữ liệu chính xác này giúp hệ thống xác định vị trí và mối quan hệ của các vật thể xung quanh một cách chính xác và tin cậy.
Hình 4.3 Bản đồ được vẽ từ các điểm Lidar thu được
Trong bước 2 của quá trình, thuật toán Hector SLAM được sử dụng để nội suy tất cả các điểm trên bản đồ, chuyển đổi chúng thành các giá trị tương ứng và vẽ chúng lên bản đồ lưới đã được chuẩn bị sẵn, như minh họa trong Hình 4.3(b).
Bước 3 trong quá trình Scan Matching là tối ưu hóa liên kết giữa các điểm đã được vẽ trước đó và các điểm mới quét được, giúp giảm thiểu giá trị chiếm dụng Quá trình này đảm bảo sự chính xác trong bản đồ, nâng cao hiệu quả của hệ thống SLAM Áp dụng kỹ thuật tối ưu hóa trong Scan Matching giúp cải thiện độ chính xác của gây dựng bản đồ tự động và tự nhiên hơn.
Hình 4.4 Sử dụng Scan Matching để mở rộng bản đồ
Bước 4: Thực hiện di chuyển LIDAR dựa vào sự tính toán của các quá trình trên ta sẽ thu được một bản đồ của môi trường cần quét
Hình 4.5 Toàn bộ bản đồ đã được vẽ
Khi khởi động quá trình quét môi trường để tạo bản đồ, gốc tọa độ của bản đồ sẽ được cài đặt tại vị trí ban đầu của robot, với trục z hướng lên trên và trục x theo chiều thuận của bánh xe (hướng tiến) Hector SLAM sẽ thiết lập sẵn một bản đồ chiếm dụng, trong đó mỗi giá trị rời rạc trên bề mặt bản đồ có một giới hạn riêng biệt Trong quá trình lập bản đồ, không thể truy cập trực tiếp các giá trị này mà cần phải thực hiện nội suy để tính toán chính xác hơn.
Trong bài viết này, chúng tôi trình bày phương pháp sử dụng bộ lọc Bilinear để nội suy giá trị ô lưới con nhằm ước tính xác suất chiếm dụng của từng điểm Phương pháp này giúp xác định chính xác hơn khả năng điểm đó bị chiếm dụng, đồng thời cung cấp các dẫn xuất cần thiết để phân tích dữ liệu một cách hiệu quả Việc áp dụng bộ lọc Bilinear trong quá trình nội suy là một kỹ thuật phổ biến trong xử lý ảnh và dữ liệu không gian, giúp nâng cao độ chính xác của các dự đoán về xác suất chiếm dụng.
Khi thực hiện quét bề mặt môi trường, cảm biến Lidar sẽ cung cấp các điểm cần đánh dấu trên bản đồ lưới rời rạc do Hector SLAM đã lập sẵn Các điểm trả về này sẽ xuất hiện liên tục ở bất kỳ vị trí nào trên bản đồ, ví dụ như điểm 𝑃 𝑚 bất kỳ sẽ chiếm vị trí xác định trên bản đồ như minh họa trong Hình 4.7.
Hình 4.6 Một điểm bất kì trên bản đồ lưới 2D
Các điểm \(P_{00}\), \(P_{01}\), \(P_{10}\), \(P_{11}\) là các giá trị rời rạc được định sẵn trên OGM, phản ánh các tọa độ nguyên gần nhất với điểm \(P_m\) Việc tính toán xác định vị trí của điểm \(P_m\) trên bản đồ dựa trên giá trị chiếm chỗ của nó là \(M(P_m)\) Để ước lượng giá trị \(M(P_m)\) một cách chính xác, phương pháp nội suy Bilinear được sử dụng, trong đó phép nội suy tuyến tính dựa trên các tọa độ nguyên gần nhất \((P_{00}, P_{01}, P_{10}, P_{11})\) giúp xác định giá trị gần đúng của \(M(P_m)\).
+ y 1 − y y 1 − y 0 (x − x 0 x 1 − x 0 M(P 10 ) + x 1 − x x 1 − x 0 M(P 00 )) Gradient của giá trị chiếm chỗ sẽ là:
Từ đó, các dẫn xuất (derivatives) của bản đồ trong một điểm cụ thể sẽ được tính như sau:
Hình 4.7 Bản đồ lưới chiếm dụng và các dẫn xuất không gian
Khi cảm biến Lidar di chuyển theo các hướng như xoay, tiến hoặc lùi trong môi trường quét, vị trí của các điểm phản hồi từ Lidar cũng sẽ thay đổi tương ứng Điều này làm cho giá trị chiếm dụng của một điểm trên bản đồ OGM không còn cố định mà bị lệch theo góc quay của Lidar, dẫn đến độ chính xác của bản đồ bị ảnh hưởng và không còn như hình 4.9 mô tả.
Hình 4.8 Các bản đồ bị chồng lên nhau do quá trình xoay Lidar
Scan matching tối ưu hóa sự liên kết giữa các chùm điểm cuối đã được vẽ trên bản đồ với các chùm điểm cuối vừa mới quét bằng cảm biến Lidar Công nghệ này giúp đảm bảo bản đồ luôn được cập nhật chính xác bất kể cảm biến Lidar di chuyển hay xoay ở bất kỳ góc nào, nâng cao độ chính xác trong quá trình lập bản đồ và định vị.
Hình 4.9 Dữ liệu của Laser không khớp với bản đồ
Hình 4.10 Dữ liệu của Laser khớp với bản đồ
Phương pháp Gauss-Newton được sử dụng để dự đoán các tư thế tiếp theo mà không cần liên kết dữ liệu tìm kiếm giữa các endpoints, giúp tối ưu hóa quá trình định vị Bắt đầu với một tư thế ước tính ban đầu ξ = (px, py, ψ) 𝑇, mục tiêu của scan matching là giảm thiểu lỗi chiếm chỗ của các endpoints M(S_i(ξ)) trong bản đồ Khi M(S_i(ξ)) = 1, nghĩa là vị trí đó có chướng ngại vật tồn tại, từ đó ta có thể xác định vị trí chính xác hơn của robot Để đạt được điều này, ta sử dụng công thức tối ưu hóa: ξ* = arg min ∑ [1 − M(S_i(ξ))] n_i=1, giúp giảm thiểu lỗi chiếm chỗ và cải thiện độ chính xác của quá trình định vị.
Trong đó S i (ξ) biểu diễn sự biến đổi của endpoints nhận được khi quét bằng Lidar trong khung robot sang bản đồ
Giải thuật Gauss- Newton được dùng để giải các bài toán bình phương nhỏ nhất phi tuyến tính, hàm mục tiêu 𝑟 𝑖 được định nghĩa như sau: r i = 1 − M(S i (ξ))
Giả sử vị trí của robot có một chuyển động rất nhỏ, khi đó Δ𝜉 đủ nhỏ để bỏ qua, thì vector gradient G của hàm mục tiêu được viết là:
Hàm H biểu thị cho ma trận Hessian, thu được bằng cách bỏ qua các giá trị đạo hàm phát sinh bậc 2:
Trong đó, đạo hàm của 𝑆 𝑖 (ξ) được thể hiện bởi ma trận sau:
Mối quan hệ lặp lại của phương pháp Newton để giảm thiểu hàm mục tiêu được trình bày như sau: ξ t = ξ t−1 − H −1 G
Giờ ta sẽ tìm giá trị ∆𝜉 sao cho nhỏ nhất:
Hình 4.11 Tóm tắt quá trình lập bản đồ dùng Hector SLAM
HỆ THỐNG ĐỊNH VỊ CHO ROBOT
Mô hình chuyển động mô tả xác suất biến đổi trạng thái p(x_t | x_{t-1}, u_t), đóng vai trò là bước dự đoán trạng thái trong các bộ lọc Trạng thái của robot thường được biểu diễn bằng sáu biến gồm ba biến tọa độ (x, y, z) trong hệ trục Cartesian và ba biến góc (roll, pitch, yaw) trong hệ Euler Đối với robot hoạt động trong mặt phẳng, chỉ cần sử dụng một vector để thể hiện trạng thái, giúp đơn giản hóa quá trình xử lý và tính toán.
Trong đó (x, y) là vị trí của robot và θ là hướng xoay của robot tại vị trí đó
Do các yếu tố đã đề cập ảnh hưởng, không thể dùng một vector duy nhất để mô tả trạng thái của robot tại thời điểm t; thay vào đó, trạng thái của robot được thể hiện bằng một phân phối xác suất, như minh họa trong Hình 4.13.
Hình 4.12 Trạng thái chuyển động của robot theo mô hình xác suất
Robot bắt đầu từ trạng thái ban đầu là x t−1, sau khi nhận lệnh điều khiển ut, robot sẽ di chuyển đến vị trí x t (i), nằm trong các điểm màu xanh dương Quá trình này đảm bảo hiệu quả trong điều khiển robot tự động, giúp tối ưu hóa hoạt động và độ chính xác trong các nhiệm vụ thực hiện.
Trong hệ thống định vị robot, chỉ có thể đọc được một giá trị của encoder để xác định vị trí, được thể hiện bằng điểm màu đỏ Mỗi vị trí x(t)(i) được gọi là một particle, tượng trưng cho các khả năng vị trí khác nhau của robot tại thời điểm đó Có hai mô hình chuyển động chính được sử dụng để mô phỏng quá trình di chuyển của robot Mô hình đầu tiên dựa trên điều khiển ut, trong đó vận tốc điều khiển của động cơ điều khiển trực tiếp quá trình di chuyển của robot, giúp xác định chính xác vị trí của robot trong không gian.
Mô hình dự đoán trạng thái từ thông tin encoder được nhóm lựa chọn để nâng cao độ chính xác trong việc điều khiển robot Trong đó, mô hình này tận dụng dữ liệu từ encoder của động cơ để ước lượng chính xác hơn về trạng thái của robot, giảm thiểu sai số so với mô hình dựa trên vận tốc Mô hình thứ nhất, dựa trên ước lượng chuyển động trước khi lệnh điều khiển được truyền xuống động cơ, phù hợp để tránh vật cản nhưng chỉ hiệu quả khi sai số vận tốc là nhỏ Trong khi đó, mô hình thứ hai dựa trên giá trị đọc từ encoder của động cơ, mang lại độ chính xác cao hơn nhưng yêu cầu robot hoàn tất việc di chuyển mới có thể ước lượng được kết quả Chính vì vậy, nhóm quyết định sử dụng mô hình dự đoán trạng thái từ encoder để tối ưu hóa hiệu quả điều khiển robot.
Mô hình quan sát mô tả quá trình xử lý dữ liệu cảm biến Lidar chịu ảnh hưởng của nhiễu, được định nghĩa là phân phối xác suất có điều kiện p(z_t, x_t, m) Trong đó, z_t là phép đo của cảm biến tại thời điểm t, x_t là vị trí của robot, và m là bản đồ môi trường Phép đo z_t gồm k phần tử, thể hiện các giá trị đo khoảng cách, được biểu diễn là z_t = {z_t1, z_t2, , z_tk} Giả sử các điểm đo độc lập, ta có thể xấp xỉ phân phối xác suất p(z_i | x_t, m) bằng tích các phân phối riêng lẻ p(z_ti | x_t, m) cho từng i từ 1 đến k.
Bản đồ m có dạng lưới (grid map), được chia thành nhiều ô nhỏ (cell) Mỗi ô vuông trên bản đồ có tọa độ (x, y) và trạng thái gồm có vật cản hoặc không có vật cản Bản đồ m biểu diễn không gian bằng một tập hợp các ô nhỏ, trong đó mỗi ô i (m_i) thể hiện tình trạng của không gian tại vị trí đó Tổng thể, bản đồ m được xây dựng dựa trên tổng hợp các ô nhỏ này, thể hiện qua biểu thức m = ∑ m_i, giúp dễ dàng xác định và xử lý các trạng thái trong môi trường mô phỏng hoặc lập trình đường đi.
Particle Filter (PF) là bộ lọc không tham số, sử dụng một số lượng hữu hạn các mẫu để đại diện cho phân phối xác suất vị trí của robot trong không gian Do giới hạn về số mẫu, PF có tính xấp xỉ trong quá trình xử lý dữ liệu Phân phối bel(x_t) thể hiện nhận thức của robot về vị trí của chính nó và được mô tả bằng một tập hợp các mẫu ngẫu nhiên: bel(x_t) = {x_t[1], x_t[2], , x_t[n]} Ý tưởng chính của bộ lọc PF là dùng các mẫu này để ước lượng chính xác vị trí của robot trong môi trường xung quanh.
Trong thuật toán bộ lọc Particle Filter (PF), mỗi particle x t [i] (1 ≤ i ≤ M) đại diện cho một vị trí khả thi của robot trong môi trường thực tế Thuật toán sử dụng trạng thái tại thời điểm t-1 và điều khiển u t làm đầu vào, đồng thời dự đoán trạng thái hiện tại của robot dựa trên các dữ liệu thu thập được Phương pháp này giúp xác định vị trí chính xác của robot trong môi trường thực tế, nâng cao hiệu quả định vị và điều hướng.
Bước 1: Tạo tập hợp các particle rỗng:
Bước 2: Với mỗi particle thứ I thực hiện:
- Tính trọng số cho từng mẫu: ω t [i] = p(z t | x t [i] )
- Cập nhật lại tập particle tạm thời:
Bước 3: Thực hiện lấy mẫu x t [m] là từ tập particle tạm thời theo trọng số trong ứng và cập nhật tập particle
Trong quá trình lọc phần tử theo phương pháp Particle Filter, số lượng particle càng nhiều giúp phân phối đại diện chính xác hơn, nhưng đồng thời làm tăng gánh nặng tính toán và ảnh hưởng đến hoạt động thời gian thực của robot Ở bước thứ hai, tập particle tạm thời được dùng để dự đoán vị trí hiện tại dựa trên vị trí trước đó và tín hiệu điều khiển, thông qua mô hình chuyển động thay vì lấy mẫu trực tiếp từ phân phối p(x_t | u_t, x_{t-1}) Tập particle này nằm quanh vị trí thu được qua encoder, mỗi particle được gán trọng số thể hiện sự kết hợp của mô hình quan sát và tập particle, trong đó trọng số càng lớn biểu thị xác suất vị trí đó là của robot càng cao Bước quan trọng nhất trong Particle Filter là lấy mẫu từ các mẫu quan trọng, chuyển tập particle tạm thời thành tập chính thức với kích thước cố định M, trong đó các particle có trọng số thấp sẽ bị loại bỏ Trọng số của mỗi particle tại thời điểm t thường được cập nhật dựa trên trọng số ở thời điểm t−1 bằng công thức ω_t[i] = p(z_t | x_t[i]) * ω_{t−1}[i], phản ánh xác suất quan sát mới so với vị trí dự đoán của robot.
4.2.4 Xác định vị trí robot với thuật toán AMCL
4.2.4.1 Thuật toán định vị Monte-Carlo
Bộ lọc Monte-Carlo là một phương pháp xác định vị trí robot trong không gian dựa trên mô hình lọc phần tử trọng số (PF) với bản đồ đã biết trước Quá trình này gồm hai bước chính: lấy mẫu vị trí từ mô hình chuyển động và đánh giá trọng số dựa trên mô hình quan sát, sau đó tiến hành lấy mẫu lại các mẫu quan trọng để cập nhật vị trí chính xác hơn Ví dụ, robot sử dụng bộ lọc Monte-Carlo để xác định chính xác vị trí của mình khi di chuyển và quan sát các vật cản như minh họa trong hình 10.
Hình 4.13 Minh họa về quá trình định vị theo phương pháp xác suất, phân bố xác suất được biểu diễn ở dạng rời rạc
Lúc khởi tạo vị trí robot, khả năng chính xác còn nhiều hạn chế do chưa thực hiện quan sát môi trường xung quanh Các particle x_i được lấy mẫu ngẫu nhiên và phân phối đều trên bản đồ để bắt đầu quá trình định vị Sau khi robot thực hiện phép đo z_t, thuật toán MCL sẽ cập nhật trọng số cho từng particle dựa trên độ phù hợp của phép đo đó Hàm bel_x_t thể hiện nhận thức của robot về vị trí của mình dựa trên tập hợp các particle và trọng số tương ứng Khi robot di chuyển, tập particle x_t cũng sẽ được cập nhật theo, đồng thời trọng số của mỗi particle sẽ được điều chỉnh dựa trên quan sát z_t, qua đó đánh giá xác suất của từng vị trí Quá trình này được lặp lại nhiều lần, giúp các particle hội tụ quanh một vị trí có xác suất cao nhất, xác định chính xác hơn về vị trí của robot trên bản đồ.
4.2.4.2 Bộ lọc thích nghi AMCL
Thông thường, tập particle tại thời điểm t = {𝑥 𝑡 [1], 𝑥 𝑡 [2], , 𝑥 𝑡 [M]} đại diện cho các phần tử nằm trong lân cận của một điểm Khi robot di chuyển vượt quá vùng lân cận này hoặc gặp thất bại trong định vị toàn cục, khả năng khôi phục vị trí ban đầu của robot từ bộ lọc trở nên khó khăn hoặc không khả thi, đặc biệt trong mô hình xác suất p(z_t | z_{t-1}, u_t, m).
Phân phối trên được xấp xỉ theo trọng số ωi của particle để dễ dàng tính toán số particle ngẫu nhiên cần thêm vào:
Để giảm ảnh hưởng của nhiễu trong quá trình xử lý dữ liệu, các trọng số được ước lượng dựa trên các trọng số ngắn hạn và dài hạn, giúp nâng cao độ chính xác của bộ lọc Bộ lọc Monte-Carlo có tính thích nghi (AMCL) bao gồm các bước quan trọng nhằm tối ưu hóa hiệu suất, đảm bảo khả năng thích ứng với các biến đổi của môi trường Quá trình này giúp cải thiện khả năng định vị và theo dõi trong các hệ thống robot hoặc xe tự hành, đặc biệt khi đối mặt với dữ liệu nhiễu hoặc không chính xác Áp dụng các phương pháp này góp phần nâng cao tính đáng tin cậy và hiệu quả của các hệ thống xác định vị trí dựa trên cảm biến.
Bước 1: Tạo tập hợp các particle rỗng:
Bước 2: Với mỗi particle, tiến hành lấy mẫu để dự đoán vị trí và đánh giá các trọng số:
- Tính trọng số cho từng mẫu: ω t [i] = p(z t | x t [i] )
- Cập nhật lại tập particle tạm thời:
- Tính trung bình của trọng số: ω avg = ω avg + 1
- Tính trọng số ngắn hạn: ω slow = ω slow + α slow (ω avg − ω slow )
- Tính trọng số dài hạn:
57 ω fast = ω fast + α fast (ω avg − ω slow )
Bước 3: Thêm các particle ngẫu nhiên vào tập particle chính thức X t với xác xuất: max (0.0,1.0 − ω fast ω slow )
Bước 4: Thực hiện lấy mẫu x t [m] lại từ tập particle tạm thời theo trọng số tương ứng và cập nhật tập particle:
Các chỉ số cho trọng số ngắn hạn và dài hạn phải thõa mãn điều kiện:
Quá trình thêm các particle ngẫu nhiên được thực hiện để xử lý sự khác biệt giữa ω fast và ω slow khi quan sát vùng lân cận Khi vùng quan sát ngắn hạn có khả năng tốt hơn hoặc bằng vùng quan sát dài hạn, không cần thiết phải thêm các particle ngẫu nhiên vào tập dữ liệu Tuy nhiên, nếu vùng quan sát ngắn hạn kém hơn so với vùng quan sát dài hạn, điều đó cho thấy robot đang bị lạc, lúc này các particle ngẫu nhiên sẽ được bổ sung để cải thiện độ chính xác của quá trình định vị.
ĐIỀU HƯỚNG CHO ROBOT
Hình 4.14 Computation Graph Navigation Stack
Navigation Stack là ứng dụng hoàn chỉnh nhất của ROS, lấy dữ liệu từ odometry và cảm biến để xử lý và xuất lệnh vận tốc cho mô hình di động Sơ đồ tổng quan thể hiện các thành phần chính của Navigation Stack gồm node move_base, amcl và map_server, trong đó các phần tử cần thiết đã được triển khai và các khối tùy chọn hỗ trợ sẵn Để áp dụng Navigation Stack cho từng mô hình robot, cần xây dựng các node riêng biệt để chuyển đổi hệ tọa độ, phát tán thông tin cảm biến đúng dạng Message và điều khiển chính xác mô hình robot Đồng thời, việc cấu hình các tham số liên quan tới cấu trúc và chuyển động của robot là bắt buộc, cùng với các yêu cầu thiết kế phù hợp để đảm bảo hoạt động hiệu quả của Navigation Stack trên robot.
Đầu tiên, chúng ta cần xây dựng bản đồ môi trường, sau đó lưu trữ bản đồ này trên server (map_server) Tiếp theo, bản đồ sẽ được truyền từ map_server vào global_costmap để tạo thành bản đồ điều hướng chính xác và hiệu quả.
Global_costmap cung cấp dữ liệu cho global_planner (hoạch định đường đi toàn cục), giúp robot xác định lộ trình di chuyển từ vị trí hiện tại đến điểm đích mong muốn Global_planner là công cụ tạo ra kế hoạch đường đi chính xác trên bản đồ map, đảm bảo robot di chuyển hiệu quả và an toàn đến vị trí mục tiêu đề ra.
Global_planner sẽ cung cấp kế hoạch hành trình toàn cục để hướng dẫn cho local_planner thực hiện hoạch định đường đi cục bộ Để xác định lộ trình cục bộ chính xác, cần dựa vào môi trường thực tế nhằm đảm bảo tính khả thi và hiệu quả của lộ trình Quản lý dựa trên dữ liệu thực tế giúp tối ưu hóa quá trình lập kế hoạch đường đi cục bộ, nâng cao khả năng thích ứng với điều kiện thay đổi trong môi trường thực tế.
Giá trị được đưa vào đầu tiên đó là local_costmap, thì local_costmap sẽ cắt
Phần nhỏ của bản đồ xung quanh robot được kết hợp với cảm biến lidar để quét môi trường liên tục Thông tin từ cảm biến lidar giúp cập nhật chính xác vị trí của các vật cản mới trong khu vực, từ đó hỗ trợ robot đưa ra quyết định di chuyển phù hợp Việc tích hợp bản đồ và cảm biến lidar giúp robot có khả năng phản ứng linh hoạt với môi trường xung quanh, nâng cao hiệu quả và độ an toàn trong quá trình vận hành.
Hoạch định đường đi cục bộ vẫn giữ nguyên mục tiêu dựa trên kế hoạch đường đi toàn cục ban đầu để đảm bảo quá trình di chuyển chính xác Quá trình này kết hợp linh hoạt để tránh vật cản hiệu quả, giúp hệ thống định hướng ổn định và an toàn trong môi trường động.
Ta có amcl là một modul để xác định vị trí của robot trên bản đồ map
Odometry source (Laser scan matcher) dùng để quét map hiển thị tf (vị trí của robot được hiển thị dưới dạng tọa độ) của robot
4.3.2 Bản đồ trọng số (costmap)
Trong điều hướng robot, bản đồ trọng số đóng vai trò quan trọng trong việc xác định các vùng có vật cản, các khu vực có khả năng va chạm và những điểm mà robot có thể di chuyển một cách an toàn Tùy thuộc vào kiểu điều hướng, bản đồ trọng số có thể được chia thành hai phần khác nhau, giúp nâng cao hiệu quả lập kế hoạch và tránh chướng ngại vật trong quá trình di chuyển của robot [14].
Một là global_costmap, thiết lập kế hoạch di chuyển cho điều hướng robot trong toàn bộ không gian của bản đồ
Còn lại là local costmap được dùng cho kế hoạch di chuyển và tránh vật cản trong không gian giới hạn xung quanh robot
Bản đồ trọng số thể hiện giá trị từ 0 tới 255 Từng giá trị được xác định nơi robot có thể di chuyển hoặc va chạm với vật cản:
000: vùng khoảng trống mà robot có thể di chuyển được
001 - 127: vùng có xác suất thấp xuất hiện vật cản
128 - 252: vùng có xác suất cao xuất hiện vật cản
253 - 254: vùng có xuất hiện vật cản
255: vùng bị chiếm dụng, robot không thể di chuyển
Hình 4.15 Các giá trị của bản đồ trọng số ảnh hướng tới hoạt động của robot
Cost_lethal: Là giá trị của một cell chứa vật cản Nếu trọng tâm của robot đi vào vùng này thì chắc chắn robot sẽ bị va chạm
Cost_inscribed tượng trưng cho giá trị của một ô (cell) tính từ vật cản đến bán kính nội tiếp của robot Khi tâm của robot nằm trong vùng này, chắc chắn robot sẽ va chạm vào vật cản, giúp xác định các khu vực nguy hiểm để tránh va chạm trong quá trình lập trình và điều hướng robot.
Cost_possibly_circumscribed là giá trị của costmap phản ánh khoảng cách từ vật cản đến bán kính ngoại tiếp của robot Giá trị này tương tự như cost_inscribed nhưng đo lường khoảng cách từ vật cản đến đường ngoại tiếp của robot, giúp xác định mức độ an toàn khi robot di chuyển trong khu vực này Khi tâm của robot đi vào vùng có giá trị cost_possibly_circumscribed, nguy cơ va chạm với vật cản phụ thuộc vào hướng đi của robot, từ đó hỗ trợ tối ưu hóa lộ trình di chuyển để đảm bảo an toàn.
Cost_freespace: Có giá trị bằng 0, thể hiện rằng không có vật cản nơi này, robot có thể di chuyển tự do trong vùng này
Cost_unknow: Là những cell chưa có thông tin về giá trị của costmap 4.3.3 Thuật toán Dijkstra cho global planner
Trong điều hướng cho robot đến vị trí mong muốn, việc lập kế hoạch đường đi từ điểm xuất phát đến điểm đích là rất cần thiết Để tối ưu hóa tuyến đường, ta muốn chọn đường đi ngắn nhất giữa hai điểm Thuật toán Dijkstra là một trong những phương pháp đơn giản nhưng hiệu quả để tìm đường đi tối ưu nhất trong hệ thống này.
Hình 4.16 Tóm tắt giải thuật Dijkstra
Thuật toán Dijkstra giải quyết bài toán tìm đường đi ngắn nhất trên đồ thị G = (V, E), trong đó V là tập hợp các đỉnh và E là các cạnh vô hướng hoặc có hướng, mỗi cạnh có trọng số dương Mục tiêu của thuật toán là tính đường đi ngắn nhất từ đỉnh nguồn s đến tất cả các đỉnh còn lại trong đồ thị Hiểu rõ hơn về cách hoạt động của thuật toán, ta có thể xem xét hình ảnh minh họa để hình dung quá trình tìm đường đi tối ưu trên đồ thị.
Bước 1: Chọn node A là source node, tính khoảng cách từ node A đến các node liền kề
Bước 2: Khoảng cách (A – C ) là ngắn nhất Xét node C, tính tổng khoảng cách từ node C đến các node liền kề
Hình 4.19 Khoảng cách ngắn nhất
Dưới góc độ tối ưu hóa, bước 3 xác định rằng khoảng cách từ điểm A đến D là nhỏ nhất Khi xem xét node D và tính khoảng cách từ D đến các node liền kề, ta nhận thấy đường đi từ A đến F qua D có chiều dài 21 (A – D – F), lớn hơn so với đường đi qua C (A – C – F) có chiều dài 16 Do đó, cần giữ nguyên đường đi ngắn nhất từ A đến F là qua node C, đảm bảo tối ưu hóa lộ trình và nâng cao hiệu quả trong quá trình lập kế hoạch.
Hình 4.20 Khoảng cách nhỏ nhất
Bước 4: Ở node B, khoảng cách từ A đến E có hai đường đi Khoảng cách đường từ (A – C – E) = 4 + 17 = 21 > (A − B − E) = 9 + 11 = 20 Nên ta chọn đường đi ngắn nhất từ (A – E) là (A – B – E)
Hình 4.21 Khoảng cách đường đi
Bước 5: Sau đó, ta xét tiếp node F tương tự như quá trình trên
Bước 6: Ở node E, quãng đường từ A − Z là (A – C – E − Z) = 4 + 17 +
5 = 26 > (A – C – F − Z) = 4 + 12 + 9 = 25 Nên ta chọn đường đi nhỏ nhất từ A − Z là (A – C – F − Z)
Hình 4.23 Kết quả của thuật toán
Qua thuật toán trên ta có thể dễ dàng tìm được đường đi ngắn nhất từ điểm bắt đầu đến điểm đích
Hình 4.24 Hoạch định đường đi dùng thuật toán Dijkstra
4.3.4 Thuật toán Dynamic Window Approach để tránh vật cản cho local planner
Thuật toán Dynamic Window Approach (DWA) giúp xác định tín hiệu điều khiển phù hợp để gửi đến robot, nhằm hướng dẫn robot đến đích một cách an toàn và nhanh chóng dựa trên kế hoạch toàn cục đã được lập ra từ trước Phương pháp này gồm hai bước chính: cắt giảm không gian tìm kiếm vận tốc để giảm phạm vi kiểm tra và tìm ra vận tốc tối ưu trong không gian tìm kiếm đã giới hạn này, giúp robot di chuyển hiệu quả hơn.
Các vận tốc có thể điều khiển được trong không gian tìm kiếm được cắt giảm theo ba bước sau:
Thuật toán DWA tập trung vào quỹ đạo tròn, trong đó quỹ đạo được xác định duy nhất bởi một cặp vận tốc thẳng và vận tốc xoay, gọi là (v, 𝜔) Điều này giúp đơn giản hóa quá trình lập kế hoạch di chuyển của robot bằng cách chỉ xét đến các quỹ đạo hình tròn, phù hợp với đặc tính của thuật toán Quỹ đạo tròn là mô hình phổ biến trong thuật toán DWA vì tính khả thi và dễ tính toán, đảm bảo robot có thể di chuyển linh hoạt và chính xác trong môi trường phức tạp.
Vận tốc cho phép đảm bảo an toàn cho robot bằng cách tạo ra một quỹ đạo tránh vật cản hiệu quả Một cặp vận tốc (v, 𝜔) được coi là hợp lệ khi robot có thể dừng lại trước vật cản gần nhất mà không xảy ra va chạm trên quỹ đạo tương ứng với vận tốc đó Điều này giúp robot duy trì hoạt động an toàn và linh hoạt trong môi trường có nhiều vật thể cản trở.
V a là chuỗi các giá trị vận tốc (v, ω) cho phép robot dừng trước vật cản mà không có sự va chạm
dist(v, ω)là khoảng cách nhỏ nhất mà robot dừng trước vật cản để không có sự va chạm
v b , ω b là gia tốc của vận tốc thẳng và vận tốc xoay tối đa nếu robot di chuyển sẽ gây va chạm với vật cản
Hình 4.25 Vận tốc cho phép V a trong DWA