TỔNG QUAN
Đặt vấn đề
Trong thời đại công nghệ hóa hiện đại ngày nay, sự phát triển về robot đã mở ra nhiều triển vọng, tiềm năng vô cùng to lớn, hứa hẹn về sự đổi mới trong lĩnh vực đời sống con người Một trong những lĩnh vực được quan tâm lớn nhất chính là ngành dịch vụ Trong đó việc sử dụng robot phục vụ trong nhà hàng đang dần trở thành xu hướng phổ biến và là tương lai của ngành này Với khả năng tự động, vận hành tốt và sự linh hoạt trong hoạt động, robot phục vụ mang đến sự trải nghiệm độc đáo mới cho khách hàng Từ việc tiếp đón, giao đồ ăn đến giao tiếp với khách hàng, tất cả tạo ra một trải nghiệm mới cho khách hàng và nâng cao chất lượng dịch vụ, gắn kết với khách hàng Robot phục vụ là một loại AMR (Autonomous Mobile Robot) được thiết kế chuyên dụng với khay để đồ ăn dùng trong nhà hàng Song, robot phục vụ còn có mục đích thay thế, giảm thiểu nhân công, tăng cường sự chính xác và giảm thiểu tối đa những sai sót do con người mang lại Ngoài ra, robot phục vụ trong nhà hàng còn được trang bị nhiều công nghệ tiên tiến nhằm tránh va chạm và an toàn trong tương tác với khách hàng Mặc dù robot phục vụ mang đến nhiều lợi thế vượt trội song vẫn tồn tại một số thách thực cần vượt qua Vấn đề như tương tác với khách, độ tin cậy của robot và thời gian hao mòn của trang thiết bị cần quan tâm để đảm bảo cho robot hoạt động một cách mượt mà cũng như lâu dài nhất Tóm lại, robot phục vụ trong nhà hàng đang là xu hướng phát triển mới và mang lại nhiều lợi ích cho ngành dịch vụ nhà hàng khách sạn Vì sự bủng phát của dịch Covid 19 khiến cho ngành dịch vụ nhà hàng trì trệ, thiếu hụt nhân công, suy thoái kinh tế ở tất cả các nước Chính vì vậy mà sự ra đời của robot phục vụ nhà hàng càng trở nên cấp thiết hơn bao giờ hết Với khả năng tự động hóa linh hoạt và những lợi ích robot mang lại như đã nói ở trên thì robot phục vụ nhà hàng sẽ là định hướng tương lai cho ngành dịch vụ nói chung và mảng dịch vụ trong nhà hàng nói riêng
Dựa vào các cơ sở đó, nhóm em đặc biệt quan tâm và muốn nghiên cứu, phát triển đề tài: “THIẾT KẾ VÀ ĐIỀU KHIỂN MÔ HÌNH ROBOT PHỤC VỤ TRONG NHÀ HÀNG”; thực hiện làm mô hình thực tế kết hợp với các phần mềm lập trình, giám sát chuyên dụng
Robot phục vụ ngày nay đã rất phổ biến trong xã hội, nhiều nhà hàng đã dần chuyển qua phục vụ bằng robot để nâng cao trải nghiệm khách hàng, giảm xung đột tối đa giữa người với người Một vài công ty lớn đi đầu trong lĩnh vực nghiên cứu và cho ra đời những sản phẩm robot phục vụ như: Keenon Robot, Reeman Robot Family,…
Hình 1 1: Các sản phẩm của Keenon Robot
Với tình hình đại dịch, một vài nước đã sử dụng robot phục vụ nhằm bổ sung vì sự thiếu hụt nhân viên như Nhật Bản, Mỹ, Pháp… Bên cạnh đó, một robot phục vụ có thể mang được nhiều hơn hai khay đổ lên và sự tiện lợi tốt hơn so với nhân viên
Hình 1 2: Robot phục vụ tại nhà hàng Nhật Bản
Hình 1 3: Robot phục vụ tại nhà hàng Hàn Quốc
Thực trạng trong nước: Đối với nước ta cũng phải đối diện với sự tàn phá của đại dịch Covid 19, một số nhà hàng đã chuyển sang sử dụng robot phục vụ nhà hàng để giảm thiểu chi phí nhân viên như Nabe Suki, Hải Phòng Xưa, Haidilao,… Một điểm chung trong các nhà hàng là đều sử dụng robot có tên Bella được nhập từ nước ngoài về
Hình 1 4: Robot phục vụ tại nhà hàng Hải Phòng Xưa ở quận 7
Hình 1 5: Robot phục vụ trong nhà hàng Haidilao
Trong đề tài này, vấn đề được đặt ra liên quan đến định vị, lập kế hoạch đường đi và tránh vật cản trong quá trình di chuyển Đây là những vấn đề quan trọng và thiết yếu cần nghiên cứu và đưa ra giải pháp cụ thể để robot có thể vận hành trơn tru nhất Đối với vấn đề định vị và lập kế hoạch đường đi, mục tiêu là tìm và vận hành robot theo con đường ngắn nhất Ngoài ra, tìm đường đi còn bị ảnh hưởng đến vật cản động và tĩnh, vì vậy mà đường đi có thể bị thay đổi Vấn đề này có thể giải quyết bằng cách lập trình tự hành, sử dụng những thuật toán để robot tự né tránh và tìm đường đi phù hợp nhất, tối ưu cả về mặt thời gian và an toàn.
Mục đích đề tài
Mục đích của đề tài là sử dụng những kiến thức đã học liên quan đến robot, hệ thống điều khiển tự động và những kiến thức chuyên ngành khác để ứng dụng vào hệ thống thực tế tạo ra được mô hình robot phục vụ trong nhà hàng đáp ứng các mục tiêu đề tài.
Nội dung nghiên cứu
- Thiết kế mô hình thực tế robot phục vụ, lựa chọn được các thiết bị phù hợp, đáp ứng được các tiêu chí quan trọng để thực hiện các chức năng của hệ thống
- Nghiên cứu về động học và bộ điều khiển PID cho động cơ robot
- Sử dụng Raspberry thay thế để robot có thể tự hành từ xa và vận hành hệ thống ổn định
- Nghiên cứu và sử dụng công nghệ SLAM, cảm biến Lidar để vẽ map, định vị và cập nhật dữ liệu môi trường cho hệ thống
- Nghiên cứu và sử dụng ROS để vận hành và điều khiển robot
- Tìm hiểu và ứng dụng các thuật toán của ROS để lập kế hoạch đường đi và tránh vật cản
- Tìm hiểu và ứng dụng Google Assistant để ra lệnh điều khiển và phát tín hiệu thông báo
- Nghiên cứu thiết kế các giao diện để người dùng có thể tương tác trực tiếp với robot và dễ dàng giám sát.
Giới hạn đề tài
Nội dung đề tài chủ yếu tập trung vào đối tượng cụ thể là robot phục vụ trong nhà hàng bằng cách ứng dụng và tích hợp các chức năng có thể đáp ứng được mục đích phục vụ, giao món và tương tác với người dùng Vì thế, đề tài đi sâu phân tích tính ứng dụng thay vì nghiên cứu thuật toán cũng như tính toán rõ ràng các thông số kỹ thuật chuyên sâu của các thiết kế cơ khí cho hệ thống
Sau khi tìm hiểu và nghiên cứu về nội dung hệ thống, nhóm đã chọn lọc và đánh giá để đưa ra quyết định về giải pháp Việc lựa chọn các giải pháp hiệu quả, phù hợp nhất cho hệ thống dựa vào việc thử nghiệm và kiểm chứng trên mô hình thực Từ đó nghiên cứu và phát triển thêm những tính năng mới để hệ thống có thể mang đến trải nghiệm tốt nhất và cần thiết cho người dùng.
Bố cục
Trình bày tổng quan hệ thống, nội dung đề tài và mục đích đặt ra
Chương 2: Cơ Sở Lý Thuyết
Trình bày cơ sở lý thuyết các nội dung kỹ thuật và giới thiệu các thuật toán sử dụng Chương 3: Thiết Kế Và Thi Công Hệ Thống
Trình bày về thiết kế và thi công mô hình hệ thống, lựa chọn thiết bị
Chương 4: Thiết Kế Chương Trình Điều Khiển
Trình bày về các chương trình điều khiển, lưu đồ giải thuật và các cài đặt cần thiết cho hệ thống
Chương 5: Kết Quả Thực Nghiệm
Trình bày cách thức vận hành quy trình, kết quả và đánh giá hệ thống
Chương 6: Kết Luận Và Hướng Phát Triển Đưa ra nhận xét tổng quan và các hướng phát triển cho đề tài
CƠ SỞ LÝ THUYẾT
Lý thuyết di chuyển đa hướng
Xe di chuyển đa hướng là một loại xe có khả năng di chuyển trong nhiều hướng một cách độc lập và linh hoạt Điều này cho phép xe di chuyển không chỉ thẳng và quay vòng như các loại xe thông thường, mà còn di chuyển xiên, di chuyển ngang bên, và thực hiện các chuyển động phức tạp khác
Các xe di chuyển đa hướng thường được trang bị các bánh xe đặc biệt như bánh mecanum, bánh bánh xe tròn, bánh xe bước, hoặc các cơ cấu di chuyển khác nhau Thiết kế này cho phép xe tạo ra lực đẩy và lực kéo trong các hướng khác nhau, đồng thời cho phép điều khiển độc lập của từng bánh xe
Xe di chuyển đa hướng được ứng dụng rộng rãi trong nhiều lĩnh vực như robot di động, xe tự động hóa, xe vận chuyển trong nhà máy và kho hàng, robot hợp tác, và nhiều ứng dụng công nghiệp khác Sự linh hoạt và khả năng di chuyển đa hướng của xe giúp tăng hiệu suất và độ chính xác trong các tác vụ di chuyển và vận chuyển Bánh mecanum là một loại bánh xe đặc biệt được thiết kế để cho phép xe di chuyển đa hướng Đặc điểm nổi bật của bánh mecanum là có các bánh răng nhỏ được đặt xung quanh vòng ngoài của bánh xe Nhờ thiết kế này, bánh mecanum có khả năng tạo ra lực đẩy và lực kéo không chỉ theo hướng trục xe, mà còn theo các hướng xiên và chéo
Hình 2 1: Các hướng di chuyển của bánh Mecanum
Phương pháp điều khiển bánh mecanum thường sử dụng các phương pháp như điều khiển vector tốc độ (velocity vector control) hoặc điều khiển mô phỏng (kinematic control) Bằng cách điều chỉnh các giá trị vector tốc độ của từng bánh xe, ta có thể đạt được các chuyển động mong muốn của xe Ứng dụng của bánh mecanum phổ biến trong ngành công nghiệp tự động hóa, robot hợp tác, robot di động, xe tải tự lái, và các ứng dụng đòi hỏi khả năng di chuyển
7 đa hướng và linh hoạt Việc sử dụng bánh mecanum giúp tăng khả năng vận chuyển và điều khiển của xe, đồng thời giảm thời gian và công sức trong các thao tác di chuyển.
Động học bánh xe Mecanum
Hình 2 2: Mô hình toán học của hệ xe Mecanum Vector tọa độ của robot với hướng song song với tọa độ x đc biểu diễn bằng vector V x và có các thành phần của vector V y được xác định bởi: x cos
Kích thước của robot được biểu diễn bằng bán kính a và b giữa trung tâm thân xe với trục bánh xe theo giá trị a i : {a, a, -a, -a} và b i : {b, -b, b, -b} với i : {1, 2, 3, 4} đại diện cho số bánh xe Góc nghiêng y giữa V và V r là 45° , đại diện cho góc nghiêng của bánh lăn mecanum trên mỗi bánh xe là : , , ,
Phương trình vector vận tốc của robot di chuyển theo các thành phần tọa độ có thể được tính bằng công thức sau:
Thay hàm tan(𝛾 𝑖 ) vào phương trình (2.3) và (2.4) ta có thể tính được vấn tốc tuyến tính của mỗi bánh xe như sau: tan( ) y i i x i i
Vìtan( ) i được biểu diễn trong phương trình (2.5) bằngtan( ) : 1, 1, 1,1 i , vận tốc tuyến tính của bánh xe mecanum được tính như sau:
Trong khi đó, vận tốc góc của bánh xe được xác định bằng 𝜔 𝑖 = 𝑣 𝑖
𝑅 và R là bán kính của bốn bánh xe mecanum, phương trình (2.6) đến (2.9) có thể được điều chỉnh thành:
Phương trình (2.10) mô tả mô hình toán học của động học nghịch để tính toán được vận tốc của từng bánh xe dựa trên đầu vào là các thành phần vector của Vx và Vy và theo hướng góc bên của robot mà không thay đổi hướng của robot khi đang hướng tới Động học nghịch là phần không thể thiếu trong việc tạo ra một chuỗi động học khi robot được mô hình hóa với một khung thành phần bằng các đoạn cứng được kết nối bằng các khớp nối Hơn nữa, với bài toán độc học nghịch, các khớp cho một vị trí mong muốn của nền tảng có thể tính toán
Từ công thức (2.10) chuyển hệ ma trận sang hệ phương trình, ta được:
Từ phương trình (2.) trên, cộng 4 phương trình ta có động học thuận được biểu diễn như sau:
V t R (2.13) Vận tốc dọc theo hướng chéo:
Phương trình động học có thể mô tả như sau: x y z x V y J V
Trong đó: cos sin 0 sin cos 0
là đầu vào vận tốc của tọa độ tổng quát.
Giới thiệu về hệ thống ROS (Robot Operating System)
ROS (Robot Operating System) là một hệ thống phần mềm mã nguồn mở được phát triển nhằm hỗ trợ việc phát triển và điều khiển các robot ROS cung cấp một khung làm việc linh hoạt và mạnh mẽ cho việc xây dựng các ứng dụng robot đa nền tảng
ROS không chỉ là một hệ điều hành dành riêng cho robot, mà thực chất nó là một tập hợp các thư viện, công cụ và quy tắc cho phép các phần mềm robot tương tác với nhau Mục tiêu chính của ROS là tạo ra một môi trường hợp tác, trong đó các phần mềm có thể chia sẻ dữ liệu, truyền thông và tương tác với nhau một cách dễ dàng
ROS hỗ trợ việc phát triển phần mềm robot theo mô hình kiến trúc phân tán, trong đó các thành phần phần mềm độc lập có thể chạy trên các nút (node) riêng biệt và giao tiếp với nhau thông qua các topic, service và action ROS cung cấp cơ chế tạo ra, quản lý và chuyển đổi các message (thông điệp) để các nút có thể giao tiếp và trao đổi dữ liệu với nhau
ROS hỗ trợ nhiều ngôn ngữ lập trình như C++, Python và Java, giúp cho người phát triển có sự linh hoạt trong việc lựa chọn ngôn ngữ phù hợp với nhu cầu của dự án
Một điểm mạnh của ROS là sự phổ biến và sự hỗ trợ từ cộng đồng người dùng rộng lớn Cộng đồng ROS cung cấp nhiều tài liệu, ví dụ và gói phần mềm mở rộng, giúp người dùng tiết kiệm thời gian và công sức trong quá trình phát triển robot
Tóm lại, ROS là một hệ thống phần mềm mã nguồn mở mạnh mẽ cho phát triển robot, cung cấp khả năng tương tác và chia sẻ dữ liệu giữa các phần mềm robot Với ROS, người dùng có thể xây dựng các ứng dụng robot phức tạp một cách dễ dàng và linh hoạt
Linux là một hệ điều hành phổ biến và mạnh mẽ Nó được phát triển bởi một cộng đồng toàn cầu và được sử dụng rộng rãi trên nhiều thiết bị và máy tính Linux có tính linh hoạt cao và có thể được cài đặt trên nhiều loại phần cứng khác nhau Nó cung cấp một môi trường ổn định và bảo mật, cùng với nhiều công cụ và ứng dụng phong phú Linux được ưa chuộng cho tính ổn định, hiệu suất cao, khả năng tùy chỉnh và khả năng tương thích với nhiều phần mềm và tiêu chuẩn
ROS 1 có thể được cài đặt và chạy trên các phiên bản Linux khác nhau như Ubuntu, Fedora, CentOS và nhiều hệ điều hành khác, nhưng hệ thống thường được hỗ trợ tốt nhất trên Ubuntu Các công cụ và thư viện trong ROS
1 được phát triển và kiểm tra chủ yếu trên Linux, vì vậy việc sử dụng ROS 1 trên hệ điều hành Linux giúp đảm bảo tính ổn định và tương thích tốt
Hình 2 4: Hệ điều hành Linux phiên bản Ubuntu 20.04
Trong ROS, có một số cấp độ khái niệm quan trọng để hiểu cách hệ thống hoạt động và tương tác với nhau Dưới đây là một số cấp độ khái niệm chính trong ROS:
- Package (Gói): Package là cấp độ tổ chức cao nhất trong ROS Nó là một thư mục chứa các tập tin và mã nguồn liên quan đến một chức năng cụ thể hoặc một phần của hệ thống robot Package bao gồm các tệp tin cấu hình, mã
12 nguồn, thư viện, message, và các công cụ khác liên quan đến chức năng cụ thể đó Một gói trong ROS có thể được sử dụng lại và chia sẻ giữa các dự án khác nhau
- Node (Nút): Node là một quy trình độc lập trong ROS, chạy trên một máy tính riêng biệt Nó là một đơn vị cơ bản để thực hiện các chức năng cụ thể trong hệ thống robot Mỗi node trong ROS có thể chứa mã nguồn, các thư viện, và các phần mềm phụ thuộc khác Node giao tiếp với nhau bằng cách gửi và nhận thông điệp (messages) thông qua các topic, service, hoặc action
- Topic (Chủ đề): Topic là một kênh truyền thông không đồng bộ trong ROS
Nó cho phép các node gửi và nhận thông điệp (messages) theo một định dạng cụ thể Các node có thể xuất bản (publish) thông điệp lên một topic và đọc (subscribe) thông điệp từ topic đó Ví dụ, một topic có thể chứa thông tin về tọa độ của robot, và các node khác có thể đọc và sử dụng thông tin đó để thực hiện các chức năng khác
- Service (Dịch vụ): Service là một cơ chế giao tiếp đồng bộ trong ROS Nó cho phép các node yêu cầu (call) một dịch vụ và các node khác cung cấp (advertise) dịch vụ đó Dịch vụ được sử dụng để thực hiện các chức năng cụ thể khi được yêu cầu Ví dụ, một node có thể cung cấp dịch vụ để di chuyển robot đến một vị trí được chỉ định, và các node khác có thể yêu cầu dịch vụ này để điều khiển robot di chuyển
Công nghệ SLAM (Simultaneous Localization and Mapping)
Simultaneous Localization and Mapping (SLAM) là một công nghệ quan trọng trong lĩnh vực robot tự hành Nó cho phép robot xác định vị trí của chính mình trong một môi trường không biết trước và đồng thời xây dựng bản đồ của môi trường đó Quá trình SLAM được thực hiện bằng cách kết hợp dữ liệu từ các cảm biến như lidar, camera, encoder và centimeter-level GPS (Global Positioning System) Các cảm biến này cung cấp thông tin về khoảng cách, hình dạng và vị trí của các vật thể xung quanh robot Dựa trên dữ liệu này, SLAM sử dụng các thuật toán xử lý và phân tích để ước lượng vị trí của robot và tạo bản đồ của môi trường
Hình 2 6: Công nghệ SLAM quét map và định vị
Quá trình SLAM bao gồm hai giai đoạn chính: Giai đoạn xác định vị trí (Localization) và giai đoạn xây dựng bản đồ (Mapping)
Trong giai đoạn xác định vị trí, robot sử dụng dữ liệu từ các cảm biến để ước lượng vị trí của mình trong môi trường Các thuật toán xác định vị trí phổ biến bao gồm Particle Filter, Extended Kalman Filter và Rao-Blackwellized Particle Filter Thông qua việc so khớp dữ liệu từ cảm biến với bản đồ hiện tại, robot có thể xác định vị trí của mình trong môi trường không biết trước
Sau khi xác định được vị trí, robot tiến hành giai đoạn xây dựng bản đồ Trong giai đoạn này, robot sử dụng dữ liệu từ các cảm biến để xây dựng một bản đồ của môi trường xung quanh nó
Quá trình SLAM là một công việc phức tạp, đòi hỏi tính toán cao và đồng thời xử lý các vấn đề như nhiễu dữ liệu, sự chồng chéo của vật thể và hạn chế tính toán Tuy nhiên, nó là một công nghệ quan trọng trong việc đạt được tự định vị và xây dựng bản đồ chính xác trong robot tự hành, và được sử dụng rộng rãi trong các ứng dụng như robot dịch vụ, xe tự hành và robot khám phá môi trường không rõ ràng
Trong ROS, xây dựng bản đồ là một quá trình quan trọng để robot có thể hiểu và tương tác với môi trường xung quanh ROS cung cấp một số công cụ và gói phần mềm hỗ trợ cho việc xây dựng bản đồ
Map Server trong ROS là một công cụ hỗ trợ để lưu trữ và cung cấp bản đồ cho các ứng dụng robot Nó cho phép các node khác trong hệ thống truy cập và sử dụng thông tin bản đồ một cách thuận tiện Dưới đây là một số thông tin chi tiết về Map Server:
- Chức năng: Map Server cung cấp một giao diện để lưu trữ và phục vụ bản đồ được tạo ra bởi các công cụ xây dựng bản đồ trong ROS, như gmapping hoặc cartographer Nó cho phép các node khác yêu cầu bản đồ và nhận được dữ liệu bản đồ thông qua giao thức dịch vụ
- Định dạng bản đồ: Map Server hỗ trợ định dạng bản đồ trong ROS như Occupancy Grid Map (bản đồ lưới chiếm dụng) hoặc Costmap (bản đồ chi phí) Occupancy Grid Map sử dụng một ma trận lưới để biểu thị trạng thái của từng ô trong môi trường, trong khi Costmap sử dụng giá trị chi phí để biểu thị mức độ khó khăn hoặc tầm quan trọng của từng ô
- Dịch vụ cung cấp: Map Server cung cấp một dịch vụ để các node khác yêu cầu bản đồ Dịch vụ này có tên là "static_map" và được đăng ký trong ROS Master để các node có thể tìm thấy và gửi yêu cầu Khi một node yêu cầu bản đồ, Map Server trả về bản đồ được lưu trữ trong bộ nhớ
- Lưu trữ bản đồ: Bản đồ được lưu trữ trong Map Server có thể được tạo ra từ một tệp tin ở định dạng bản đồ hoặc được truyền trực tiếp từ các công cụ xây dựng bản đồ Bạn có thể chỉ định đường dẫn của tệp tin bản đồ trong tham số khởi chạy của Map Server
- Truy cập bản đồ: Các node khác trong hệ thống có thể truy cập bản đồ thông qua giao thức dịch vụ Bằng cách gửi yêu cầu "static_map" đến Map Server, các node có thể nhận được bản đồ dưới dạng thông điệp ROS như OccupancyGrid hoặc Costmap.
Xây dựng bản đồ
2.5.1 Bản đồ môi trường tĩnh:
Lập bản đồ môi trường là một khía cạnh quan trọng trong hệ thống điều hướng và điều khiển robot tự động Nhiệm vụ của lập bản đồ môi trường là xây dựng một biểu diễn không gian của môi trường xung quanh robot, cho phép robot nhận biết và tương tác với môi trường đó
Hình 2 7: SLAM 2D xây dựng bản đồ
Gmapping là một package trong ROS được sử dụng để xây dựng bản đồ 2D tĩnh từ dữ liệu odometry (vị trí và hướng di chuyển của robot) và cảm biến laser Package này sử dụng thuật toán SLAM (Simultaneous Localization and Mapping) để ước tính vị trí của robot và xây dựng bản đồ môi trường
Gmapping hoạt động dựa trên một số giả định quan trọng Đầu tiên, robot được giả định di chuyển trong một môi trường 2D và có thể di chuyển tự do trong không gian Thứ hai, cảm biến laser được gắn trên robot và cung cấp thông tin về khoảng cách từ robot đến các vật thể trong môi trường xung quanh
Quá trình xây dựng bản đồ trong gmapping bao gồm các bước:
1/ Tiếp nhận dữ liệu odometry và cảm biến laser từ robot
2/ Xử lý dữ liệu laser để lấy thông tin về khoảng cách từ robot đến các vật thể xung quanh
3/ Tính toán và cập nhật bản đồ xác suất (occupancy grid) dựa trên thông tin từ cảm biến laser và odometry
4/ Ước tính vị trí và hướng di chuyển của robot bằng cách so sánh dữ liệu laser thực tế với bản đồ đã xây dựng
5/ Lặp lại các bước trên để tiếp tục cập nhật bản đồ và ước tính vị trí của robot
Kết quả cuối cùng là một bản đồ 2D hiển thị các vật thể trong môi trường xung quanh robot Bản đồ này có thể được sử dụng trong các ứng dụng điều hướng để định vị robot và tránh vật cản trong quá trình di chuyển
2.5.2 Bản đồ chi phí (Costmap):
Costmap trong ROS là một thành phần quan trọng của gói "navigation" và được sử dụng để biểu diễn thông tin về chi phí (cost) của các ô trong môi trường Costmap giúp robot hiểu được thông tin về vật cản, vùng trống và các ràng buộc di chuyển trong môi trường xung quanh nó Dựa trên costmap, robot có thể tính toán đường đi và lựa chọn các hành động phù hợp để tránh vật cản và đạt được mục tiêu di chuyển
Costmap trong ROS được cung cấp dưới dạng một bản đồ hai chiều, thường là một lưới ô vuông (grid) có kích thước xác định trước Mỗi ô trong costmap biểu diễn một phần của môi trường và chứa thông tin về cost của ô đó Cost có thể được sử dụng để đại diện cho các yếu tố như vật cản, mức độ an toàn, khả năng di chuyển, độ dốc, vùng cấm, và nhiều yếu tố khác phụ thuộc vào ứng dụng cụ thể
Thông thường, costmap được xây dựng bằng cách tính toán cost từ dữ liệu cảm biến như laser, camera hoặc lidar Dữ liệu từ các cảm biến này được sử dụng để phát hiện và phân loại các vật cản trong môi trường Costmap cũng có thể được cập nhật dựa trên thông tin từ odometry (vị trí và tốc độ di chuyển của robot) để đảm bảo rằng costmap phản ánh được sự thay đổi của môi trường theo thời gian
Hình 2 8: Bản đồ chi phí 2D
Costmap thường được chia thành hai loại: global costmap và local costmap Global costmap có kích thước lớn hơn và thường được sử dụng để tính toán đường đi toàn cục, trong khi local costmap có kích thước nhỏ hơn và sử dụng để tính toán đường đi tại mức địa phương
Hình 2 9: Các lớp trong Costmap
Lạm phát trong Costmap là quá trình lan truyền các giá trị chi phí ra khỏi các ô bị chiếm dụng giảm dần theo khoảng cách Theo hình trên, có 5 ký hiệu cụ thể cho các giá trị bản đồ chi phí:
- Chi phí "Lethal": có nghĩa là có một chướng ngại vật (không gian làm việc) thực tế trong một ô Vì vậy, nếu trung tâm của robot nằm trong ô đó, rõ ràng là robot sẽ va chạm
- Chi phí "Inscribed": có nghĩa là một ô nhỏ hơn bán kính được ghi của rô-bốt tính từ chướng ngại vật thực tế Vì vậy, robot chắc chắn sẽ va chạm với một chướng ngại vật nào đó nếu trung tâm của robot nằm trong một ô bằng hoặc cao hơn chi phí đã ghi
- Chi phí "Possibly circumscribed": tương tự như "Inscribed", nhưng sử dụng bán kính được giới hạn của rô-bốt làm khoảng cách giới hạn Do đó, nếu trung tâm của robot nằm trong một ô bằng hoặc cao hơn giá trị này, thì việc nó có va chạm với chướng ngại vật hay không phụ thuộc vào hướng của robot Chúng tôi sử dụng thuật ngữ "có thể" bởi vì nó có thể không thực sự là một ô chướng ngại vật, mà là một sở thích nào đó của người dùng, đưa giá trị chi phí cụ thể đó vào bản đồ
- Chi phí "Freespace": được giả định bằng 0 và điều đó có nghĩa là không có gì có thể ngăn rô-bốt đi đến đó
- Chi phí "Unknown": có nghĩa là không có thông tin về một ô nhất định Người dùng bản đồ chi phí có thể giải thích điều này khi họ thấy phù hợp
Trong ROS, bản đồ chi phí (costmap) được tổ chức thành các lớp khác nhau để quản lý thông tin về môi trường và tính toán các giá trị chi phí tại từng vị trí trong bản đồ Dưới đây là một số lớp quan trọng trong costmap:
- Layered Costmap: Lớp này là lớp chính quản lý các lớp costmap khác
Nó duy trì một danh sách các lớp con và quản lý việc cập nhật và tính toán costmap chung từ các lớp con
- Costmap2D: Đây là lớp cơ bản của costmap Nó duy trì một lưới 2D của các ô (cell) trong bản đồ và gán các giá trị chi phí cho mỗi ô Các lớp costmap khác (như StaticLayer và ObstacleLayer) cung cấp thông tin chi phí cho lớp này
Giới thiệu về công nghệ LiDAR
Công nghệ LiDAR (Light Detection and Ranging) là một công nghệ sử dụng tia laser để đo khoảng cách và tạo bản đồ môi trường Nó đã trở thành một công cụ quan trọng trong nhiều lĩnh vực như robot tự động hóa, xe tự lái, bản đồ hóa môi trường, nghiên cứu địa chất, và nhiều ứng dụng khác
Công nghệ LiDAR hoạt động bằng cách phát ra tia laser từ một nguồn laser và sau đó đo thời gian mà tia laser phản xạ từ các vật thể trong môi trường trở về lại cảm biến Thông qua việc tính toán thời gian bay và đoạn đường di chuyển của tia laser, cảm biến LiDAR có thể xác định khoảng cách và hình dạng của các vật thể xung quanh Cảm biến LiDAR thường được trang bị với hàng loạt diod laser và bộ thu sóng quang học để tạo ra một tia laser phân tán hoặc quét trên một khu vực rộng hơn Khi tia laser phản xạ từ các vật thể trong môi trường, bộ thu sóng quang học ghi nhận dữ liệu về thời gian và cường độ của tia phản xạ Dữ liệu này được sử dụng để tạo ra các điểm dữ liệu 3D, gọi là điểm điểm LiDAR, cung cấp thông tin về hình dạng và cấu trúc của môi trường
Hình 2 10: Công nghệ Lidar được tích hợp trên xe
Công nghệ LiDAR có một số lợi ích quan trọng Đầu tiên, nó cho phép xác định khoảng cách và hình dạng của các vật thể trong môi trường một cách chính xác và nhanh chóng Nó cũng có thể hoạt động trong mọi điều kiện ánh sáng, bao gồm cả ban đêm và trong điều kiện thời tiết xấu Ngoài ra, công nghệ LiDAR có khả năng tạo ra các bản đồ 3D chi tiết với độ phân giải cao, cung cấp thông tin quan trọng cho các ứng dụng như định vị, điều hướng và phân loại vật thể
Trong những năm gần đây, công nghệ LiDAR đã được phát triển và tiến hóa mạnh mẽ, với sự xuất hiện của các cảm biến LiDAR miniaturized và giá cả phải chăng hơn Điều này đã tạo điều kiện thuận lợi cho việc ứng dụng LiDAR trong nhiều lĩnh vực và đóng góp vào sự phát triển của các công nghệ như robot tự động hóa và xe tự lái
Hình 2 11: Cảm biến Lidar tích hợp vào robot hút bụi
Cảm biến LiDAR bao gồm các thành phần chính sau đây:
- Laser: Cảm biến LiDAR sử dụng một nguồn tia laser để phát ra các tia ánh sáng laser Laser có thể hoạt động ở các tần số khác nhau, như laser nhìn thấy (visible laser) hoặc laser hồng ngoại (infrared laser)
- Bộ thu: Bộ thu trong cảm biến LiDAR nhận và ghi lại tia laser phản chiếu từ các đối tượng trong môi trường Bộ thu có thể sử dụng các cảm biến quang học như APD (Avalanche Photodiode) hoặc PMT (Photomultiplier Tube) để chuyển đổi tín hiệu ánh sáng thành tín hiệu điện
- Điện tử xử lý: Cảm biến LiDAR có một bộ xử lý điện tử để xử lý tín hiệu từ bộ thu Bộ xử lý có nhiệm vụ tính toán thời gian bay và khoảng cách của tia laser dựa trên thời gian mà tia laser mất để quay lại sau khi phản chiếu từ các đối tượng
- Gương quay (Scanner): Cảm biến LiDAR có thể có một gương quay (scanner) để quét tia laser theo nhiều hướng khác nhau Gương quay giúp cảm biến thu thập thông tin không gian 3D bằng cách quét tia laser qua một phạm vi góc rộng
- Bộ nhớ và giao tiếp: Một số cảm biến LiDAR có bộ nhớ tích hợp để lưu trữ dữ liệu từ quá trình quét Họ cũng có khả năng giao tiếp với các thiết bị ngoại vi khác như máy tính hoặc thiết bị di động để truyền dữ liệu
- Vỏ bảo vệ: Cảm biến LiDAR thường được đặt trong một vỏ bảo vệ để bảo vệ các thành phần bên trong khỏi các yếu tố môi trường bên ngoài và đảm bảo hoạt động ổn định
Hình 2 12: Navigation ROS 2D Navigation Stack là một thành phần quan trọng trong ROS được sử dụng để điều hướng robot trong một môi trường 2 chiều Nó cung cấp một loạt các công cụ và
22 thuật toán để robot có thể xác định vị trí, xây dựng bản đồ và tính toán đường đi an toàn từ vị trí hiện tại đến mục tiêu Cấu trúc của 2D Navigation Stack gồm các thành phần chính sau:
- Laser Scanner: Một laser scanner như lidar được sử dụng để thu thập dữ liệu về môi trường xung quanh robot Nó tạo ra các điểm dữ liệu laser (laser scans) để đo khoảng cách và xác định vật cản trong môi trường
- Localization (Định vị): Định vị là quá trình xác định vị trí của robot trong bản đồ Trong 2D Navigation Stack, một phương pháp phổ biến để định vị là sử dụng particle filter (bộ lọc hạt) Particle filter sử dụng thông tin từ laser scans và bản đồ để ước lượng vị trí hiện tại của robot
- Mapping (Xây dựng bản đồ): Xây dựng bản đồ trong 2D Navigation Stack dựa trên dữ liệu từ laser scanner và robot's odometry (đo vị trí và hướng di chuyển của robot) Các gói phần mềm như gmapping hay cartographer được sử dụng để tạo và cập nhật bản đồ dựa trên dữ liệu thu thập được
Lập kế hoạch đường đi
Trong ROS, Global Planner là một phần của 2D Navigation Stack (ngăn xếp điều hướng 2D) và được sử dụng để tính toán đường đi toàn cầu từ một điểm bắt đầu đến một điểm đích trên một bản đồ
Hình 2 13: Tính toán trong thuật toán Dijkstra
Global Planner trong ROS có các chức năng chính sau:
- Tính toán đường đi toàn cầu: Global Planner chịu trách nhiệm tính toán đường đi toàn cầu từ một điểm xuất phát đến một điểm đích trên bản đồ Nó sử dụng các thuật toán tìm đường đi như thuật toán Dijkstra, thuật toán A* (A-star), hoặc thuật toán D* (D-star) để tìm kiếm đường đi tối ưu dựa trên thông tin về trạng thái môi trường và ràng buộc điều hướng
- Xử lý thông tin bản đồ: Global Planner nhận thông tin về bản đồ môi trường và sử dụng nó để xác định các đặc điểm quan trọng như vị trí và hình dạng của các vật cản, khu vực cấm, hoặc các thông tin khác có liên quan đến quy hoạch đường đi
- Áp dụng ràng buộc và chiến lược điều hướng: Global Planner cũng có khả năng áp dụng các ràng buộc và chiến lược điều hướng vào quá trình tính toán đường đi Ví dụ, nó có thể xem xét các yêu cầu như tránh vật cản, ưu tiên đường rộng hơn, tránh khu vực nguy hiểm, hay tuân thủ các ràng buộc điều hướng khác
- Tối ưu hóa đường đi: Global Planner có mục tiêu tìm kiếm đường đi tối ưu dựa trên một số tiêu chí như độ dài đường đi, thời gian di chuyển, tiêu thụ năng lượng, hoặc các yếu tố khác Nó cố gắng tạo ra đường đi ngắn nhất hoặc tối ưu nhất dựa trên tiêu chí được xác định
- Đồng bộ hóa với Local Planner: Global Planner tạo ra lộ trình toàn cầu và truyền nó cho Local Planner để điều khiển chuyển động của robot
Nó phải đảm bảo rằng lộ trình đã tính toán sẽ được robot tuân thủ và di chuyển an toàn và hiệu quả trên môi trường thực tế
Thuật toán Dijkstra là một thuật toán tìm kiếm đường đi ngắn nhất trong đồ thị có trọng số không âm từ một đỉnh xuất phát đến các đỉnh còn lại trong đồ thị Thuật toán Dijkstra có thể được mô tả bằng các bước sau:
- Khởi tạo: Đặt đỉnh xuất phát là đỉnh hiện tại và gán giá trị 0 cho nó Đối với tất cả các đỉnh còn lại, gán một giá trị vô cùng lớn (vô cùng)
- Lặp cho đến khi tất cả các đỉnh đã được xét:
Tìm đỉnh với giá trị nhãn nhỏ nhất (đỉnh hiện tại) trong các đỉnh chưa xét
Đánh dấu đỉnh hiện tại là đã xét
Trong quá trình duyệt qua các đỉnh kề của đỉnh hiện tại, ta cập nhật giá trị nhãn của các đỉnh kề theo công thức sau:
Nếu giá trị nhãn hiện tại của đỉnh kề lớn hơn giá trị nhãn của đỉnh hiện tại cộng với trọng số của cạnh nối giữa hai đỉnh, ta cập nhật giá trị nhãn của đỉnh kề bằng giá trị nhãn mới
- Khi tất cả các đỉnh đã được xét hoặc giá trị nhãn của đỉnh đích không thay đổi nữa, thuật toán Dijkstra kết thúc
Thuật toán Dijkstra sử dụng một cấu trúc dữ liệu là hàng đợi ưu tiên (priority queue) để lựa chọn đỉnh có giá trị nhãn nhỏ nhất trong mỗi bước lặp Hàng đợi ưu tiên được sắp xếp dựa trên giá trị nhãn của các đỉnh, cho phép ta luôn chọn đỉnh có đường đi tạm thời ngắn nhất để xét tiếp
Kết quả của thuật toán Dijkstra là tìm được đường đi ngắn nhất từ đỉnh xuất phát đến tất cả các đỉnh còn lại trong đồ thị có trọng số không âm Ngoài ra, thuật toán cũng có thể được sử dụng để tìm đường đi ngắn nhất từ đỉnh xuất phát đến một đỉnh đích cụ thể
Tuy nhiên, thuật toán Dijkstra không hoạt động đúng với các đồ thị có trọng số âm hoặc đồ thị có trọng số không âm nhưng có chu trình âm
Trong ROS, Local Planner là một thành phần quan trọng trong 2D Navigation Stack (ngăn xếp điều hướng 2D) và được sử dụng để điều khiển chuyển động của robot trong thời gian thực dựa trên lộ trình đã được tính toán từ Global Planner (lập trình viên toàn cục)
Local Planner nhận thông tin về lộ trình toàn cầu từ Global Planner và sử dụng các thuật toán và phương pháp điều khiển chuyển động để đảm bảo robot di chuyển an toàn và hiệu quả trong môi trường thực tế
Các chức năng chính của Local Planner bao gồm:
- Điều khiển chuyển động: Local Planner tính toán các tín hiệu điều khiển chuyển động như tốc độ và hướng di chuyển của robot để đảm bảo robot di chuyển trên lộ trình đã được tính toán một cách an toàn và nhất quán Các phương pháp điều khiển chuyển động có thể sử dụng trong Local Planner bao gồm điều khiển tuyến tính, điều khiển PID (Proportional-Integral-Derivative), hoặc các phương pháp điều khiển trạng thái
- Theo dõi môi trường: Local Planner liên tục theo dõi môi trường xung quanh robot để phát hiện và tránh vật cản hoặc các tình huống nguy hiểm
Nó sử dụng các thông tin từ các cảm biến như Lidar, camera, hoặc các cảm biến tiếp xúc để xác định khoảng cách, hình dạng và tốc độ di chuyển của các vật thể xung quanh robot
Giao thức kết nối
Giao thức ROS Master Protocol cho phép các nút trong ROS tìm và đăng ký thông tin với ROS Master ROS Master là một node quản lý trung tâm trong hệ thống ROS, chịu trách nhiệm về việc lưu trữ thông tin về các nút, topic, service và parameter
Giao tiếp giữa các nút và ROS Master sử dụng XML-RPC (Remote Procedure Call) Các nút có thể gửi yêu cầu đến ROS Master để đăng ký thông
27 tin của mình hoặc truy vấn thông tin từ ROS Master Thông tin này bao gồm tên của nút, danh sách các topic mà nút đăng ký hoặc đăng ký nhận, danh sách các dịch vụ mà nút cung cấp hoặc sử dụng
ROS Communication Protocol cho phép các nút trong ROS truyền dữ liệu giữa nhau thông qua các topic và dịch vụ ROS sử dụng giao thức dựa trên TCP/IP để truyền dữ liệu Giao thức này có hai biến thể chính:
- TCPROS: Đây là biến thể sử dụng giao thức TCP (Transmission Control Protocol) để truyền dữ liệu Nó cung cấp kết nối đáng tin cậy và đảm bảo dữ liệu được truyền đi và nhận về theo thứ tự
- UDPROS: Đây là biến thể sử dụng giao thức UDP (User Datagram Protocol) để truyền dữ liệu Nó cho phép truyền dữ liệu nhanh hơn vì không có sự đảm bảo về độ tin cậy và thứ tự của gói tin
Các topic trong ROS sử dụng mô hình publisher/subscriber, trong đó một nút gửi dữ liệu (publisher) và các nút khác nhận dữ liệu (subscriber) thông qua topic Các dữ liệu được gửi qua giao thức ROS Communication Protocol và các nút có thể truyền dữ liệu theo thời gian thực
Các dịch vụ trong ROS sử dụng mô hình client/server, trong đó một nút yêu cầu dịch vụ (client) từ một nút khác cung cấp dịch vụ (server) Dữ liệu của dịch vụ được truyền qua giao thức ROS Communication Protocol để trao đổi thông tin giữa client và server
Hình 2 15: Sơ đồ kết nối các khái niệm trong ROS
Giao tiếp UART (Universal Asynchronous Receiver-Transmitter) là một giao thức truyền dữ liệu tuần tự không đồng bộ được sử dụng phổ biến trong các ứng dụng điện tử Nó cho phép truyền dữ liệu bit theo thứ tự từ một thiết bị gửi (transmitter) tới một thiết bị nhận (receiver)
UART sử dụng hai chân truyền và nhận dữ liệu là TX (Transmit) và RX (Receive) để truyền dữ liệu giữa các thiết bị Giao tiếp UART không yêu cầu một tín hiệu đồng hồ chung, mà dữ liệu được truyền qua một chuỗi các bit với một tốc độ cố định (baud rate) Điều này đảm bảo rằng các thiết bị truyền và nhận có thể đồng bộ và hiểu được dữ liệu được truyền đi Để thực hiện giao tiếp UART giữa hai thiết bị, bạn cần đảm bảo các thiết bị có các cấu hình giao tiếp tương thích nhau, bao gồm:
- Baud rate: Tốc độ truyền dữ liệu giữa hai thiết bị phải khớp nhau Baud rate định nghĩa số lượng bit dữ liệu truyền đi trong một giây Ví dụ: 9600,
- Số bit dữ liệu (Data bits): Xác định số bit dữ liệu được truyền trong mỗi khung dữ liệu Thông thường, 8 bit dữ liệu được sử dụng
- Parity (Kiểm tra lỗi): Kiểm tra lỗi để phát hiện các lỗi truyền dữ liệu
Có thể là không có kiểm tra lỗi (None), kiểm tra lỗi chẵn (Even) hoặc kiểm tra lỗi lẻ (Odd)
- Stop bits (Bit dừng): Xác định số bit dừng được sử dụng sau khi truyền dữ liệu Thông thường, 1 bit dừng được sử dụng
Khi đã cấu hình UART cho hai thiết bị, bạn có thể gửi và nhận dữ liệu thông qua chân TX và RX tương ứng Mỗi byte dữ liệu được truyền theo thứ tự từ bit thấp đến bit cao (LSB first) và các byte được gửi qua UART một cách tuần tự
Giao tiếp UART thường được sử dụng để truyền dữ liệu tương đối đơn giản giữa các thiết bị, ví dụ: truyền thông tin cảm biến, điều khiển thiết bị, giao tiếp giữa vi điều khiển và máy tính, và nhiều ứng dụng khác
Rosserial là một giao thức trong ROS (Robot Operating System) cho phép truyền thông giữa các thiết bị nhúng (embedded devices) như Arduino và Raspberry
Pi với máy tính chủ (host computer) chạy ROS Nó cung cấp một cách để giao tiếp và điều khiển các thiết bị nhúng từ trong môi trường ROS
Hình 2 17: Sơ đồ tương tác Rosserial giữa máy chủ và các vi điều khiển
Dưới đây là mô tả chi tiết về Rosserial trong ROS:
- Kiến trúc và cấu trúc: Rosserial chia thành hai phần chính là phần ROS Client và phần ROS Server Phần ROS Client là mã chạy trên thiết bị nhúng (như Arduino) và phần ROS Server chạy trên máy tính chủ ROS
- Giao tiếp nền tảng độc lập: Rosserial sử dụng giao thức giao tiếp độc lập nền tảng, chẳng hạn như UART (Universal Asynchronous Receiver- Transmitter), để truyền thông tin giữa các thiết bị nhúng và máy tính chủ ROS Điều này cho phép Rosserial hoạt động trên nhiều nền tảng nhúng khác nhau
- Chức năng chính: Rosserial cho phép gửi và nhận các tin nhắn ROS giữa thiết bị nhúng và máy tính chủ ROS Tin nhắn ROS là cách truyền thông tin giữa các phần ROS khác nhau như các cảm biến, trạng thái robot, và lệnh điều khiển
Thuật toán PID
PID (Proportional-Integral-Derivative) là một thuật toán phản hồi điều khiển phổ biến được sử dụng để điều khiển và điều chỉnh các hệ thống điều khiển tự động Nó được sử dụng để điều chỉnh một biến điều khiển dựa trên sự so sánh giữa giá trị hiện tại của biến điều khiển và giá trị mục tiêu
Thuật toán PID tính toán ra một tín hiệu điều khiển dựa trên ba thành phần chính:
- Thành phần tỷ lệ tính toán tín hiệu điều khiển dựa trên sự chênh lệch giữa giá trị hiện tại của biến điều khiển và giá trị mục tiêu
- Nếu giá trị chênh lệch lớn, tín hiệu điều khiển tăng lên một mức đáng kể
- Thành phần tích phân tính toán tín hiệu điều khiển dựa trên tổng lượng lỗi tích phân trong quá trình điều khiển
- Thành phần này giúp khắc phục lỗi tạm thời và giúp đạt được độ chính xác dài hạn
- Nếu tổng lượng lỗi tích phân lớn, tín hiệu điều khiển sẽ tăng hoặc giảm theo hướng phù hợp
- Thành phần đạo hàm tính toán tín hiệu điều khiển dựa trên tốc độ thay đổi của giá trị biến điều khiển
- Thành phần này giúp dự đoán xu hướng thay đổi của biến điều khiển và ổn định hệ thống
- Nếu tốc độ thay đổi lớn, tín hiệu điều khiển sẽ được điều chỉnh để hạn chế đột biến
Hình 2 18: Mô hình thuật toán PID
Thuật toán PID tính toán tổng cộng của ba thành phần trên để tạo ra tín hiệu điều khiển cuối cùng Công thức toàn bộ của thuật toán PID có thể được biểu diễn như sau:
- u(t) là tín hiệu điều khiển cuối cùng được đưa vào hệ thống
- Kp, Ki và Kd là các hệ số điều chỉnh, được sử dụng để điều chỉnh đáp ứng của hệ thống PID Chúng được xác định thông qua thử nghiệm và tinh chỉnh để đạt được hiệu suất tốt nhất cho hệ thống cụ thể
- e(t) là sự chênh lệch giữa giá trị hiện tại của biến điều khiển và giá trị mục tiêu.
Nhận diện giọng nói
Nhận diện giọng nói là quá trình xử lý và chuyển đổi giọng nói thành dạng văn bản hoặc các đặc trưng số học có thể được sử dụng để nhận dạng và hiểu nội dung của giọng nói Nó là một lĩnh vực trong lĩnh vực xử lý tiếng nói và trí tuệ nhân tạo
Quá trình nhận diện giọng nói có thể được chia thành các bước sau:
- Ghi âm: Đầu tiên, âm thanh của giọng nói được ghi lại bằng thiết bị ghi âm hoặc các cảm biến âm thanh
- Tiền xử lý: Dữ liệu âm thanh ghi lại thường được tiền xử lý để loại bỏ nhiễu và cải thiện chất lượng tín hiệu âm thanh Các bước tiền xử lý có thể bao gồm lọc nhiễu, cân bằng âm lượng và cắt bỏ tiếng ồn không mong muốn
- Rút trích đặc trưng: Trong bước này, từ tín hiệu âm thanh đã được tiền xử lý, các đặc trưng quan trọng của giọng nói được trích xuất Các đặc trưng
32 thông thường bao gồm biên độ, tần số, đặc trưng thời gian và các thông số khác để mô tả âm thanh
- Mô hình hóa: Đặc trưng giọng nói sau khi được trích xuất được đưa vào các mô hình học máy hoặc mạng nơ-ron nhân tạo để tạo ra một mô hình phân loại Các mô hình này được huấn luyện trước để nhận dạng các mẫu giọng nói khác nhau
- Nhận diện và phân loại: Cuối cùng, dữ liệu đặc trưng từ giọng nói được đưa vào mô hình đã huấn luyện để nhận dạng và phân loại nội dung của giọng nói Kết quả của quá trình này có thể là văn bản hoặc các loại đầu ra khác tùy thuộc vào mục đích sử dụng
Có nhiều phương pháp và thuật toán được sử dụng trong quá trình nhận diện giọng nói, bao gồm phân loại dựa trên k-nearest neighbors, mạng nơ-ron hồi quy (RNN), mạng nơ-ron tích chập (CNN), và các thuật toán học sâu khác như mạng nơ- ron tái cấu trúc (LSTM) và mạng nơ-ron biến thể (GRU) Các phương pháp này được kết hợp với các kỹ thuật tiền xử lý và xử lý ngôn ngữ tự nhiên để cải thiện độ chính xác và hiệu suất của hệ thống nhận diện giọng nói
Thư viện SpeechRecognition là một thư viện phổ biến trong Python được sử dụng để nhận diện giọng nói Nó cung cấp một giao diện đơn giản để tương tác với các công cụ nhận diện giọng nói hàng đầu như Google Speech Recognition, Sphinx, IBM Speech to Text và nhiều công cụ khác Các bước hoạt động:
- Ghi âm âm thanh: Trước khi nhận diện giọng nói, bạn cần ghi âm âm thanh từ nguồn đầu vào Speech Recognition hỗ trợ các phương pháp ghi âm âm thanh từ microphone hoặc từ tệp âm thanh có sẵn
- Khởi tạo đối tượng Recognizer: Đối tượng Recognizer trong Speech Recognition đại diện cho một phiên nhận diện giọng nói Bạn cần khởi tạo một đối tượng Recognizer để bắt đầu quá trình nhận diện giọng nói
- Xác định nguồn âm thanh: Bạn cần xác định nguồn âm thanh cho quá trình nhận diện giọng nói Đối với microphone, bạn có thể sử dụng recognizer.listen() để lắng nghe âm thanh từ microphone Đối với tệp âm thanh, bạn có thể sử dụng recognizer.record() để ghi âm từ tệp âm thanh
- Nhận diện giọng nói: Sau khi có nguồn âm thanh, bạn có thể sử dụng các phương thức của đối tượng Recognizer để nhận diện giọng
33 nói Ví dụ, recognizer recognize_google() sử dụng dịch vụ nhận diện giọng nói của Google để trích xuất văn bản từ giọng nói
GTTS (Google Text-to-Speech) là một thư viện mã nguồn mở cho phép chuyển đổi văn bản thành giọng nói bằng sử dụng dịch vụ Text-to-Speech (TTS) của Google GTTS cung cấp một giao diện đơn giản để tạo ra các tệp âm thanh từ văn bản bằng cách sử dụng giọng đọc của Google Các tính năng của thư viện:
- Tạo âm thanh từ văn bản: GTTS cho phép bạn tạo âm thanh từ một đoạn văn bản bằng cách sử dụng dịch vụ Text-to-Speech của Google Bạn chỉ cần cung cấp văn bản đầu vào và GTTS sẽ tạo ra một tệp âm thanh chứa nội dung đọc của văn bản đó
- Ngôn ngữ và giọng đọc: GTTS hỗ trợ nhiều ngôn ngữ và giọng đọc khác nhau Bạn có thể chọn ngôn ngữ và giọng đọc mong muốn để tạo âm thanh phù hợp với nhu cầu của ứng dụng của bạn
- Định dạng tệp âm thanh: GTTS cho phép bạn tạo âm thanh dưới dạng các định dạng tệp âm thanh phổ biến như MP3, WAV và OGG Điều này cho phép bạn lưu trữ và phát lại âm thanh theo ý muốn
- Độ trễ và giao diện tiện lợi: GTTS cung cấp khả năng kiểm soát độ trễ giữa các đoạn văn bản và cung cấp một giao diện tiện lợi để điều khiển việc tạo âm thanh, bao gồm cả tùy chọn lưu trữ và phát lại âm thanh từ bộ nhớ đệm
MySQL – Cơ sở dữ liệu
MySQL là một hệ quản trị cơ sở dữ liệu phổ biến, mà nguồn mở dựa trên ngôn ngữ truy vấn cấu trúc SQL Nó được sử dụng rộng rãi trong các ứng dụng về Web hay hệ thống quản lý cơ sở dữ liệu
Một vài khái niệm cơ bản về MySQL bao gồm:
- Cơ sở dữ liệu (Database): một tập hợp các dữ liệu được tổ chức và lưu trữ trong MySQL Mỗi cơ sở dữ liệu có thể chứa nhiều bảng
- Bảng (Table): được sử dụng để tổ chức và lưu trữ dữ liệu trong các hàng(rows) và cột(columns) Mỗi bảng có một tên duy nhất
- Trường (Field): đại diện cho một dữ liệu cụ thể trong một bảng Mỗi trường có một kiểu xác nhận dữ liệu, như số nguyên, chuỗi ký tự, ngày tháng và nhiều dữ liệu khác
- Truy vấn (Query): sử dụng ngôn ngữ truy vấn cấu trúc (SQL) để tương tác với cơ sở dữ liệu MySQL Truy vấn cho phép bạn tạo, đọc, cập nhật và xóa dữ liệu từ cơ sở dữ liệu
- Khóa chính (Primary Key): là một trường duy nhất trong một bảng, được sử dụng để xác định một cách duy nhất từng hàng trong bảng
MySQL cung cấp tính năng mạnh mẽ và linh hoạt cho việc quản lý cơ sở dữ liệu
Nó hỗ trợ các tính năng như giao dịch (transaction) để đảm bảo tính toàn vẹn và đồng nhất của dữ liệu, khóa đồng thời (concurrency control) để xử lý truy cập đồng thời từ nhiều người dùng, và bảo mật dữ liệu.
Các phần mềm hỗ trợ
Một số điểm nổi bật của phần mềm:
- Thiết kế giao diện trực quan: Qt Designer cho phép bạn thiết kế giao diện người dùng của ứng dụng một cách trực quan Bạn có thể kéo và thả các thành phần giao diện như nút, hộp văn bản, danh sách và cửa sổ vào bảng điều khiển chính
- Hierarchy của đối tượng: Trong Qt Designer, các thành phần giao diện được tổ chức trong một cấu trúc cây phân cấp, còn được gọi là hierarchy của đối tượng Bạn có thể xem và chỉnh sửa các thuộc tính và cài đặt của các đối tượng trong cấu trúc cây này
- Signals và Slots: Qt Designer hỗ trợ kết nối tín hiệu (signals) và khe (slots) của các đối tượng giao diện người dùng Điều này cho phép bạn thiết lập các phản ứng và xử lý sự kiện cho các hành động của người dùng, chẳng hạn như nhấp chuột vào một nút hay nhập liệu vào một hộp văn bản
- Tuỳ chỉnh giao diện: Qt Designer cho phép bạn tùy chỉnh giao diện người dùng bằng cách thay đổi thuộc tính và kiểu dáng của các đối tượng Bạn có thể chỉnh sửa văn bản, màu sắc, cỡ chữ, định dạng và nhiều thuộc tính khác để phù hợp với nhu cầu của ứng dụng của bạn
- Xuất mã: Qt Designer có khả năng xuất mã nguồn tự động dựa trên thiết kế giao diện của bạn Bạn có thể xuất mã nguồn C++ hoặc Python để sử dụng trong quá trình phát triển ứng dụng của mình
Thư viện PyQt5 - lập trình giao diện:
PyQt5 là một thư viện Python phổ biến được sử dụng để phát triển ứng dụng đồ họa giao diện người dùng hay còn gọi là GUI Nó cung cấp các công cụ và tài liệu để tạo ra các ứng dụng đa nền tảng có giao diện đồ họa chuyên nghiệp Dựa trên Qt, một framework phát triển ứng dụng mạnh mẽ, có thể lập trình và tạo ra giao diện GUI trên nhiều nền tảng như Window, Linux, macOS… PyQt5 còn kết hợp vô cùng mạnh mẽ với ngôn ngữ Python để lập trình và cho ra những giao diện phức tạp Ngoài ra, PyQt5 còn đem lại cho lập trình viên sự thuận tiện và khả năng tùy chỉnh cao khi xây dựng các ứng dụng đa nền tảng
PyQt5 cung cấp tài liệu đầy đủ và hướng dẫn chi tiết để học và sử dụng Bạn có thể tạo các ứng dụng PyQt5 bằng cách sử dụng các công cụ như Qt Designer để thiết kế giao diện và sử dụng mã Python để điều khiển hành vi của ứng dụng
RViz (ROS Visualization) là một công cụ hiển thị 3D mạnh mẽ trong ROS (Robot Operating System) được sử dụng để hiển thị và tương tác với dữ liệu robot RViz cung cấp một giao diện đồ họa để xem các thông tin như các khung tọa độ (frames), mô hình robot, đám mây điểm (point clouds), dữ liệu cảm biến và nhiều hơn nữa
Hình 2 19: Giao diện tổng quát RViz
Dưới đây là một số tính năng chính của RViz:
- Hiển thị khung tọa độ (frames): RViz cho phép bạn hiển thị các khung tọa độ trong hệ thống ROS, bao gồm khung tọa độ toàn cầu (global), khung tọa độ cục bộ (local) và các khung tọa độ tùy chỉnh khác Bạn có thể xem và tương tác với các khung tọa độ này để theo dõi vị trí và hướng của robot trong không gian
- Hiển thị mô hình robot: RViz cho phép bạn hiển thị mô hình robot của mình trong không gian 3D Bạn có thể tải các mô hình robot từ các tệp URDF (Unified Robot Description Format) và hiển thị chúng với các liên kết, khung tọa độ và các chi tiết khác Điều này giúp bạn kiểm tra và xem trước cách robot của bạn sẽ hoạt động trong môi trường thực tế
- Hiển thị dữ liệu cảm biến: RViz cho phép bạn hiển thị dữ liệu cảm biến như hình ảnh từ camera, đám mây điểm từ cảm biến Lidar, và các dữ liệu khác như tia laser và siêu âm Bạn có thể xem trực tiếp các dữ liệu này trong không gian 3D để theo dõi và phân tích các thông tin từ các cảm biến của robot
- Hiển thị đám mây điểm (point clouds): RViz hỗ trợ hiển thị và tương tác với đám mây điểm, cho phép bạn xem các điểm 3D được thu thập từ cảm biến như Lidar Bạn có thể điều chỉnh màu sắc và kích thước của các điểm, làm việc với các công cụ như slicing (cắt lát), filtering (lọc) và segmentation (phân đoạn) để phân tích dữ liệu đám mây điểm
- Giao tiếp tương tác: RViz cung cấp các công cụ tương tác để tương tác với dữ liệu robot Bạn có thể di chuyển, quay và thu phóng không gian hiển thị, chọn các đối tượng trong không gian 3D và thay đổi thuộc tính của chúng Bạn cũng có thể tạo các công cụ tương tác tùy chỉnh thông qua các plugin
RViz là một công cụ quan trọng trong quá trình phát triển và kiểm tra robot trong ROS Nó cho phép bạn trực quan hóa các thông tin quan trọng, giúp xác định sự hoạt động của robot và tương tác với dữ liệu robot một cách dễ dàng
SolidWorks là một phần mềm thiết kế 3D phổ biến và mạnh mẽ được sử dụng trong lĩnh vực kỹ thuật cơ khí Được phát triển bởi công ty Dassault Systèmes, SolidWorks cung cấp một loạt các công cụ và tính năng đáng tin cậy để tạo ra các mô hình 3D chính xác và chi tiết
THIẾT KẾ VÀ THI CÔNG HỆ THỐNG
Thiết kế sơ đồ khối hệ thống
Sơ đồ khối tổng quan về các thành phần cần có trong một hệ thống robot giao món trong nhà hàng như sau:
Hình 3 1: Sơ đồ khối tổng quát của hệ thống
Trong đó các mũi tên thể hiện sự truyền dữ liệu, kết nối giữa các khối.
Lựa chọn thiết bị cho hệ thống
Raspberry Pi 4 Model B là một bo mạch tích hợp mạnh mẽ với bộ vi xử lý quad-core Cortex-A72 64-bit và tốc độ xung nhịp lên đến 1.5GHz Nó cung cấp hiệu suất ấn tượng và khả năng xử lý đa nhiệm Với các tùy chọn bộ nhớ RAM từ 2GB đến 8GB, Raspberry Pi 4 có thể chạy các ứng dụng phức tạp một cách mượt mà Nó cũng hỗ trợ kết nối đa màn hình 4K và đi kèm với nhiều cổng kết nối đa dạng như USB, Ethernet, GPIO, Wi-Fi và Bluetooth tích hợp Raspberry Pi 4 cũng hỗ trợ nhiều hệ điều hành như Raspbian, Ubuntu và Windows 10 IoT Core và có cộng đồng hỗ trợ rộng lớn
Chúng ta có thể dùng một laptop hoặc mini PC làm bộ máy chủ trung tâm điều khiển và vận hành xe, nhưng có một số lí do khi sử dụng Raspberry Pi 4 thay thế để lắp đặt trên mô hình xe tự hành:
1/ Kích thước nhỏ gọn: Raspberry Pi 4 có kích thước nhỏ gọn hơn so với laptop hay mini PC, giúp tiết kiệm không gian và dễ dàng tích hợp vào mô hình
2/ Tiêu thụ điện năng thấp: Raspberry Pi 4 tiêu thụ điện năng thấp hơn so với laptop hay mini PC, giúp kéo dài thời gian hoạt động của nguồn điện và tăng tính di động cho mô hình xe tự hành
3/ Hiệu suất đáng kể: Mặc dù Raspberry Pi 4 có kích thước nhỏ và tiêu thụ điện năng thấp, nhưng nó vẫn cung cấp hiệu suất đáng kể Điều này cho phép xử lý và tính toán phức tạp trong quá trình tự hành
4/ Hỗ trợ đa nhiệm: Raspberry Pi 4 có khả năng chạy nhiều nhiệm vụ cùng một lúc, cho phép xử lý dữ liệu từ các cảm biến, thực hiện thuật toán điều khiển và giao tiếp với các thiết bị khác một cách linh hoạt
5/ Hỗ trợ ROS: Raspberry Pi 4 được hỗ trợ chính thức bởi ROS (Robot
Operating System), một hệ thống phần mềm phổ biến cho các ứng dụng robot Điều này giúp dễ dàng tích hợp và phát triển các chức năng tự hành trên mô hình xe sử dụng ROS
6/ Tiện ích và tính linh hoạt: Raspberry Pi 4 có thể được mở rộng và tùy chỉnh thông qua các giao tiếp I/O như GPIO, SPI, I2C, UART và USB Điều này cho phép kết nối và điều khiển các thiết bị và cảm biến bên ngoài một cách dễ dàng
Hình 3 2: Sơ đồ chi tiết mạch Raspberry Pi 4 Model B Bảng 3 1: Thông số kỹ thuật của Raspberry Pi 4 Model B
SoC (Bộ xử lý) Broadcom BCM2711 (tản kim loại)
Kiến trúc Cortex-A72 64-bit (ARMv8)
5V qua cổng USB Type C (lên tới 3A) 5V qua chân GPIO ( lên tới 3A) Power over Ethernet, cần có PoE HAT
Hình 3 3: Sơ đồ các chân GPIO
Arduino Mega là một board phát triển dựa trên nền tảng Arduino, được thiết kế để cung cấp nhiều chân GPIO và khả năng xử lý mạnh mẽ hơn so với các phiên bản Arduino khác Arduino Mega được trang bị vi xử lý ATmega2560 8-bit với tốc độ xung nhịp 16MHz và bộ nhớ flash 256KB, cho phép nạp và chạy các chương trình phức tạp Nó có 54 chân GPIO, trong đó 14 chân có khả năng PWM và 16 chân ADC, cho phép kết nối và điều khiển nhiều linh kiện và cảm biến khác nhau Arduino Mega cũng hỗ trợ giao tiếp UART, I2C và SPI, cho phép giao tiếp với các module và thiết bị khác
Với số lượng chân GPIO lớn, khả năng xử lý cao cùng với khả năng mở rộng là những lí do nên chọn Arduino Mega để vận hành điều khiển chuyển động của xe tự hành Arduino Mega có khả năng nhận tín hiệu từ các encoders (bộ mã hóa) của động cơ, từ đó xử lý và tính toán thông tin về vị trí, tốc độ và hướng di chuyển của xe Sau đó, Arduino Mega có thể xuất ra các tín hiệu điều khiển động cơ thông qua mạch cầu (H-bridge) để điều chỉnh tốc độ và hướng di chuyển của xe theo mong muốn
Hình 3 4: Sơ đồ mạch vi điều khiển Arduino Mega Bảng 3 2: Thông số kỹ thuật của Arduino Mega
Tính năng Thông số Điện áp hoạt động 5V
Số chân I/O 54 chân(15 chân PWM)
Số chân input analog 16 chân
Giao tiếp SPI 1 bộ(chân 50 - 53)
3.2.3 Động Cơ DC Servo JGB37-520: Động cơ giảm tốc là một loại động cơ được thiết kế đặc biệt để giảm tốc độ quay và tăng lực xoắn đầu ra Nó bao gồm một bộ truyền động bên trong, như hệ thống bánh răng, hệ trục vít-đai hoặc hệ truyền đai, để chuyển đổi tốc độ quay từ động cơ đầu vào sang tốc độ quay thấp hơn đồng thời tăng lực xoắn
Việc lựa chọn Động Cơ DC Servo JGB37-520 35rpm tích hợp encoder là một lựa chọn thông minh cho xe tự hành phục vụ trong nhà hàng Nó cung cấp định vị chính xác, điều khiển vận tốc linh hoạt, phản hồi thời gian thực và độ tin
43 cậy cao, đồng thời dễ tích hợp và sử dụng trong hệ thống tự động hoá xe tự hành Với lực kéo tối đa lên tới 35 kg so với dự tính khối lượng phần cứng mô hình khoảng 10-12 kg thì động cơ là lựa chọn phù hợp
Hình 3 5: Động cơ DC Servo JGB37-520
- Điện áp sử dụng: 12VDC
- Dòng chịu đựng tối đa khi có tải: 1A
- Tốc độ không tải: 35RPM
- Tốc độ chịu đựng tối đa khi có tải: 28RPM
- Lực kéo Moment định mức: 30KG.CM
- Lực léo Moment tối đa: 35KG.CM
Sơ đồ dây của động cơ:
- 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 3.3~5VDC
- M2: Dây cấp nguồn cho động cơ
Hình 3 6: Sơ đồ dây của động cơ và kích thước
Các tính năng nổi bật của bánh xe đa hướng Mecanum 96mm như sau: đa hướng di chuyển, khả năng chịu tải tốt phù hợp với mô hình, ổn định và độ bền, dễ dàng tích hợp vào khung hệ thống
Hình 3 7: Bánh xe Mecanum 96mm
3.2.5 Module Điều Khiển Động Cơ DC BTS7960:
Module điều khiển động cơ BTS7960 là một module công suất cao được sử dụng để điều khiển động cơ DC Nó cung cấp khả năng điều khiển mạnh mẽ và linh hoạt cho các ứng dụng đòi hỏi công suất lớn như robot, xe điều khiển từ xa, máy in 3D và các dự án tự động hóa khác
Hình 3 8: Module Điều Khiển Động Cơ DC BTS7960
Thiết kế sơ đồ nối dây hệ thống
Trước khi tiến hành thi công mô hình thực, ta cần vẽ chi tiết sơ đồ nối dây để có cái nhìn tổng quan về cách kết nối các linh kiện cũng như có sự chuẩn bị sẵn Sau khi nghiên cứu thông tin về các linh kiện cần thiết, về số chân, ý nghĩa và cách kết nối, nhóm đã thiết kế được sơ đồ sau:
Sơ đồ nối dây các thiết bị trong hệ thống được biểu diễn như hình sau:
Hình 3 17: Sơ đồ nối dây toàn bộ hệ thống
Thiết kế và thi công mô hình hệ thống
3.4.1 Thiết kế mô hình mô phỏng:
Sau khi có được thông tin về các linh kiện thiết bị cần có cùng với các thông số kích thước kỹ thuật, chúng ta cần phác thảo mô hình robot trên phần mềm SolidWorks để xem xét và đánh giá chất lượng hệ thống
Chất liệu dự tính sử dụng cho phần cứng hệ thống chủ yếu bao gồm nhôm định hình, mica tấm và nhựa in 3d các cơ cấu cần thiết Với tiêu chí đơn giản, trọng lượng thấp, độ bền cao, dễ dàng gia công, tháo lắp và sửa chữa cùng với giá thành hợp lí để hình thành được một mô hình thực tế có thể đáp ứng được yêu cầu di chuyển và ngoại hình phù hợp thì các vật liệu trên rất thích hợp để đưa vào sử dụng Ngoài ra còn có một vài vật liệu khác như foam xốp và giấy dán để trang trí cho robot thêm phần liền mạch và dễ nhìn
Đặc điểm của nhôm định hình:
- Nhôm định hình là một loại vật liệu công nghiệp phổ biến được sử dụng trong nhiều ngành và ứng dụng khác nhau Nó là một loại hợp kim nhôm có tính linh hoạt, dễ uốn cong và định hình thành các hình dạng và kích thước đa dạng Nhôm định hình có một số đặc tính vượt trội, giúp nó trở thành vật liệu lý tưởng cho nhiều mục đích
- Một trong những ưu điểm chính của nhôm định hình là khả năng nặng nhẹ Nhôm có khối lượng nhẹ hơn so với các kim loại khác như thép, đồng hay sắt, giúp giảm trọng lượng của các bộ phận và cấu trúc mà nó được sử dụng trong đồng thời tăng tính di động và dễ dàng trong quá trình vận chuyển và lắp đặt
- Ngoài ra, nhôm định hình cũng có khả năng chống ăn mòn tốt Nhôm tự tạo ra một lớp oxide tự nhiên khi tiếp xúc với không khí, tạo ra một lớp bảo vệ chống ăn mòn tự nhiên trên bề mặt Điều này làm cho nhôm định hình phù hợp với các ứng dụng yêu cầu độ bền và độ ổn định dài hạn trong môi trường khắc nghiệt như hóa chất, nước mặn hoặc nhiệt độ cao
- Một ưu điểm khác của nhôm định hình là tính linh hoạt trong việc định hình và gia công Nhôm có độ dẻo cao, có thể uốn cong, ép, đột, cắt và gia công thành các hình dạng phức tạp Điều này mang lại sự linh hoạt cho quá trình thiết kế và sản xuất, cho phép tạo ra các sản phẩm với độ chính xác cao và thiết kế tinh xảo
- Mica là một loại vật liệu phổ biến được sử dụng trong nhiều ngành công nghiệp và ứng dụng khác nhau Nó là một loại nhựa tổng hợp trong suốt, có khả năng chịu nhiệt, độ cứng và độ bền cao, và có tính năng tương tự như thủy tinh
- Một trong những ưu điểm quan trọng của mica là tính linh hoạt trong thiết kế và gia công Mica có thể được cắt, uốn cong và gia công thành các hình dạng phức tạp, cho phép tạo ra các sản phẩm tùy chỉnh và thiết kế độc đáo Điều này làm cho nó trở thành một lựa chọn phổ biến trong việc tạo ra các sản phẩm như bảng điều khiển, vỏ máy móc và linh kiện điện tử
Đặc điểm của nhựa in 3D:
- Nhựa in 3D là một loại vật liệu có tính chất đặc biệt được sử dụng rộng rãi trong công nghệ in 3D Được biết đến với sự đa dạng và tính linh hoạt, nhựa in 3D đã thay đổi cách chúng ta sản xuất và tạo ra các đối tượng vật lý
- Với công nghệ in 3D, nhựa in 3D được nung chảy và đưa vào các đầu phun nhỏ, sau đó định hình lớp trên lớp để tạo ra đối tượng 3D mong muốn Các loại nhựa in 3D khác nhau có các tính chất và đặc điểm riêng, cho phép chúng ta in ra các sản phẩm với độ chi tiết và chất lượng cao
- Một trong những ưu điểm quan trọng của nhựa in 3D là tính linh hoạt trong thiết kế và sản xuất Nhờ vào công nghệ in 3D, chúng ta có thể tạo ra các mô hình và sản phẩm có hình dạng phức tạp và chi tiết mà trước đây rất khó hoặc không thể làm được với các phương pháp truyền thống Từ các mô hình kiến trúc, mô phỏng y tế, các bộ phận máy móc đến các sản phẩm nghệ thuật, nhựa in 3D mang lại khả năng sáng tạo vô tận
- Nhựa in 3D cũng cho phép tạo ra các sản phẩm tùy chỉnh và cá nhân hóa Với khả năng in 3D theo yêu cầu, chúng ta có thể tạo ra các sản phẩm riêng biệt và độc đáo, từ mô hình tượng nhân vật, đồ trang sức, đồ chơi cho đến các bộ phận và phụ kiện cá nhân
Các chi tiết được thiết kế trên solidworks:
Hình 3 27: Gá che động cơ
Hình 3 29: Khung xe robot thiết kế bằng solidworks
Khung xe được sử dụng nhôm định hình 20x20, ke góc và nhựa in 3D để cấu tạo nên phần khung như hình… Phần thân xe dưới là nơi các thiết bị điện được nối dây như mạch cầu, động cơ, Arduino, Raspberry Pi 4, pin… Lidar được thiết kế đặt ở mặt trên để dễ dàng hoạt động cũng như né những vật thể cao Đối với mô hình này nhóm đã thiết kế ba khung nhôm ngang nơi đặt mâm để đồ ăn và thanh nhôm ngang trên cùng để màn hình, loa và mic Mẫu thiết kế được tham khảo từ các mô hình thực tế từ các nước đã phát triển về robot dịch vụ này
Hình 3 30: Áo ngoài robot thiết kế trong solidworks
Sau khi phần khung được định hình, các thiết bị điện được nối xong và hoạt động ổn định, phần dàn áo ngoài của robot được lên ý tưởng và thực hiện nhằm che đi sự thô cứng của những thanh nhôm Nhóm sử dụng mica, foam xốp và giấy dán để ốp lên phần khung xương Nhóm quyết định sử dụng màu đen vì màu đen dễ phối cũng như hài hòa hơn các màu nổi bật khác
Hình 3 31: Mô hình hoàn chỉnh robot thiết kế trong solidworks
Sau khi dàn áo ngoài được thiết kế xong, nhóm tiếp tục sử dụng các vật liệu mica và nhựa in 3D để hoàn thiện phần mâm để đồ ăn và gá đỡ màn hình, gá treo loa lên phần khung nhôm của robot Một bản thiết kế hoàn chỉnh của robot phục vụ được phác thảo trên Solidworks như hình … đã hoàn thành và sẵn sàng thi công cho mô hình thực tế
3.4.2 Thi công mô hình thực tế:
Sau khi hoàn thành thiết kế trên phần mềm mô phỏng, nhóm bắt đầu thi công phần cứng mô hình thực tế và được kết quả như sau:
60 Hình 3 32: Mô hình thực tế
THIẾT KẾ CHƯƠNG TRÌNH
Chương trình điều khiển robot
4.1.1 Chương trình điều khiển chuyển động trên ROS:
Lưu đồ giải thuật cài đặt và điều khiển Navigation được biểu diễn như sau:
Hình 4 1: Lưu đồ giải thuật Navigation
Lưu đồ giải thuật quy trình cài đặt và điều khiển Waypoint (di chuyển đa điểm) được biểu diễn như sau:
Hình 4 2: Lưu đồ giải thuật Waypoint đa điểm
4.1.2 Xử lý tín hiệu từ Encoder và tính toán PID:
Vận tốc thực tế tính được từ xung của encoder:
𝑇 60 (vòng/phút) Với các thông số từ động cơ, ta có số xung encoder 1 vòng là 270.11 = 2970 (xung) và chu kỳ lấy mẫu T = 0.01 (s) Từ đó ta có thể rút gọn thành:
V = Số xung encoder đo được 2.02 (vòng/phút)
Lưu đồ giải thuật code Arduino xử lý tín hiệu để điều khiển được biểu diễn như sau:
Hình 4 3: Lưu đồ giải thuật điều khiển di chuyển
4.1.3 Chương trình nhận diện giọng nói:
Chương trình nhận diện giọng nói được lập trình bằng ngôn ngữ Python tương tác trực tiếp với giao diện và chương trình di chuyển đa điểm được lập trình bằng ngôn ngữ C++
Chương trình điều khiển di chuyển đa điểm Waypoint có 2 phần: phần giao diện và phần code xử lý chuyển động (Panel và Server) Phần giao diện sẽ được hiển thị trực tiếp trên màn hình cùng với bản đồ real time mà xe đang quét được Bên dưới là sơ đồ giao tiếp giữa Nhận diện giọng nói và Di chuyển đa điểm được tổng quan hóa như sau:
Hình 4 4: Sơ đồ giao tiếp giữa giọng nói và di chuyển
Tích hợp và ứng dụng hệ thống ROS vào hệ thống
4.2.1 Kết nối ROS_MASTER: Để có thể giao tiếp giữa laptop (máy chủ) và raspberry (máy con) thì cần phải cài đặt ROS_MASTER giúp 2 bên nhận được thông tin của nhau và trao đổi các dữ liệu cũng như xử lý cùng nhau hoàn thành các tác vụ thông qua mạng không dây từ cảm biến Lidar phát ra có tên mạng là “SLAMWARE_DA97DF” giúp xe có thể tự hành mà không cần nối dây rời Đầu tiên, chúng ta cần xác định địa chỉ ip của từng bên bằng lệnh “ifconfig”, từ đó ta sẽ thấy được:
IP của Raspberry là 192.168.11.203 (Lưu ý là địa chỉ IP nếu chúng ta không cài đặt tĩnh thì nó có thể bị thay đổi ở những lần kết nối sau)
Hình 4 5: Liên kết giữa Raspberry và Laptop
Sau đó, ta sử dụng SSH để kết nối với Raspberry thông qua terminal trên laptop bằng địa chỉ ip như trên
Hình 4 6: Kết nối SSH từ laptop sang Raspberry
Tiếp theo, ta vào file bashrc của raspberry để thêm vào:
“export ROS_MASTER_URI=http://192.168.11.203:11311”
Với “:11311” là đuôi mã của ros_master
Cuối cùng, ta vào file /etc/hosts của 2 bên để thêm vào ip của bên còn lại giúp chúng nhận biết được nhau Và chạy roscore để hoàn tất quá trình kết nối ROS_MASTER
4.2.2 Lập bản đồ môi trường:
4.2.2.1 Tạo lập bản đồ tĩnh:
Bắt đầu chế độ Manual bằng lệnh “rosrun teleop_twist_keyboard teleop_twist_keyboard.py” Sau đó di chuyển xung quanh các khu vực để thu thập dữ liệu quét map
Hình 4 8: Chức năng điều khiển Manual bằng bàn phím
Chế độ Manual được điều khiển bằng các phím và có 2 chế độ là Non- holonomic và Holonomic Đồng thời cũng có thể tùy chỉnh tốc độ của vận tốc thẳng và vận tốc góc giúp dễ dàng điều khiển xe như mong muốn
Hình 4 9: Bản đồ 2D Lidar quét được trên RViz
Sau khi di chuyển trong môi trường và thu được kết quả bản đồ trả về là tốt nhất và đầy đủ nhất thì chúng ta cần lưu lại Việc lưu lại được thực hiện bằng command trên terminal:
“Rosrun map_server map_saver -f map_name map:=/slamware_ros_sdk_server_node/map”
Trong đó: map_name là tên bản đồ do chúng ta đặt tên Sau khi lưu, chúng ta sẽ nhận được hai file để mô tả cho bản đồ mà chúng ta đã lưu là file ảnh pgm và file mô tả ảnh yaml
Hình 4 11: Bản đồ 2D sau khi xuất thành file pgm
Thông số file mymapc303.yaml: image: mymapc303.pgm resolution: 0.050000 origin: [-1.300000, -2.400000, 0.000000] negate: 0 occupied_thresh: 0.65 free_thresh: 0.196
Tuy nhiên nếu bản đồ chưa được ưng ý do có nhiều vật cản ngoài ý muốn không nằm trong vật thể tĩnh cố định như: bàn, ghế, tường,… thì chúng ta có thể chỉnh sửa lại map cho hoàn chỉnh hơn nhờ những phần mềm chỉnh sửa ảnh cơ bản Trong ROS, phần mềm hỗ trợ chỉnh sửa ảnh cũng như bản đồ là Gimp
Hình 4 12: Chỉnh sửa map bằng Gimp
Cuối cùng ta sẽ được thành phẩm là một bản đồ tĩnh chỉ bao gồm các khu vực không di chuyển được và các bức tường, vách ngăn để khi các vật cản động tạm thời mất đi thì sẽ không ảnh hưởng tới quá trình di chuyển sau này của robot
4.2.2.2 Tạo lập bản đồ chi phí:
Costmap_common_params: obstacle_range: 1.5 raytrace_range: 1.5 footprint: [[-0.24, -0.24], [-0.24, 0.24], [0.24, 0.24], [0.24, -0.24]] robot_radius: 0.3 inflation_radius: 1.5 cost_scaling_factor: 10 plugins:
- {name: static_layer, type: "costmap_2d::StaticLayer"}
- {name: obstacle_layer, type: "costmap_2d::ObstacleLayer"}
- {name: inflation_layer, type: "costmap_2d::InflationLayer"} obstacle_layer:
69 enabled: true observation_sources: laser_scan_sensor laser_scan_sensor: {sensor_frame: laser, data_type: LaserScan, topic: /scan_filtered, marking: true, clearing: true} max_obstacle_height: 1.5 min_obstacle_height: 0.0 combination_method: 1 static_layer: enabled: true map_topic: "/map"
Các thông số quan trọng cần chú ý như sau:
obstacle_range (m): Khoảng cách tối đa mà costmap sẽ xem xét các vật cản từ dữ liệu cảm biến (như laser) để gán giá trị chi phí
raytrace_range (m): Khoảng cách tối đa mà costmap sẽ xem xét các vật cản từ dữ liệu cảm biến để tiến hành truy nguyên raytrace Raytrace là quá trình kiểm tra các ô trong costmap theo đường thẳng từ robot đến vật cản Nếu khoảng cách từ robot đến ô lớn hơn raytrace_range, thì costmap sẽ xem như không có vật cản trong ô đó
Footprint (m): Đây là hình dạng của robot được định nghĩa dưới dạng các điểm trong không gian robot Hình dạng này được sử dụng để tính toán va chạm giữa robot và các vật cản
robot_radius (m): Bán kính của robot được sử dụng để tính toán costmap và làm cơ sở cho việc xác định vùng an toàn xung quanh robot
inflation_radius (m): Bán kính phình to vùng xung quanh các vật cản để đảm bảo robot không va chạm Khi costmap xác định vùng xung quanh vật cản, nó sẽ gán giá trị chi phí cao hơn cho các ô gần vật cản và giảm dần khi đi xa vật cản
cost_scaling_factor: Hệ số nhân được áp dụng cho giá trị chi phí của các ô trong costmap Hệ số này giúp tăng hoặc giảm độ ưu tiên của costmap trong quá trình tính toán đường đi
plugins: Danh sách các plugin được sử dụng trong costmap để tính toán giá trị chi phí từ các nguồn khác nhau
obstacle_layer: Cấu hình cho lớp ObstacleLayer, được sử dụng để xác định vị trí và giá trị chi phí của các vật cản từ dữ liệu laser
static_layer: Cấu hình cho lớp StaticLayer, được sử dụng để xác định vị trí và giá trị chi phí của các vật cản từ bản đồ tĩnh
Global và Local Costmap: global_costmap: global_frame: map robot_base_frame: base_link update_frequency: 5.0 publish_frequency: 10.0 static_map: true local_costmap: global_frame: odom robot_base_frame: base_link update_frequency: 5.0 publish_frequency: 10.0 static_map: false rolling_window: true width: 2 height: 2 resolution: 0.05
global_frame: khung tham chiếu costmap
robot_base_frame: khung tham chiếu cho robot
update_frequency: Tần suất cập nhật
publish_frequency: Tần suất xuất bản
static_map: Xác định xem costmap cục bộ có được tạo từ bản đồ tĩnh hay không
rolling_window: Xác định xem costmap cục bộ có di chuyển theo cửa sổ cuộn hay không
width: Chiều rộng của costmap
height: Chiều cao của costmap
resolution: Độ phân giải của costmap cục bộ
Sau khi các thông số được cài đặt xong, Rviz sẽ hiển thị các topic được chọn giúp hiển thị và điều chỉnh trên giao diện Chúng ta có thể tùy chỉnh màu sắc cũng như loại hiển thị của global và local costmap
Hình 4 13: Thông số Global trên Rviz
Hình 4 14: Thông số Local trên RViz
Hình 4 15: Hiển thị Local Costmap
Hình 4 16: Hiển thị Global Costmap
4.2.3 Điều hướng trên bản đồ:
4.2.3.1 Di chuyển đơn điểm (Navigation):
DWA_local_planner_params: holonomic_robot: true max_vel_x: 0.5 min_vel_x: -0.5
Thiết kế giao diện người dùng
Giao diện vận hành sử dụng QT Design để thiết kế và được đặt bên trong phần mềm Rviz, giúp dễ dàng cài đặt và vận hành quá trình hoạt động của robot Giao diện vận hành gồm 2 phần: giao diện cho STAFF và giao diện cho CUSTOMER với thiết kế đơn giản, thân thiện giúp người dùng dễ dàng hiểu và sử dụng Mô tả chi tiết về 2 giao diện:
- Giao diện STAFF: chức năng dùng để cho nhân viên setting cho di chuyển đa điểm theo quy trình đặt sẵn Bao gồm: “Table list” để hiển thị danh sách các điểm waypoint đã được cài đặt và được lưu lại; “Process” hiển thị danh sách các nhóm quy trình chứa thứ tự các waypoint cần di chuyển do người dùng thêm vào từ các nút nhấn “+,-”; các nút “Run, Delete” để có thể chạy từng điểm hoặc chạy theo quy trình và có thể xóa đi nếu nhập sai; chúng ta cũng có thể tạo thêm nhiều quy trình với tên và thứ tự sắp xếp khác nhau
82 hoặc lưu trữ và gọi ra hoặc dừng chuyển động robot bằng các nút nhấn chức năng như “New, Save, Load, Stop”
Hình 4 30: Thiết kế giao diện STAFF
- Giao diện CUSTOMER: chức năng dùng để cho khách hàng hoặc nhân viên sử dụng để tác động trực tiếp vào tiến trình di chuyển của robot Bao gồm 2 nút nhấn START, STOP Nút nhấn START để bắt đầu di chuyển đa điểm của robot dựa theo quy trình bên giao diện STAFF Nút nhấn DONE để xác nhận rằng đã lấy món xong để robot tiếp tục di chuyển
Hình 4 31: Thiết kế giao diện CUSTOMER
Giao diện đặt món là một phần của ứng dụng hoặc trang web mà người dùng có thể sử dụng để chọn và đặt món ăn trong một nhà hàng hoặc dịch vụ giao hàng Giao diện này cung cấp một giao thức tương tác để người dùng có thể dễ dàng lựa chọn các món ăn, thực hiện các thay đổi và hoàn tất quá trình đặt hàng Hơn thế
83 nữa, chúng ta có thể sử dụng các dữ liệu nhận được từ giao diện để hiển thị lên một giao diện khác dùng để giám sát và theo dõi Trong đề tài này, chúng ta có tổng cộng 5 giao diện như sau:
Hình 4 32: Giao diện chờ Đây là giao diện chờ khi không có khách Chỉ cần chạm vào mà hình để đến với giao diện tiếp theo Giao diện này giúp hiển thị tên thương hiệu nhà hàng, các thông tin cơ bản và để xác nhận khi bắt đầu sử dụng
Hình 4 33: Giao diện chọn bàn
Giao diện chọn bàn được chia làm 3 khu vực như hình:
- Khu vực 1: Đây là khu vực chọn bàn Trong khu vực 1 có 4 nút nhấn tương ứng với bốn bàn 1, 2, 3 và bàn 4 Thêm vào đó là hiển thị sơ đồ tổng quan trong nhà hàng: phía trên có khu vực cửa vào và bên trái có quầy thanh toán, bên phải có bảng chọn món nơi để giao diện chọn món, cuối cùng là khu vực bếp nơi mà robot sẽ được bày trí và nhận đồ ăn di chuyển đến các bàn Nhìn vào khu vực 1 sẽ thấy được vị trí bàn trong nhà hàng để khách hàng có thể chọn bàn tương ứng vị trí mình mong muốn
- Khu vực 2: Với khu vực này được chia ra làm nhiều công việc khác nhau trên giao diện Trong khu vực có nút nhấn màu trắng có chức năng
“Reset” trạng thái bàn đồng thời xóa đi thời gian bàn được chọn để tiếp tục đón khách khác Bên phải có số bàn từ 1 đến 4 và có các trạng thái bàn để khách có thể dễ quan sát Khi bàn 1 đã được chọn như hình trên thì trạng thái bàn sẽ đổi từ màu vàng đỏ và hiện thời gian bàn 1 được sử dụng Như vậy khi khách hàng khác đến có thể biết được bàn 1 đã có người sử dụng và chọn các bàn khác đang còn trống Bên dưới cùng khu vực 2 được chia ra 2 bên, một bên hiển thị ngày tháng năm và một bên hiển thị giờ phút giây khi khách đặt bàn
- Khu vực 3: Tại khu vực này chỉ gồm hai nút nhấn, nút chấn chuyển đế độ giữa “KHÁCH HÀNG” và “NHÂN VIÊN”, khi ở chế độ khách, nút nhấn có màu xanh và khi ở chế độ nhân viên nút nhấn có màu đỏ Nút nhấn còn lại là nút chuyển sang giao diện đặt món là “MENU” Đối với chế độ “KHÁCH HÀNG”, muốn bấm qua được trang chọn món sẽ phải nhập thông tin cơ bản như tên và số điện thoại để nhà hàng có thể biết được đang phục vụ cho vị khách nào và dễ dàng thanh toán hơn Đối với chế độ “NHÂN VIÊN” thì không cần nhập thông tin, chỉ cần chọn số bàn có nhu cầu gọi thêm món và bấm nút “MENU” để chọn món trực tiếp cho bàn đó luôn, điều này giúp cho khi khách hàng cần gọi thêm món thì nhân viên sẽ có thể đặt thêm trực tiếp trên giao diện Đối với cả hai chế độ trên đều có thể chọn được món ăn cho cùng một vị khách ngồi ở một bàn cố định, không lo bị sai bàn hay sai khách hàng
Giao diện nhập thông tin: Đây là giao diện nơi khách hàng nhập thông tin được liên kết trực tiếp với giao diện trên Khi nhập thông tin xong, việc khách hàng cần làm là bấm nút
“DONE” để truy cập vào giao diện chọn món ăn Khi đó, thông tin của khách hàng
85 sẽ được đưa về cơ sở dữ liệu xử lý và sử dụng cho các chức năng khác Giao diện này chỉ có khách hàng có thể sử dụng được, đối với nhân viên thì không cần thông qua bước nhập thông tin này
Hình 4 34: Giao diện nhập thông tin
Hình 4 35: Giao diện đặt món
Giao diện đặt món cũng được chia ra làm ba khu vực chính với các chức năng và nút bấm khác nhau:
1/ Khu vực 1: Theo như hình trên có thể thấy đây là khu vực để chọn các trang menu với mục đích khác nhau Trong giao diện này gồm ba menu chính: Một là menu cho món ăn, trong đây sẽ chỉ có món ăn được hiển thị, hai là menu cho nước uống với các món nước uống được hiển thị và cuối cùng là menu cho các món tráng miệng Khách hàng có thể
86 chọn món ở bất kì menu nào mình muốn và phù hợp với nhu cầu của khách hàng Đối với ba menu đã nêu trên thì khi chuyển qua lại giữa các menu thì chỉ có khu vực 2 thay đổi còn khu vực 3 sẽ luôn luôn được hiện thị lên
2/ Khu vưc 2: Nằm ngay bên dưới khu vực 1 chính là khu vực 2 nơi mà các món ăn sẽ được trưng bày Đối với mỗi món ăn sẽ có hình ảnh, tên món, mô tả món ăn và giá tiền Nằm ngay bên dưới giá tiền là một nút nhấn tăng giảm để thể hiện số lượng món muốn chọn Trong giao diện này đang để số lượng tối thiểu là 0 và tối đa là 10, nghĩa là một món chỉ đc chọn số lượng là 10 phần, nhưng số lượng này có thể thay đổi tùy vào nhà hàng sử dụng Đối với hai menu còn lại là nước uống và tráng miệng thì có cách bố trí y chang với menu món ăn nhưng khác phần thông tin món và hình ảnh cũng như giá tiền
3/ Khu vực 3: Khu vực cuối cùng nằm bên phải, đây là khu vực để khách hàng theo dõi món ăn, nước uống và tráng miệng đã chọn, kiểm tra lại số lượng đã đúng hay chưa Bên dưới là phần tính tổng tiền, được tính toán bằng giá tiền nhân với số lượng và cộng tổng các món được hiển thị trên bảng “MÓN ĐÃ CHỌN” Sau khi kiểm tra xong, khách hàng có thể bấm nút “THANH TOÁN” để tiến hành đặt món và gửi dữ liệu các món được chọn đến cơ sở dữ liệu
Hình 4 36: Giao diện quản lý
KẾT QUẢ VÀ THỰC NGHIỆM
Kết quả mô phỏng Matlab
Thiết kế sơ đồ khối Simulink trên phần mềm Matlab các khối động học:
Hình 5 1: Sơ đồ khối Simulink
Trong sơ đồ khối trên gồm hai khối chính là khối Inverse Kinematics và Forward_Position_Kinemcatics Đặt điểm đầu vào là vị trí X, Y và góc quay trong hệ trục tọa độ trái đất Muốn robot đi đến các điểm này, ta phải đưa các điểm này về hệ trục tọa độ của robot
Kết quả động học quan sát được:
Hình 5 2: (a) Kết quả ngõ ra trục X tại điểm đặt 0.55m, (b) Kết quả ngõ ra trục Y tại điểm đặt 0.32m, (c) Kết quả ngõ ra góc tại điểm đặt pi/2
Tại các điểm đặt trước kết quả ngõ ra đưa ra cho thấy robot đã chạy đúng với mong muốn ngõ vào của nhóm Độ vọt lố nhỏ và thời gian xác lập thấp khiển cho hệ nhanh ổn định và đi đến đúng vị trí với sai số xác lập nhỏ
(b) Hình 5 3: (a) Kết quả trục X giao dộng sóng Sin tại điểm đặt , (b) Kết quả trục Y giao động sóng Sin tại điểm đặt
Kết quả thực nghiệm
Môi trường thực tế bên ngoài được đánh dấu các điểm đầu, điểm cuối và thêm vật cản như sau:
Hình 5 4: Khoảng cách thực tế vị trí ban đầu và vị trí điểm 1
Hình 5 5: Khoảng cách thực tế vị trí điểm 1 tới vị trí điểm 2
Sau khi đã cài đặt đầy đủ các thông số cần thiết để robot lập kế hoạch đường đi toàn cục và cục bộ, ta mở phần mềm Rviz và sử dụng công cụ “2D Nav Goal” để đặt tọa độ và hướng của điểm đến để xe di chuyển hoặc chúng ta có thể đặt trước các điểm waypoint và dùng waypoint để điều khiển mà không cần đặt lại tọa độ điểm đó
Hình 5 6: Sử dụng công cụ 2D Nav Goal
Hình 5 7: Sử dụng Waypoint để cài đặt sẵn 2 vị trí
Bắt đầu quá trình di chuyển, robot sẽ tự động lập kế hoạch đường đi phù hợp với tiêu chí mình đặt trong các thông số: đường đi tối ưu và né vật cản Trong đó:
- Đường màu đen, đỏ là Global_plan của Global_map tương ứng với thuật toán Dijkstra để lập đường đi tối ưu
- Đường màu vàng là Local_plan của Local_map tương ứng với thuật toán DWA để né vật cản
Hình 5 8: Kế hoạch đường đi từ điểm 1 qua điểm 2 và tọa độ xe tại điểm 1
Chúng ta có thể theo dõi vận tốc dài (Vx, Vy) và vận tốc góc Vw của robot thông qua topic /cmd_vel:
Hình 5 9: Thông tin topic cmd_vel
Hình 5 10: Tọa độ điểm đến khi đặt
Hình 5 11: Xe tới nơi ở vị trí điểm 2
Hình 5 12: Tọa độ vị trí xe ở vị trí điểm 2
Nhận xét, đánh giá kết quả:
Theo hình ảnh thực tế, từ vị trí ban đầu đến tọa độ vị trí điểm thứ 1 là 6 tấm gạch 30x30 tương ứng khoảng cách 1.8m gần đúng với tọa độ điểm thứ 1 hiển thị trên Odometry là x: 1.807, lệch 0.007 Qua các thông số được hiển thị từ topic Odometry, ta thấy tọa độ vị trí điểm đích (điểm 2) theo trục X khi xe đến nơi là 3.299 khoảng cách của 2 điểm là 1.492 gần bằng 1.5 so với thực tế, trong khi đó mục tiêu theo trục X là 3.352 sai số của vị trí điểm đích theo trục X là 0.052 Tương tự với trục Y, ta có tọa độ khi đến điểm đích là 0.835 so với mục tiêu là 0.864 sai số 0.029 Sai số theo trục X, Y < ngưỡng sai số chấp nhận được là 0.07 di chuyển X, Y hợp lệ
Thông số hệ số góc xoay của xe được hiển thị trên hệ Orientation với 2 hệ số z và w, ta có thể chuyển sang hệ Euler để xác định góc xoay của hệ robot Từ thông số hình (5.10) ta có góc xoay được đặt mục tiêu là gần bằng 0 và hình (5.12) ta tính được góc yaw = 2.68 0 = 0.047 (rad) là góc thực tế của xe khi ở vị trí điểm 2 Sai số góc lệch khoảng 0.047 < ngưỡng chấp nhận của góc lệch là 0.07 Di chuyển xoay hợp lệ
Bảng 5 1: Tính toán sai số thực nghiệm nhiều lần
Thông số Giá trị Điểm 1 Điểm 2 Sai số
5.2.2 Thử nghiệm nhận diện giọng nói: Để sử dụng chức năng nhận diện giọng nói, ta sử dụng lệnh “rosrun my_package my_script.py” để khởi chạy chương trình giọng nói
Hình 5 13: Chương trình nhận diện giọng nói thực hiện
Bắt đầu chương trình, mỗi khi robot ghi âm sẽ phát ra tiếng “píp” để người dùng nhận biết được robot đang nghe Sau 3s, chương trình sẽ phân tích giọng nói thành văn bản và hiển thị kết quả nghe được lên terminal Sau đó sẽ thực hiện các chức năng xuất bản các tín hiệu qua waypoint để robot hoạt động, đồng thời cũng sẽ nhận ngược lại tín hiệu từ waypoint để chương trình biết khi nào cần phát âm thanh thông báo
Theo dõi dữ liệu nhận được từ topic /ndgn_topic:
Hình 5 14: Thông tin topic ndgn_topic Kết quả từ Waypoint_server thực hiện quá trình di chuyển và giao tiếp với chương trình nhận diện giọng nói:
Hình 5 15: Chương trình Waypoint thực hiện
5.2.3 Thử nghiệm tình huống thực tế:
Sau khi thử nghiệm chuyển động đáp ứng được yêu cầu hệ thống, chúng ta sẽ thử nghiệm trên một tình huống thực tế trong nhà hàng bao gồm các quy trình về di chuyển đa điểm đặt trước, nhận diện giọng nói và tương tác trực tiếp với robot bằng thao tác giao diện hoặc giọng nói
Trước khi đi vào vận hành, chúng ta cần cài đặt lần đầu tiên cho robot khi vào khu vực mới như: quét map, lưu map, cài đặt các điểm cần đến, chọn lựa quy trình có thể đặt sẵn, thiết lập nhận diện giọng nói,…)
Hình 5 16: Bản đồ khu vực sau khi được cài đặt hoàn chỉnh
Hình 5 17: Cài đặt Waypoint trên giao diện STAFF
Sau khi cài đặt lần đầu tiên xong thì có thể đưa vào vận hành thực tế, dưới đây là các bước thực hiện quy trình:
1/ Khách hàng đặt món trên giao diện món ăn
Hình 5 18: Khách hàng đang đặt món
2/ Nhân viên kiểm tra thông tin món ăn trên giao diện quản lý và bắt đầu chuẩn bị món
Hình 5 19: Nhân viên đang theo dõi dữ liệu
3/ Robot ở trạng thái chờ của khu vực bếp đợi tín hiệu từ nhân viên
Hình 5 20: Robot ở nhà bếp trong trạng thái chờ
4/ Sau khi món xong, nhân viên đặt món trên khay robot và bắt đầu chọn lựa quy trình robot cần đi giao theo thứ tự mình muốn
5/ Sử dụng giọng nói hoặc nút nhấn để bắt đầu quy trình giao món cho robot
Hình 5 21: Nhân viên đặt món lên khay
6/ Robot thực hiện quy trình di chuyển đa điểm cùng với chức năng nhận diện giọng nói và giao diện vận hành được hiển thị trên màn hình
Hình 5 22: Robot di chuyển tới vị trí bàn và né vật cản
Hình 5 23: Giao diện hiển thị trên màn hình
7/ Khách hàng lấy món và tương tác để robot tiếp tục di chuyển cho đến khi về lại đến khu vực bếp và kết thúc quá trình giao món
Hình 5 24: Khách hàng lấy món
Đánh giá, nhận xét tổng quát:
- Toàn bộ quá trình diễn ra đáp ứng tốt được những yêu cầu ban đầu đặt ra Robot có thể tương tác được với cả nhân viên và khách hàng bằng giọng nói hoặc giao diện để thực hiện các tác vụ
- Quá trình di chuyển thuận lợi, robot có thể đến được đúng vị trí mong muốn, đồng thời né được cả vật cản động và tĩnh
- Quy trình có thể được lặp lại nhiều lần trong khoảng hơn 20-30 phút ở phạm vi như trên
- Việc vận chuyển món ăn tới khách hàng được hoàn thành đúng như mong đợi, giữ nguyên vẹn được tổng quan món ăn và vận chuyển được 2 khay cùng lúc Tốc độ robot ổn định hạn chế rung lắc nhưng vẫn đủ nhanh để đáp ứng nhu cầu trong môi trường thực tế
- Âm thanh giọng nói phát ra đủ to để thông báo đến người dùng Micro thu âm nhận diện giọng nói khá tốt, có thể nhận biết được đúng các từ cần thiết để thưc hiện tác vụ
Qua nhiều lần thử nghiệm trong nhiều loại địa hình, môi trường thực tế khác nhau, hệ thống hoạt động tốt trong phạm vi khoảng 20x20m, phụ thuộc vào kết nối wifi Lidar, kết nối bluetooth và wifi mạng Ethernet để giữ ổn định cho tác vụ hệ thống Cách vận hành đơn giản, dễ sử dụng và hạn chế gặp lỗi nhất có thể