1. Trang chủ
  2. » Luận Văn - Báo Cáo

ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS

74 108 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Tác giả Nguyễn Đức Tiến
Người hướng dẫn TS. Nguyễn Mạnh Linh
Trường học Trường Đại Học Bách Khoa Hà Nội
Chuyên ngành Kỹ thuật điều khiển và tự động hóa
Thể loại đồ án tốt nghiệp
Năm xuất bản 2021
Thành phố Hà Nội
Định dạng
Số trang 74
Dung lượng 4,29 MB

Cấu trúc

  • CHƯƠNG 1. TỔNG QUAN ĐỀ TÀI (11)
    • 1.1 Định hướng cho đề tài (11)
    • 1.2 Mục tiêu của đề tài (11)
    • 1.3 Đối tượng và phạm vi nghiên cứu (12)
    • 1.4 Các bước thực hiện đề tài (12)
  • CHƯƠNG 2. CƠ SỞ LÝ THUYẾT (13)
    • 2.1 Hệ điều hành ROS (Robot Operating System) (13)
    • 2.2 Các kiến thức cơ bản về Robotics (28)
    • 2.3 SLAM và Navigation (30)
    • 2.4 Thuật toán Dijkstra cho global planner (31)
    • 2.5 Thuật toán Dynamic Window Approach (34)
    • 2.6 Mô hình động học của Robot (37)
  • CHƯƠNG 3. THIẾT KẾ CHI TIẾT (40)
    • 3.1 Thiết kế chi tiết phần nguồn (0)
    • 3.2 Thiết kế chi tiết khối điều khiển trung tâm (40)
    • 3.3 Thiết kế chi tiết khối vi điều khiển (44)
    • 3.4 Thiết kế khối sensor (53)
    • 3.5 Thiết kế chi tiết khối động cơ và bánh xe (57)
  • CHƯƠNG 4. TRIỂN KHAI VÀ KẾT QUẢ (61)
    • 4.1 Lựa chọn công cụ thực hiện (61)
    • 4.2 Kế hoạch triển khai và kiểm tra (61)
    • 4.3 Kết quả đạt được (62)
  • TÀI LIỆU THAM KHẢO (68)
  • PHỤ LỤC (69)

Nội dung

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI ĐỒ ÁN TỐT NGHIỆP Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS NGUYỄN ĐỨC TIẾN Tien nd164066sis hust edu vn Ngành Kỹ thuật điều khiển và tự động hóa Chuyên ngành Tự động hóa công nghiệp Giảng viên hướng dẫn TS Nguyễn Mạnh Linh Bộ môn Tự động hóa công nghiệp Viện Điện HÀ NỘI, 012021 Chữ ký của GVHD ii iii ĐỀ TÀI TỐT NGHIỆP Thiết kế hệ điều khiển xe tự hành sử dụng bánh xe đa hướng trên nền tảng ROS Giáo viên hướng dẫn Ký và ghi rõ họ t.

CƠ SỞ LÝ THUYẾT

Hệ điều hành ROS (Robot Operating System)

Giới thiệu tổng quan hệ điều hành ROS

ROS là hệ điều hành mã nguồn mở dành cho ứng dụng robot, nổi bật với khả năng thực hiện các tác vụ song song, giao tiếp và quản lý dữ liệu hiệu quả Ngoài ra, ROS còn phát triển nhiều thư viện và công cụ hỗ trợ thu thập, xử lý, hiển thị và điều khiển thông tin Hệ thống này có khả năng tương tác với nhiều framework robot khác như Player, YARP, Orocos, CARMEN, Orca, Moos và Microsoft Robotics Studio.

Hình 2.1 Biểu tượng của ROS

ROS là hệ điều hành chuyên dụng cho ứng dụng điều khiển robot, cho phép lập trình, biên dịch và thực thi chương trình trên nhiều máy tính và hệ thống robot khác nhau Trong ROS, cấu trúc Graph được thể hiện như một cây (tree graph), biểu diễn mối quan hệ giữa các thành phần như nodes, topics, messages và services Hệ thống này hỗ trợ trao đổi dữ liệu và giao tiếp thông qua nhiều chuẩn khác nhau, bao gồm giao tiếp đồng bộ qua services, truyền dữ liệu bất đồng bộ qua topics và lưu trữ dữ liệu trên Parameter Server Những ưu điểm này giúp ROS trở thành một công cụ mạnh mẽ trong lĩnh vực robot.

Xây dựng ứng dụng robotics trên nền tảng ROS giúp giảm thiểu đáng kể khối lượng công việc lập trình và thiết kế hệ thống Điều này cho phép các nhà phát triển tận dụng nguồn tài nguyên mã nguồn mở phong phú từ cộng đồng Theo ROS5, có thể so sánh khối lượng công việc kỹ thuật cơ bản và khối lượng nghiên cứu khoa học nòng cốt để hiểu rõ hơn về lợi ích của việc sử dụng nền tảng này.

Sự hiệu quả của ROS giúp giảm đáng kể thời gian cho các công việc kỹ thuật cơ bản, từ đó tạo điều kiện cho việc nghiên cứu chuyên sâu Điều này dẫn đến việc nâng cao hàm lượng khoa học trong các đề tài nghiên cứu, mang lại giá trị lớn hơn nhiều lần.

Một số đặc điểm làm cho ROS là một hệ điều hành nên được sử dụng:

• 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ố quan trọng nhất làm cho ROS trở nên mạnh mẽ chính là tính cộng đồng rộng lớn Tài nguyên của ROS chủ yếu được phát triển và xây dựng từ sự đóng góp của các viện nghiên cứu và trường đại học hàng đầu.

Những tài nguyên được cung cấp từ ROS thể hiện được sức mạnh trong các lĩnh vực robotics như là:

ROS hoạt động trên nền tảng Unix, với phần mềm chủ yếu được thử nghiệm trên Ubuntu và Mac OS X Cộng đồng ROS đã mở rộng hỗ trợ cho các hệ điều hành khác như Fedora, Gentoo, Arch Linux và nhiều nền tảng Linux khác Hiện tại, ROS cũng có hỗ trợ cho Microsoft Windows, tuy nhiên, hiệu suất vẫn chưa được tối ưu hoàn toàn.

Hệ điều hành ROS được phát hành dưới dạng ROS Distribution, tương tự như phân phối Linux, cung cấp một bộ phần mềm cho người dùng xây dựng và phát triển Là một hệ điều hành mã nguồn mở, ROS thu hút sự đóng góp từ cộng đồng để phát triển hệ thống cùng với các công cụ và thư viện hỗ trợ Mặc dù cộng đồng ROS ngày càng phát triển, sự đóng góp chủ yếu vẫn tập trung ở Hoa Kỳ, Tây Âu và Nhật Bản.

Mô hình ROS gồm có 3 tầng: Filesystem, Computation Graph, và Community Bên cạnh đó, ROS định nghĩa hai kiểu đặt tên (Names): Package Resource Names và Graph Resource Names

Tầng ROS Filesystem Filesystem là nguồn tài nguyên ROS được lưu trữ trên bộ nhớ hệ thống, bao gồm những thành phần như:

Hình 2.2 Cấu trúc Filesystem của ROS

Gói dữ liệu (package) là đơn vị cơ bản trong tổ chức phần mềm của hệ điều hành ROS, chứa các lệnh thực thi (nodes), thư viện phụ thuộc, tập dữ liệu, file cấu hình và các dữ liệu cần thiết khác Mục đích của gói dữ liệu là tạo ra một tập hợp chương trình nhỏ gọn, dễ dàng tái sử dụng.

Cấu trúc điển hình của ROS packages :

Hình 2.3 mô tả các file và thư mục cơ bản bên trong một package:

Tất cả các tệp cấu hình trong các gói ROS được lưu trữ trong thư mục config Thư mục này do người dùng tạo ra và tuân theo quy trình chung trong việc đặt tên, nhằm tổ chức và quản lý các tệp cấu hình một cách hiệu quả.

- include / package_name: Thư mục này bao gồm các tiêu đề và thư viện cần sử dụng bên trong package

- scripts: Thư mục này lưu giữ các script Python thực thi

- src: Thư mục này lưu trữ các srouce code C ++

- launch: Thư mục này giữ các launch file được sử dụng để khởi chạy một hoặc nhiều node ROS

Hình 2.3 Cấu trúc chung của ROS packages

- msg: Thư mục này chứa các định nghĩa message

- srv: Thư mục này chứa các định nghĩa service

- Action: Thư mục này chứa các định nghĩa hành động

- package.xml: Đây là package manifest file của gói này

- CMakeLists.txt: Đây là build Cmake file của gói này

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 bao gồm điều kiện cho phép (license) và các yếu tố phụ thuộc của gói dữ liệu Ngoài ra, manifest còn chứa thông tin về đặc trưng của ngôn ngữ lập trình, chẳng hạn như các cờ báo (flags) của trình biên dịch.

Stacks trong ROS là tập hợp các gói phần mềm kết hợp với nhau để thực hiện chức năng cụ thể, ví dụ như "navigation stack" giúp dẫn hướng cho robot Bên cạnh đó, stacks cũng mô tả cấu trúc của phần mềm ROS và cung cấp thông tin về phiên bản ROS đang được sử dụng.

• Stack Manifests: (stack.xml) cung cấp cơ sở dữ liệu về một stack, bao điều kiện cho phép (license) và các thông số phục thuộc vào những stack khác

Các loại message (msg) trong ROS được mô tả chi tiết trong tệp my_package/msg/MyMessageType.msg, nơi định nghĩa cấu trúc dữ liệu cho các message được gửi đi.

Các loại dịch vụ (srv) trong ROS được mô tả trong file my_package/srv/MyserviceType.srv, nơi định nghĩa cấu trúc dữ liệu cho các yêu cầu (request) và phản hồi (response) của các dịch vụ.

Lược đồ tính toán (Computation Graph) là một mạng lưới kết nối các quy trình trong ROS, bao gồm các thành phần chính như nút (nodes), Master, Parameter Server, tin nhắn (messages), dịch vụ (services), chủ đề (topics) và túi (bags) Tất cả các thành phần này đóng vai trò cung cấp dữ liệu cho lược đồ tính toán thông qua nhiều phương thức khác nhau.

Hình 2.4 Các thành phần cơ bản của tầng ROS Computaion Graph

Hình 2.4 mô tả các thành phần cơ bản của tầng ROS Computation Graph, mỗi thành phần đều có một chức năng riêng và có nhiệm vụ như sau:

Nodes là các đơn vị thực hiện lệnh tính toán và xử lý dữ liệu trong hệ điều hành ROS Hệ thống này được thiết kế theo mô-đun hóa với các mô-đun chi tiết và chuyên biệt, thường bao gồm nhiều nodes trong một hệ thống điều khiển robot.

Các kiến thức cơ bản về Robotics

Hệ tọa độ là phương pháp xác định vị trí của một điểm trên Trái Đất thông qua hai thông số chính: tọa độ X và Y Tọa độ X cho biết khoảng cách của điểm so với tọa độ gốc theo chiều ngang (trái hoặc phải), trong khi tọa độ Y chỉ ra khoảng cách theo chiều dọc (trên hoặc dưới) so với tọa độ gốc Các thông số này giúp xác định vị trí chính xác của điểm bằng cách so sánh với các điểm tham chiếu khác.

Hình 2.15 Hệ trục tọa độ gồm ấm trà, robot, cái bàn

Trong chương trình robotics, việc theo dõi vị trí và vận tốc của vật thể trong không gian là yêu cầu quan trọng Chẳng hạn, trong tình huống mô tả ở hình 2.15, robot có nhiệm vụ tìm kiếm và báo cáo vị trí của ấm trà đến người dùng Hệ thống trực quan của robot sử dụng camera trước để nhận diện ấm trà, với khoảng cách 1m từ vị trí của nó.

Trong tình huống này, việc thông báo cho người dùng rằng ấm trà đang cách camera 1 mét không thực sự hữu ích Người dùng có thể muốn biết vị trí chính xác của ấm trà trong phòng Để cung cấp thông tin này, chúng ta cần nắm rõ các đặc điểm liên quan.

• Vị trí của ấm trà như thế nào với camera

• Vị trí và hướng của camera đối với trọng tâm robot

• Vị trí của robot ở trong phòng

Chúng ta nhận thấy rằng vấn đề 1 và 3 đang là những thách thức lớn Tuy nhiên, hiện tại, chúng ta hoàn toàn có khả năng thu thập thông tin liên quan đến những vấn đề này.

Odometry là phương pháp sử dụng dữ liệu từ cảm biến chuyển động để ước lượng sự thay đổi vị trí theo thời gian Các robot, bao gồm robot có chân và robot có bánh, áp dụng odometry để xác định vị trí tương đối so với điểm xuất phát Chẳng hạn, khi robot di chuyển thẳng, nếu biết đường kính bánh xe, nó có thể tính toán khoảng cách đã đi bằng cách đếm số vòng quay bánh xe Thường thì, robot được trang bị bộ mã hóa trục gắn vào bánh xe, phát ra một số xung cố định cho mỗi vòng quay, giúp bộ xử lý ước tính khoảng cách di chuyển thông qua việc đếm các xung này.

Odometry là một cảm biến vị trí phổ biến cho robot di động, nhưng nó có những hạn chế do tính chất đo lường tích lũy, dẫn đến việc lỗi cảm biến gia tăng theo thời gian Để duy trì độ chính xác trong việc xác định vị trí, robot cần định kỳ sử dụng các cảm biến khác nhằm ngăn ngừa sự tích tụ lỗi quá mức Các nguồn lỗi ảnh hưởng đến Odometry bao gồm nhiều yếu tố khác nhau.

• Đo đường kính bánh xe không chính xác

• Kích thước các bánh xe khác nhau trong hệ thống nhiều bánh lái

• Lỗi đếm xung trong hệ thống sử dụng encoders

Hình 2.16 Tư thế của robot (x,y,θ)

Robot di động hoặc phương tiện với 6 trục tự do (DOF) được mô tả bằng dáng đứng (pose) gồm vị trí (x, y, z) và dáng điệu (Roll, Pitch, Yaw) Trong đó, Roll thể hiện sự quay vòng, Pitch chỉ hướng quay tiến hoặc lùi, và Yaw biểu thị phương hướng hoặc định hướng di chuyển của robot trong môi trường x-y.

Robot trong không gian 2 chiều được mô tả bằng 2D pose (x, y, theta), trong đó theta biểu thị hướng di chuyển của robot Hệ thống tọa độ toàn cầu, như thể hiện trong Hình 2.16, giúp xác định vị trí của robot Cần lưu ý rằng theta chỉ phản ánh hướng đi về phía trước của robot.

SLAM và Navigation

Định vị robot (Robot Localization)

Dò đường robot tự động đã trở thành mục tiêu nghiên cứu quan trọng cho nhiều ứng dụng, từ xe quân sự đến khám phá không gian và tự động lái trên cao tốc Một yêu cầu thiết yếu là robot phải có kiến thức chính xác về vị trí hiện tại so với khung tham chiếu cố định Trong các ứng dụng di chuyển đến vị trí mục tiêu, robot cần ước tính chính xác vị trí của mình để lập kế hoạch và xác nhận lộ trình Đối với các ứng dụng thăm dò, thông tin vị trí cũng được sử dụng để tránh những điểm dư thừa Quá trình ước tính vị trí với khung tham chiếu cố định được gọi là khả năng dò đường của robot.

Robot di động có khả năng tự định vị thông qua hai phương pháp: sử dụng cảm biến nội bộ và cảm biến bên ngoài Cảm biến nội bộ như encoder hoặc IMU giúp dự đoán chuyển động của robot và thu thập dữ liệu có thể tích hợp để tính toán sự chuyển đổi tuyến tính Phương pháp này được gọi là Odometry, cho phép tính toán vị trí, nhưng khi chỉ sử dụng một mình, nó có thể dẫn đến sai số tích lũy trong vị trí toàn cục theo thời gian.

Cảm biến ngoài như máy quét laser hoặc camera thu thập dữ liệu từ môi trường xung quanh Dữ liệu này được sử dụng để xác định vị trí tương đối và ước tính chuyển vị của robot, giúp cải thiện độ chính xác trong quá trình di chuyển Trong một số trường hợp, cảm biến ngoài có thể phát triển và thay thế cho phương pháp odometry truyền thống.

Xây dựng bản đồ (Robot Mapping)

Xây dựng bản đồ là quá trình mà robot quét toàn bộ môi trường xung quanh để xác định không gian và các vật cản, từ đó tạo ra một mô hình bản đồ Việc này rất quan trọng cho việc định vị và điều hướng chính xác.

SLAM (Simulatanous Localization and Mapping)

SLAM (Simultaneous Localization and Mapping) là thuật toán cho phép robot thực hiện việc định vị và xây dựng bản đồ cùng một lúc Thuật toán này giúp robot di chuyển, xác định vị trí của nó và nhận biết không gian xung quanh Sau khi quét xong môi trường, robot có khả năng tự di chuyển đến bất kỳ vị trí nào và cập nhật thông tin về môi trường xung quanh Ngay cả khi vị trí thay đổi, robot vẫn có thể tự định vị lại chính xác vị trí của mình.

SLAM được xem như một vấn đề tương tự như câu hỏi "quả trứng hay con gà trước" Bản đồ đóng vai trò quan trọng trong việc định vị, trong khi việc xác định vị trí và hướng đi lại cần thiết để xây dựng bản đồ.

SLAM rất thích hợp bởi vì những lý do sau:

• Nó chứa những bài toán cơ bản cho robot tự động thực sự

• SLAM là vấn để cơ bản cho hầu hết hệ thống dò đường

SLAM (Simultaneous Localization and Mapping) có nhiều ứng dụng đa dạng, bao gồm trong nhà và ngoài trời, cũng như trong không khí và dưới nước Công nghệ này được áp dụng cho cả thiết bị tự động và có người lái, mang lại hiệu quả cao trong việc định vị và lập bản đồ.

• Trong nhà: Quét bụi, cắt cỏ

• Dưới nước: Giám sát san hô…

• Không gian: Xây dựng địa đình cho việc định vị

Hình 2.17 Các ứng dụng của SLAM

Khả năng dẫn đường của robot là yếu tố cực kỳ quan trọng trong việc điều hướng trong môi trường, giúp tránh va chạm và các tình huống không an toàn như nhiệt độ cao, phóng xạ và điều kiện thời tiết xấu Đối với những robot có mục đích cụ thể, việc xác định và tìm kiếm các địa điểm trong môi trường là cần thiết Dẫn đường không chỉ bao gồm việc xác định vị trí hiện tại của robot trong khung tham chiếu mà còn lập kế hoạch để di chuyển đến vị trí mục tiêu.

Thuật toán Dijkstra cho global planner

Trong quá trình điều hướng robot đến vị trí mong muốn, việc lập kế hoạch đường đi từ điểm bắt đầu đến điểm kết thúc là rất quan trọng Để tối ưu hóa lộ trình, cần tìm đường đi ngắn nhất giữa hai điểm Thuật toán Dijkstra là một trong những giải pháp đơn giản và hiệu quả để xác định đường đi tối ưu nhất cho robot.

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 có thể là vô hướng hoặc có hướng Mỗi cạnh trong đồ thị đều gắn với một trọng số, thể hiện chi phí hoặc khoảng cách giữa các đỉnh.

Để tính toán đường đi ngắn nhất từ đỉnh nguồn s đến từng đỉnh trong đồ thị có 22 trọng số dương, chúng ta sẽ sử dụng thuật toán Dijkstra Thuật toán này hoạt động bằng cách khởi tạo khoảng cách từ đỉnh nguồn đến các đỉnh khác là vô cùng lớn, trừ đỉnh nguồn s có khoảng cách bằng 0 Sau đó, thuật toán sẽ lặp lại việc cập nhật khoảng cách cho các đỉnh kề dựa trên trọng số, cho đến khi tìm ra đường đi ngắn nhất đến tất cả các đỉnh trong đồ thị Kết quả cuối cùng sẽ cung cấp cho chúng ta khoảng cách ngắn nhất từ đỉnh nguồn đến từng đỉnh trong đồ thị.

Bước đầu tiên trong việc tìm đường đi ngắn nhất là xác định tập hợp S = {} bao gồm các soure_node, trong đó current_node là node hiện tại đang được xem xét và passed_node là các node đã được kiểm tra Node đầu tiên được chọn làm current_node sẽ là node đích (a) trong bài toán.

Bước 2: Khởi tạo giải thuật với current_node là node đích (a) và cost(N) là giá trị của đường đi ngắn nhất từ N đến node đích

Bước 3: Xem xét các node kề N với current_node Định nghĩa d(current_node,N) là khoảng cách giữa node kề N và current_node Tính p = d(current_node,N) + cost(current_node) Nếu p nhỏ hơn cost(N), thì cập nhật cost(N) thành p; ngược lại, cost(N) giữ nguyên giá trị.

Bước 4: Sau khi xét hết các node kề N, đánh dấu current_node thành passe_node

Bước 5: Tìm current_node mới với 2 điều kiện: không phải passed_node và cost(current_node) là nhỏ nhất

Bước 6: Nếu tập S = {} chứa đủ các node của đồ thị thì dừng thuật toán

Để hiểu rõ hơn về thuật toán, chúng ta sẽ xem xét một ví dụ về việc tìm đường ngắn nhất từ điểm node C đến các node còn lại.

Hình 2.18 Ví dụ về thuật toán Dijkstra

Trong quá trình thực hiện thuật toán, cost(node) được định nghĩa là khoảng cách ngắn nhất từ mỗi node đến node C, và giá trị này được đánh dấu bằng màu xanh da trời trên hình Khi thuật toán khởi đầu, cost(C) được mặc định là 0, trong khi cost(A), cost(B), cost(D), và cost(E) đều được thiết lập là vô cực.

Thuật toán hoạt động bằng cách xem xét tất cả các nút kề với current_node, cụ thể là A, B và D Chúng ta sẽ bắt đầu với nút B và thực hiện 4 bước tiếp theo.

• Tìm được khoảng các từ current_node đến node B: d(C,B) = 7

• Tính toán giá trị đường đi từ node đích => current_node =>node B : p = d(C,B) + cost(current_node) = 0 + 7 = 7

• Nếu giá trị vừa tính p < cost(B) thì cost(B) = p, ngược lại thì cost(B) giữ nguyên ( ở đây 7 < infinity nên cost(B) = 7 )

• Đánh dấu cost(B) lên hình

Khi xem xét B liên quan đến A và D, ta có cost(A) = 1 và cost(D) = 7 Sau khi kiểm tra tất cả các node kề với current_node, chúng ta sẽ chuyển current_node thành passed_node, tức là node đã được xem xét passed_node sẽ được đánh dấu bằng một dấu tích xanh trên hình ảnh sau.

Hình 2.19 Ví dụ về thuật toán Dijkstra 1

Bây giờ chúng ta sẽ chọn 1 current_node mới với 2 điều kiện:

• current_node không thể là passed_node

• cost(current_node) có giá trị nhỏ nhất

Nếu xét trên hình, current_node tiếp theo sẽ là node A Ta đánh dấu node

Ta tiếp tục thực hiện thuật toán bằng cách xem xét các nút kề với current_node, với điều kiện rằng nút kề không được là passed_node Do đó, trong trường hợp này, chúng ta chỉ xem xét nút B.

- p < cost(B) ( 4 < 7 ) Vậy cost(B) = 4 Đánh dấu cost(B) lên hình:

Hình 2.20 Ví dụ về thuật toán Dijkstra 2

Tiếp tục thuật toán cho đến khi đến khi xét hết tất cả các node và đánh dấu node E trở thành passed_node và kết thúc thuật toán

Hình 2.21 Ví dụ về thuật toán Dijkstra 3

Vậy ta có kết quả của thuật toán với đường đi ngắn nhất từ C đến các điểm còn lại là:

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 trong một bài toán bất kì.[5]

Hình 2.22 Hoạch định đường đi dùng thuật toán Dijkstra

Thuật toán Dynamic Window Approach

Thuật toán Dynamic Window Approach (DWA) được sử dụng để xác định tín hiệu điều khiển tối ưu cho robot, giúp nó di chuyển an toàn và hiệu quả đến đích.

Thuật toán này bao gồm hai bước chính: cắt giảm không gian tìm kiếm của vận tốc và xác định vận tốc tối ưu trong không gian tìm kiếm đó, giúp tối ưu hóa quá trình lập kế hoạch toàn cầu một cách nhanh chóng và hiệu quả.

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 chỉ xem xét quỹ đạo hình tròn, được xác định duy nhất bởi cặp vận tốc thẳng và vận tốc xoay (𝑣, 𝜔).

Vận tốc cho phép đóng vai trò quan trọng trong việc tạo ra quỹ đạo an toàn cho robot, giúp tránh va chạm với vật cản Một cặp vận tốc (𝑣, 𝜔) được coi là hợp lệ khi robot có khả năng 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 đường cong tương ứng với cặp vận tốc đó Việc xác định vận tốc cho phép là cần thiết để đảm bảo an toàn trong quá trình di chuyển của robot.

- 𝑉 𝑎 là chuỗi các giá trị vận tốc (𝑣, 𝜔) cho phép robot dừng trước vật cản mà không có sự va chạm

- 𝑑𝑖𝑠𝑡(𝑣, 𝜔) 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

- 𝑣 𝑏 ̇ 𝜔 𝑏 ̇ 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

Xét một ví dụ tình huống :

Hình 2.23 Ví dụ tình huống

Hình 2.24 không gian vận tốc trong DWA

Hình 2.21 minh họa các vận tốc cho phép Va với gia tốc 𝑣 𝑏 ̇ 𝜔 𝑏 ̇ trong tình huống này, trong khi các vận tốc không cho phép được thể hiện bằng vùng màu xám tối hơn.

Cửa sổ động là một phương pháp tối ưu hóa không gian tìm kiếm bằng cách xem xét các gia tốc hạn chế do động cơ tác động Phương pháp này chỉ cho phép các vận tốc khả thi trong khoảng thời gian tiếp theo, nhằm hạn chế vận tốc cho phép dựa trên gia tốc tối đa của robot Gọi ∆𝑡 là thời gian thực thi gia tốc 𝑣̇ và 𝜔̇, và (𝑣𝑎, 𝜔𝑎) là vận tốc thực của robot Từ đó, vận tốc 𝑉𝑑 sẽ được định nghĩa dựa trên các yếu tố này.

Hình 2.25 Vận tốc trong cửa sổ động Vd

Sau khi hoàn thành ba bước trên, chúng ta xác định được không gian tìm kiếm 𝑉𝑟 của cửa sổ động Không gian vận tốc khả thi được ký hiệu là Vs, và 𝑉𝑟 được định nghĩa là giao của các khu vực hạn chế.

Từ kết quả tìm kiếm không gian 𝑉𝑟 , chọn một vận tốc trong 𝑉𝑟

Ta có hàm mục tiêu được định nghĩa như sau :

Để tối ưu hóa vận tốc ngõ ra, hàm mục tiêu G(v, ω) cần đạt giá trị tối đa, với G(v, ω) được xác định bởi công thức G(v, ω) = α heading(v, ω) + β dist(v, ω) + γ vel(v, ω) Để thực hiện điều này, cần thực hiện các bước cụ thể nhằm cải thiện các yếu tố ảnh hưởng đến hàm mục tiêu.

Heading là giá trị đo tiến độ của robot hướng đến đích, đạt giá trị tối đa khi robot di chuyển trực tiếp về phía mục tiêu Giá trị của ℎ𝑒𝑎𝑑𝑖𝑛𝑔(𝑣, 𝜔) được tính theo công thức 180 - 𝜃, trong đó 𝜃 là góc giữa hướng di chuyển của robot và điểm đích.

Hình 2.26 Heading của robot trong DWA

Không gian trống (clearance) được định nghĩa bởi hàm 𝑑𝑖𝑠𝑡(𝑣, 𝜔), thể hiện khoảng cách từ robot đến vật cản gần nhất trên quỹ đạo cong của nó Khi không có vật cản, giá trị này sẽ rất lớn Ngược lại, nếu giá trị này nhỏ, khả năng robot gặp vật cản sẽ cao hơn, và robot sẽ cần di chuyển xung quanh vật cản đó.

- Vận tốc: hàm 𝑣𝑒𝑙(𝑣, 𝜔) là vận tốc di chuyển thẳng của robot và hỗ trợ di chuyển nhanh hơn

Các hệ số 𝛼, 𝛽, 𝛾 được điều chỉnh phù hợp với đặc điểm của robot và môi trường hoạt động Khi hàm mục tiêu đạt giá trị tối đa, quỹ đạo tối ưu sẽ được xác định với vận tốc (𝑣, 𝜔) tốt nhất, phản ánh kết quả của thuật toán.

Mô hình động học của Robot

Khung tọa độ gốc (𝑭 𝑾 ) và khung Robot (𝑭 𝑹 )

Hệ chuyển động của robot được thiết kế tương tự như chuyển động của khớp cánh tay, sử dụng nền tảng di chuyển với n bánh xe Mecanum Robot trang bị bánh xe Mecanum có khả năng di chuyển linh hoạt theo các hướng (x, y) và xoay quanh trục z với góc θ, cho phép thực hiện nhiều chuyển động mong muốn.

Khung tọa độ của robot trong không gian 2D được xác định bởi biến khớp x=(x,y,θ) 𝑇, thuộc tập hợp C, là một tập con của 𝑅 3 Tư thế của robot trong khung tọa độ gốc được thể hiện rõ ràng qua các giá trị này.

Khung tọa độ Robot và khung bánh xe (𝑭 𝒊 )

Ta có 𝜑̇ = (𝜑 1 ̇ , 𝜑 2 ̇ , …, 𝜑 𝑛 ̇ ) là tốc độ góc của các bánh xe i và có J là ma trận jacobi với các tham số không đổi

Đối với bánh xe i, công thức 𝑞 𝑅 ̇ = 𝐽 + 𝜑̇ được áp dụng, trong đó 𝐽 + =(𝐽 𝑇 𝐽) −1 𝐽 𝑇 Khung bánh xe (Fi) và khung con lăn (Fr,i) được đặt ở vị trí cố định trong khung robot FR, như thể hiện trong Hình 2.28 Vị trí của khung bánh xe Fi được xác định so với khung robot.

Hình 2.28 Khung tọa độ bánh xe trong khung tọa độ Robot

Khung robot được mô tả bởi ba tham số không đổi: αi, li và δi, trong đó δi là góc xoay giữa khung con lăn Fi và khung bánh xe FR, thường bằng 0 Góc γi xác định vị trí của con lăn so với khung bánh xe, trong khi ϕi(t) điều khiển bánh xe và xác định góc quay quanh trục ngang của nó Bánh xe được điều khiển theo hướng trục Xi và có một điểm tiếp xúc với mặt phẳng, cho phép nó xoay quanh điểm này (trục Zi) Để đơn giản, giả sử chỉ có một con lăn tiếp xúc với mặt phẳng, với điểm tiếp xúc nằm ở giữa tâm của con lăn và bánh xe Khung con lăn Fr,i và khung bánh xe Fi đều có gốc tọa độ từ điểm tiếp xúc này, trong khi trục xr,i nằm trong trục của con lăn Bánh xe có khả năng di chuyển tự do theo hướng trục yr,i.

Trong khung tọa độ con lăn Fr,i ta có:

𝑥 𝑟,𝑖 𝑅 ̇ = 𝑥 𝑅 ̇ cos(γi + δi) + 𝑦 𝑅 ̇ sin(γi + δi)+ li.θ.̇cos(αi + π/2−δi −γi) pt 2.8

𝑦 𝑟,𝑖 𝑅 ̇ = −𝑥 𝑅 ̇ sin(γi + δi) + 𝑦 𝑅 ̇ cos(γi + δi)+ li.θ.̇sin(αi + π/2−δi −γi) pt 2.9

Góc quay giữa khung bánh xe và khung con lăn được ký hiệu là γi, thường có giá trị ± 45 °, trong khi góc giữa khung bánh xe và khung robot được ký hiệu là δi, thường là 0 ° Tốc độ góc của bánh xe điều khiển tốc độ tại điểm tiếp xúc được biểu diễn bằng công thức ˙𝑥𝑖̇= r.i, và từ đó có thể chuyển đổi thành các thành phần x và y trong khung tọa độ con lăn Fr, i.

𝑥 𝑅 ̇ cos(γi + δi) + 𝑦 𝑅 ̇ sin(γi + δi)+ li.θ.̇cos(αi + π/2−δi −γi) = r.𝜑i cos(γi) sin(γi + δi) pt 2.11

Cuối cùng ta có phương trình động học nghịch đảo của bánh xe i:

𝜑i = 1 r.cos(γi) [cos(γi + δi) ; sin(γi + δi) ; li.cos(αi + π/2−δi −γi)] 𝑞 𝑅 ̇ pt

2.12 Bảng 2.5 Tham số bốn bánh xe i 𝛼 𝑖 𝛾 𝑖

Ta có mô hình động học của mô hình xe mecanum 4 bánh :

THIẾT KẾ CHI TIẾT

Thiết kế chi tiết khối điều khiển trung tâm

Khối này chịu trách nhiệm tiếp nhận dữ liệu từ tất cả các khối khác (ngoại trừ khối nguồn) để thực hiện xử lý và tính toán, đồng thời đưa ra các giải thuật cần thiết Nó đảm bảo việc chạy toàn bộ các package và mã code xử lý của hệ thống.

Mục tiêu chính của khối vi điều khiển là tìm kiếm một máy tính có khả năng chạy hệ điều hành ROS và xử lý nhanh chóng, chính xác các thuật toán phức tạp Trên thị trường hiện có nhiều sản phẩm đáp ứng yêu cầu này, nhưng để phát triển hệ thống tối ưu và thông minh hơn, cần lựa chọn thiết bị với thông số chất lượng cao Chúng tôi đã quyết định chọn máy tính cá nhân Asus Fx505GD, mặc dù máy tính nhúng Intel Nuc kit NUC5i7RYH cũng là một lựa chọn tốt, nhưng do thời gian đặt hàng, chúng tôi tạm sử dụng máy tính cá nhân.

Bảng 3.1 Bảng thông số của máy tính Asus FX505GD

Asus FX505GD CPU Intel Core i5-8300H Processor 2.6 Ghz (6Mb Cache,

Tubo 3.9 Ghz) Storage SSD 128GB Sata III 6Mb/s

Memory 8GB DDR4 SDRAM 2666MHz

Hình 3.1 Sơ đồ nguyên lý hoạt đồn các package thực thi trên máy tính PC

Hình 3.1 mô tả các package được thực thi trên máy tính PC cũng như nguyên lý hoạt động của các package

Chức năng của từng package như sau:

- Mobile_robot_des: cấu hình các hệ tọa độ, mô hình 3D

- Mobile_sensor: Dữ liệu từ sensor (lidar)

- Mobile_robot_odom: Thông tin về odometry

- Mobile_robot_ctrl: khối chức tính toán vận tốc của bánh xe

- Mobile_robot_navigation: chức năng navagiton

- Mobile_robot_GPS: chức năng tính toán và hiệu chỉnh của GPS

Nguyên lý hoạt động của xe bắt đầu khi package Nadbot_nav nhận dữ liệu từ các topic /tf, /scan và /Odometry/filter để quét bản đồ lần đầu và xác định vật cản cũng như hệ trục tọa độ tại vị trí ban đầu Khi xác định điểm cuối trên Rviz, package này sẽ đưa ra lộ trình dự kiến từ vị trí hiện tại đến điểm đích, đồng thời tính toán và gửi tốc độ mong muốn qua topic /cmd_vel Package mobile_robot_ctrl nhận dữ liệu này và tính toán vận tốc cho từng bánh xe, gửi tốc độ đến /cmd_vel1 để điều khiển bánh xe Trong trường hợp có tín hiệu /range gửi đến, hệ thống sẽ ưu tiên xử lý tín hiệu này.

32 encoder được gửi lên topic /enc_wheel đến mobile_robot_odom, nơi package mobile_robot_odom truyền dữ liệu Odometry qua /odom để thực hiện localization Tin nhắn từ /odom được đưa vào package Hector_nav_launch kết hợp với dữ liệu từ IMU (/imu/data) và GPS qua topic /Odometry/filter đến package mobile_robot_nav Tại đây, package này xác định lại vị trí hiện tại của xe, nhận diện vật cản và vẽ lại hướng đi dự kiến đến địa điểm đích ban đầu, đồng thời gửi vận tốc mong muốn xuống mobile_robot_ctrl để điều khiển bánh xe Quá trình này diễn ra liên tục cho đến khi xe đến điểm cuối và hướng đúng như đã chọn.

Để hiểu rõ hoạt động của khối điều khiển chính, cần phân tích chi tiết chức năng và thiết kế của từng package trong khối này Package mobile_robot_des có chức năng chính là cấu hình các hệ trục tọa độ của xe, trong đó base_link là hệ tọa độ cơ sở Các hệ tọa độ khác phải tuân theo hệ tọa độ này, đảm bảo sự đồng nhất trong quá trình điều khiển.

Khi cấu hình hệ tọa độ cho IMU, cần lưu ý đến quy ước hệ tọa độ khác biệt so với thông thường Thông thường, các hệ tọa độ được cấu hình với X hướng phía trước, Y bên trái và Z hướng lên trên Tuy nhiên, IMU thường báo cáo dữ liệu với trục X hướng Bắc, Y hướng Đông và Z hướng xuống Do đó, việc khai báo hệ tọa độ của IMU theo hệ trục tọa độ cơ sở của xe là rất quan trọng để dữ liệu được xử lý và sử dụng hiệu quả.

The main coordinate system for the entire vehicle is referred to as base_link This system includes sub-coordinates such as the left front wheel (wheel_front_left), right front wheel (wheel_front_right), left rear wheel (wheel_black_left), right rear wheel (wheel_black_right), the laser coordinate system (laser_frame), and the IMU coordinate system (imu_link) These coordinate declarations are specified in the nadbot.xarco file, with values that must correspond to actual dimensions measured in meters during the design phase The primary function of this package is to receive data from the encoder to calculate and publish odometry data to the /odom topic.

Gói mobile_robot_odom nhận dữ liệu từ Pic về vận tốc dài và vận tốc góc của bốn bánh xe ở thời điểm trước, từ đó tính toán vị trí và hướng của xe tại thời điểm hiện tại.

IMU gửi dữ liệu qua topic /imu/data, bao gồm thông tin về hướng, vận tốc góc và gia tốc tuyến tính Dữ liệu này được kết hợp với Odometry và GPS nhằm nâng cao độ chính xác trong việc định vị.

Để đọc dữ liệu từ cảm biến MPU6050 qua giao thức I2C, PIC32MK được sử dụng Do tín hiệu thu về có nhiều nhiễu, nên trước khi gửi dữ liệu lên PC, cần áp dụng bộ lọc momentum hoặc bộ lọc Kalman để làm mềm tín hiệu đo được.

Khi gửi dữ liệu từ Pic32MK lên TX2 qua cáp USB, việc lấy dữ liệu từ IMU có thể bị ảnh hưởng nếu IMU không được đặt ở vị trí cân bằng Các giá trị nhận được thường bị lệch khỏi giá trị khởi điểm, do đó cần thực hiện hiệu chỉnh để giảm thiểu sai số và đảm bảo độ chính xác của dữ liệu.

Có nhiều phương pháp để hiệu chỉnh dữ liệu, bao gồm việc sử dụng hàm với các thông số tự điều chỉnh hoặc tự hiệu chỉnh trong quá trình chạy code Như đã đề cập trước đó, dữ liệu trong ROS cần được quy đổi theo chuẩn, và dữ liệu của IMU cũng phải tuân theo các tiêu chuẩn này để đảm bảo độ chính xác của kết quả Đơn vị gia tốc cần sử dụng là m/s² (không phải g/s) và đơn vị vận tốc là rad/sec.

Package này chủ yếu hợp nhất hai topic /odom và /imu/data nhằm nâng cao độ chính xác cho Odometry Nó sử dụng package robot_localization của ROS, bao gồm một tập hợp các Node ước tính trạng thái, với mỗi Node là một triển khai của công cụ ước tính trạng thái phi tuyến cho robot trong không gian 3D Trong package này có hai Node ước tính trạng thái là ekf_localization_node và ukf_localization_node, cùng với navsat_transform_node hỗ trợ tích hợp dữ liệu GPS.

Ekf_localization_node thực thi bộ lọc EKF (Extended Kalman Filter) Ufk_localization_node thực thi UKF (Unscented Kalman Filter)

The primary function of this package is to implement SLAM (Simultaneous Localization and Mapping) and navigation algorithms Users can configure all files according to their preferences and execute them using the Navigation Stack of ROS, as detailed in the configuration section under move_base in part [2.1.4.2].

Khối điều khiển robot di động có chức năng chính là nhận tín hiệu vận tốc từ xe, sau đó tính toán theo phương trình động học để xác định vận tốc mong muốn cho từng bánh xe Kết quả cuối cùng sẽ được gửi xuống cả bốn bánh xe để đảm bảo hoạt động chính xác của robot.

Thiết kế chi tiết khối vi điều khiển

Trong đề tài này, khối vi điều khiển được sử dụng để điều khiển bốn động cơ, thu thập và gửi dữ liệu giữa các cảm biến và máy tính Nó cũng quản lý dữ liệu từ encoder của động cơ bánh xe và truyền tín hiệu điều khiển xuống động cơ.

Với các yêu cầu chức năng của khối vi điều khiển chọn sơ bộ các thiết bị như sau :

Hình 3.2 Tổng quan cấu trúc khối vi điều khiển

Trong bài viết này, tôi đề xuất sử dụng vi điều khiển PIC32MK1024MCF064, một sản phẩm 32bit của Microchip, nổi bật trong các ứng dụng điều khiển động cơ.

Hình 3.3 Vi điều khiển PIC32MK1024MCF064

Một số đặc điểm của vi điều khiển PIC32MK1024MCF064:

- Tần số xung clock tối đa 120MHz

- Hỗ trợ tính toán dấu phẩy động, phân số.Bộ nhớ Flash 1024KB hỗ trợ 1 triệu lần ghi xóa, bộ nhớ RAM 256KB, EEPROM 4KB

- Có 8 cặp PWM phụ nhau và 6 module PWM đơn, độ phân giải PWM 8ns, hỗ trợ deadtime, tín hiệu báo lỗi Fault và tín hiệu ngắn mạch

- Có 14 Timers 16 bit, 8 Timers 32 bit, 16 Module Output Compare(OC),

- 16 Module Input Capture (IC), Module thời gian thực RTCC

- 7 Module ADC 12 bit với 42 đầu vào Analog, hỗ trợ ADC 8bit, 10bit, 12bit

- Hỗ trợ các chuẩn truyền thông SPI, UART, CAN, USB, I2C…

- Có 54 chân GPIO có thể lập trình được

- Hỗ trợ debug bằng JTAG/ICSP

Với dòng PIC32, Microchip cho phép lập trình bằng ngôn ngữ C hoặc Assembly thông qua công cụ mạnh mẽ Mplab X IDE, hỗ trợ lập trình và Debug chương trình Người dùng có thể sử dụng Mplab Harmony Configurator để cấu hình xung clock, GPIO và các module ngoại vi như PWM, ADC, Timer, từ đó sinh code và lập trình hiệu quả Công cụ này còn hỗ trợ bộ thư viện phong phú, bao gồm thư viện điều khiển động cơ với các phép biến đổi Park, Clarke và điều chế độ rộng xung SVM.

Từ các yêu cầu của đề tài ta có sơ bộ khối vi điều khiển gồm hai thành phần

- Mạch điều khiển động cơ

- Mạch thu thập tín hiệu sensor

Hình 3.4 Sơ đồ khối vi điều khiển

3.3.2.1 Thiết kế mạch điều khiển động cơ

Mạch điều khiển động cơ có nhiệm vụ chính là tiếp nhận tín hiệu vận tốc từ bộ điều khiển trung tâm, sau đó xử lý tín hiệu này để tạo ra xung PWM với tần số thích hợp nhằm điều khiển bốn động cơ.

Tổng quan phần cứng mạch điều khiển động cơ :

- Khối điều khiển động cơ

- Một số khối mở rộng khác…

Hệ thống nguồn là yếu tố quan trọng trong các mạch vi điều khiển số, ảnh hưởng lớn đến hiệu suất hoạt động của mạch Để đảm bảo tính chính xác và ổn định, nguồn điện cần được thiết kế cách ly giữa các mạch và các loại nguồn khác nhau Nguồn vào sử dụng nguồn một chiều DC từ acquy 24VDC.

Các loại nguồn sử dụng trong hệ thống gồm có:

- Nguồn 5V, 3.3V cách ly cho vi điều khiển PIC32MK, IC 74HC245, ULN2803

- Nguồn 3.3V cách ly truyền thông CAN, I2C, RS485,UART…

Hình 3.6 Sơ đồ nguyên lý khối nguồn

Khối nguồn sử dụng modul nguồn cách ly URB2405 chuyển đổi điện áp 24VDC đầu vào thành 5VDC, từ đó tạo ra điện áp 3,3VDC thông qua IC ổn áp LM117-3,3V IC này có độ ổn định cao và chuyên dụng cho việc ổn định điện áp tuyến tính thấp với sụt áp thấp, đảm bảo hiệu suất và độ tin cậy trong các ứng dụng điện tử.

• Model nguồn cách ly URB2405-6WR2 :

- điện áp vào 9 V~36 VDC, điện áp ra 5 VDC

- Dải điện áp đầu vào rộng 4:1

- điện áp vào 4.8 V~ 8.7 VDC b Khối điều khiển động cơ

Khối điều khiển động cơ sử dụng vi điều khiển Pic để nhận tín hiệu từ bộ điều khiển trung tâm, tạo xung PWM và điều chỉnh tốc độ động cơ Các IC ULN28xx được sử dụng để tăng cường dòng điện, giúp điều khiển động cơ hiệu quả hơn Nhiệm vụ chính của khối này là hỗ trợ robot di chuyển và kiểm soát tốc độ cũng như hướng quay của động cơ.

Hình 3.7 Sơ đồ nguyên lý khối điều khiển động cơ

Hình 3.7 minh họa nguyên lý hoạt động của khối điều khiển động cơ Sau khi khối điều chính (PC) xử lý tín hiệu và tính toán vận tốc phù hợp, nó sẽ gửi giá trị vận tốc xuống mạch điều khiển động cơ Lúc này, vi điều khiển Pic sẽ phát xung PWM với tần số chính xác để điều khiển bốn động cơ.

IC ULN2803 là một mạch đệm dòng, giúp tạo ra dòng điện lớn hơn để cung cấp cho động cơ Tín hiệu từ vi điều khiển Pic được đưa vào các chân từ 1 đến 8 của ULN2803, điều khiển mức tín hiệu ở các chân ra từ 11 đến 18, kết nối với driver của động cơ.

• Thông số kĩ thuật của ULN2803 :

- Điện áp ra max: 50V (Vce)

- Điện áo vào max: 30V (Vin)

- Dòng điện đầu ra liên tục: Ic = 500mA

- Dòng điện đầu vào liên tục: 𝐼 𝐼𝑁 = 25mA

- Công suất tiêu tán trên mỗi cặp darlington: 1W

ULN2803 là một linh kiện nổi bật với khả năng chịu đựng dòng điện lớn, mỗi kênh có thể đạt đến 500mA trong thời gian dài và biên độ đỉnh lên tới 600mA.

Khi có sự khác biệt giữa vị trí thực và vị trí lệnh bằng 0, tín hiệu ra PEND sẽ được kích hoạt Tín hiệu ALM sẽ phát sinh khi có một trong các bảo vệ quá áp hoặc quá dòng từ driver động cơ thông qua bộ đệm 74HC245 trả về vi điều khiển.

IC 74HC245 bộ đệm dữ liệu hai chiều, hoạt động ở điện áp ≤ 7V dòng ra tầm 20 ~ 30mA, công suất mạch tầm 500 ~ 700mW c Khối truyền thông

Khối truyền thông có nhiệm vụ kết nối trung gian giữa khối điều khiển chính và mạch điều khiển động cơ

Hình 3.8 Sơ đồ nguyên lý khối truyền thông

Hình 3.8 trình bày các mạch truyền thông như UART, RS485 và truyền thông không dây qua Wifi, được thiết kế để đảm bảo thông tin giao tiếp giữa PC và mạch điều khiển động cơ luôn sẵn sàng và liên tục được trao đổi.

3.3.2.2 Thiết kế mạch thu thập tín hiệu sensor

Hệ thống chính của robot có chức năng thu thập tín hiệu từ các cảm biến như encoder, cảm biến siêu âm SRF05, cảm biến gia tốc Adxl335 và MPU6050 Các tín hiệu này được gửi về khối điều khiển chính (PC), nơi các stack trung tâm sẽ xử lý để xác định vị trí, hướng, tốc độ và góc nghiêng của robot Dựa trên những thông tin này, tín hiệu sẽ được gửi xuống mạch điều khiển chính để điều khiển 4 động cơ hoạt động theo mong muốn.

Tổng quan phần cứng mạch thu thập tín hiệu sensor :

Khối nguồn là thành phần cung cấp điện cho toàn bộ mạch thu thập, được thiết kế tương tự như khối nguồn của mạch điều khiển động cơ Nó sử dụng nguồn vào 24 VDC từ acquy để tạo ra nguồn xung 5VDC và 3,3 VDC, cung cấp năng lượng cho vi điều khiển Pic và một số IC khác trong mạch.

- Khối vi điều khiển chính : Vi điều khiển Pic32Mk có chức năng đọc tín hiệu từ các sensor, rồi gửi về khối điều khiển PC

- Khối Eprom : Để lưu trữ các trạng thái của robot ,tránh trường hợp mất kết nối với khối điều khiển chính thì vẫn có thể điều khiển được robot

Khối đọc tín hiệu sensor có nhiệm vụ thu thập dữ liệu từ encoder, IMU và định vị GPS, giúp xác định chính xác vị trí của xe trong không gian.

Hình 3.9 Bản vẽ 3D mạch thu thập tín hiệu sensor a Khối đọc encoder

Khối đọc encoder có chức năng theo dõi tốc độ, chiều quay của động cơ và vị trí ước lượng của robot

Hình 3.10 Sơ đồ nguyên lý khối đọc encoder

Thiết kế khối sensor

Khối sensor cung cấp dữ liệu thiết yếu cho việc lập bản đồ, định vị và quét vật cản Sau khi thu thập, dữ liệu này sẽ được gửi đến khối vi điều khiển để chuyển tiếp lên khối xử lý chính (PC).

Lựa chọn linh kiện và phân tích thiết kế

Để thực hiện việc mapping và localization, cần hai loại dữ liệu chính là Odometry và LaserScan Odometry giúp xác định vị trí hiện tại của xe so với điểm xuất phát, trong khi LaserScan tạo bản đồ và nhận diện vật cản Odometry được lấy từ tín hiệu phản hồi của encoder bánh xe, nhưng để nâng cao độ chính xác, cần kết hợp với IMU để theo dõi hướng di chuyển của xe và GPS để xác định vị trí mới khi xe bị trượt hoặc di chuyển không mong muốn IMU cung cấp các dữ liệu quan trọng như vận tốc góc và gia tốc tuyến tính Trong nghiên cứu này, chúng tôi lựa chọn sử dụng cảm biến MPU 6050 và ADXL335 để thu thập các dữ liệu này.

• Điện áp sử dụng: 3~5VDC

• Điện áp giao tiếp: 3~5VDC

• Giá trị Gyroscopes trong khoảng: +/- 250 500 1000 2000 degree/sec

• Giá trị Acceleration trong khoảng: +/- 2g, +/- 4g, +/- 8g, +/- 16g

MPU6050 sẽ bao gồm hai cảm biến: cảm biến gia tốc (accelerometer) và cảm biến quay (gyroscope)

Accelerometer (hay còn gọi là accel) là một cảm biến đo gia tốc của module, thường hoạt động trên 3 trục xyz để phản ánh 3 chiều không gian Các loại 1 và 2 trục ít được sử dụng hơn Cần lưu ý rằng accel không chỉ đo gia tốc do chuyển động mà còn bao gồm cả gia tốc trọng lực trong giá trị đo thực tế.

Gyroscope, hay còn gọi là gyro, là một cảm biến quan trọng dùng để đo tốc độ quay quanh một trục, thường được trang bị với ba trục xyz tương tự như cảm biến gia tốc Cảm biến lidar A1 cũng là một thiết bị đáng chú ý trong lĩnh vực cảm biến hiện đại.

LaserScan được sử dụng để xây dựng bản đồ 2D và xác định vật cản Trong dự án này, chúng tôi áp dụng lidar A1 cho robot, phục vụ cho việc SLAM, định vị và tránh chướng ngại vật hiệu quả.

• Sử dụng Lidar A1 theo các bước sau :

- Kết nối Lidar A1 với module USB thông qua các header được cung cấp, sau đó kết nối với PC bằng cáp USB to micro USB

- Như điều kiện tien quyết PC đã cài đặt Ubuntu 18.04 với ROS Melodic và có một không gian làm việc tên ~/catkin_ws

Để bắt đầu, hãy tải và thêm gói rplidar_ros vào không gian làm việc của bạn Gói này cung cấp các tệp cấu hình cần thiết cho các giao thức truyền thông nối tiếp Thực hiện các thao tác này sẽ giúp bạn tự động xử lý cổng nối tiếp một cách hiệu quả.

/dev/tty < USO or ACM >

- Chạy tệp với lệnh roslaunch rplidar_ros veiw_rplidar.launch để trực quan hóa trên Rviz Terminal output sẽ xuất ra các phạm vi tối thiểu và tối đa,

Tốc độ truyền dữ liệu là 45 và có thể được cấu hình thông qua các thông số trong package rplidar_ros/lidar.launch Dữ liệu sẽ được phát vào topic /scan và hiển thị trên Rviz.

LiDAR (Light Detection and Ranging) là công nghệ cảm biến sử dụng chùm tia laser công suất thấp để thu thập dữ liệu từ môi trường Khi tia laser chiếu ra và phản chiếu trở lại từ các vật thể, hệ thống sẽ ghi lại thời gian phản hồi để tạo ra bản đồ ba chiều mô phỏng không gian, đồ vật và con người Công nghệ này thường được áp dụng trong việc phát hiện vật cản và lập bản đồ cho robot, giúp nâng cao khả năng điều hướng và an toàn.

Cảm biến Laser Radar (Lidar) RPLIDAR A1 là một thiết bị quét laser 360° sử dụng giao tiếp UART, cho phép dễ dàng kết nối với vi điều khiển, máy tính nhúng hoặc thông qua mạch chuyển USB-UART Với khả năng quét xa lên đến 12m, cảm biến này có tốc độ quét 5000 lần/s, mang lại hiệu suất cao trong việc thu thập dữ liệu không gian.

360 0 , phù hợp cho vô số các ứng dụng khác nhau c cảm biến siêu âm SRF05

Thông số kĩ thuật của cảm biến siêu âm SRF05 : Điện áp hoạt động: 5VDC

Tín hiệu giao tiếp: TTL

Chân tín hiệu: Echo, Trigger

Hình 3.16 Cảm biến siêu âm SRF05

Tần số phát sóng: 40Khz

Khoảng cách đo được của cảm biến là từ 2 đến 450cm, với điều kiện lý tưởng là không gian trống và bề mặt vật thể phẳng Trong điều kiện bình thường, cảm biến cho kết quả chính xác nhất ở khoảng cách dưới 100cm Sai số đo lường là 0.3cm, và sai số sẽ giảm khi khoảng cách gần hơn và bề mặt vật thể phẳng hơn.

Cảm biến siêu âm Ultrasonic SRF05 giúp nhận biết khoảng cách từ vật thể đến cảm biến bằng sóng siêu âm, với thời gian phản hồi nhanh và độ chính xác cao, lý tưởng cho ứng dụng phát hiện vật cản và đo khoảng cách Để thực hiện đo khoảng cách, cảm biến phát một xung ngắn 5 microSeconds từ chân Trig và tạo ra xung HIGH ở chân Echo cho đến khi nhận được sóng phản xạ Chiều rộng của xung tương ứng với thời gian sóng siêu âm phát ra và quay trở lại, với tốc độ âm thanh trong không khí là 340 m/s, tương đương 29,412 microSeconds/cm.

(106 / (340*100)) Khi đã tính được thời gian, ta sẽ chia cho 29,412 để nhận được khoảng cách

Xe tự hành yêu cầu độ chính xác cao để tránh va chạm với chướng ngại vật Cảm biến lidar A1 đóng vai trò quan trọng trong việc quét và phát hiện vật cản, nhưng nếu vật cản nằm trong phạm vi nhỏ hơn hoặc bằng 20cm mà lidar không nhận diện được, cảm biến siêu âm SRF05 sẽ tiếp tục quét và gửi dữ liệu đến khối điều khiển mobile_robot_ctrl Tại đây, khối điều khiển sẽ tính toán để đưa ra vận tốc và hướng đi phù hợp cho xe Ngoài ra, cảm biến GPS GY Neo 6M cũng góp phần vào việc định vị chính xác.

Hình 3.17 Cảm biến địn h vị GPS Neo 6M

• Mạch định vị GPS GY-NEO 6M, nguồn cung cấp 3V-5V

• Mô-đun với ăng-ten bằng sứ, tín hiệu mạnh

• EEPROM power-down lưu dữ liệu tham số cấu hình

• Với pin dự phòng dữ liệu

• Chỉ báo tín hiệu LED

• Lắp đặt khẩu độ 3mm

Thiết lập một số chức năng quan trọng trên module :

- Serial port hoạt động ở baud rate 9600

Mức năng lượng kết nối tối đa (0) cung cấp tọa độ chính xác nhất, nhưng yêu cầu module phải được đặt ngoài trời, vì trong nhà khó có sóng Để tiết kiệm năng lượng, người dùng cũng có thể lựa chọn mức Eco power (4).

LED sẽ nhấp nháy với tần số 1Hz khi chưa kết nối với tín hiệu GPS Khi module kết nối thành công với GPS, LED sẽ nhấp nháy nhanh hơn với tần số 5Hz, cho thấy tín hiệu đã được thiết lập.

The IMU data is published on the topic /imu/data using the message type sensor_msgs::Imu This data is integrated with information from the /odom topic, which is published by the encoder data from the two wheels Additionally, GPS data is sent to the topic /GPS.

Thiết kế chi tiết khối động cơ và bánh xe

Gồm 4 bánh xe và 4 bộ driver và 4 động cơ được trang bị encoder, nhận lệnh điều khiển từ bộ điều khiển chính gửi qua vi điều khiển để quay bánh cho xe di chuyển Đồng thời đọc giá trị encoder từ 4 bánh để gửi lại lên bộ điều khiển chính vận tốc góc và vận tốc dài của 4 bánh xe hiện tại phục vụ cho việc xác định pose hiện tại của xe cũng như vị trí hiện tại (gửi lên topic /odom)

Tính toán lựa chọn linh kiện và phân tích thiết kế

Tính toán lựa chọn linh kiện

▪ Tại sao phải chọn đúng công suất động cơ?

Việc lựa chọn công suất động cơ phù hợp là rất quan trọng cho hệ thống truyền động Nếu công suất động cơ cao hơn so với yêu cầu tải, động cơ sẽ hoạt động dễ dàng nhưng sẽ làm tăng chi phí đầu tư và giảm hiệu suất Ngược lại, nếu công suất động cơ thấp hơn, nó có thể không đủ sức kéo tải hoặc hoạt động nặng nề, dẫn đến việc cuộn dây nóng quá mức, giảm tuổi thọ hoặc gây hỏng động cơ Để xe có thể di chuyển với trọng lượng 60kg, chúng ta cần tính toán và chọn 4 động cơ và 4 bánh xe mecanum thích hợp.

Khối lượng Robot max tải : M = 60 kg

Bán kính mỗi bánh xe : r = 0,075 m

Gia tốc khi vận tốc đạt vận tốc max trong 2 (s) : a= 0,25 m/𝑠 2

Hệ số ma sát của bánh xe mecanum trên đường nhựa , bê tông khoảng : 𝜇 = 0,7

Ta có tốc độ quay của bánh xe :

2𝜋.0,075 = 64 rpm Theo định luật 2 Neuton : ∑F=Ma

Với Fw : lực đẩy của động cơ vào bánh xe

Fc : Lực cản của môi trường tại điểm tiếp xúc với bánh xe

Ta có công suất cần thiết :

9,55 = 214.5 (Wat) Công suất cần thiết cho mỗi động cơ :

Từ những thông số tính toán như trên ta chọn sơ bộ động cơ hybrid JMC 86J18118H, đi kèm driver 2HSS86H

Hình 3.18 Bộ servo 8Nm JMC 2HSS86H + 86J18118

• Với đặc tính kĩ thuật : Điện áp đầu vào :

- Nguồn vào : AC AC16-70;;;VDC DC24-100V

- Góc bước (deg):1.8; độ chính xác vị trí :1.8±0.09

- tốc độ bình thường 1000 rpm

- tốc độ tối đa: 2000 rpm

• Đi kèm với bộ driver: 2HSS86H

DSP 32-bit sử dụng thuật toán điều khiển vector, kết hợp với ưu điểm của driver servo không chổi than, cho phép điều khiển chính xác theo bước và hướng Hệ thống này đảm bảo không bị mất bước khi nhận lệnh đầu vào theo chiều kim đồng hồ (CW) hoặc ngược chiều kim đồng hồ (CCW).

- Vòng khép kín giữa các ổ đĩa và động cơ thúc đẩy để loại bỏ sự mất bước di chuyển trong hệ thống bước mở lặp

- Mô – men xoắn cao khi khởi động và khi ở tốc độ trung bình thấp, độ cứng cao ở trạng thái dừng

- Phản ứng nhanh, không chậm trễ và không mất thời gian cài đặt

Bánh Xe Mecanum, một loại bánh xe đa hướng, được cấu tạo từ những con lăn nhỏ với trục lắp nghiêng 45 độ so với trục quay chính Với thiết kế đặc biệt này, Bánh Xe Mecanum cho phép thực hiện nhiều chuyển động phức tạp thông qua phương pháp cộng vector.

Bánh xe Mecanum là giải pháp lý tưởng cho các sản phẩm hoạt động trong không gian hạn chế, giúp tiết kiệm thời gian và tăng hiệu quả Với khả năng kết hợp các chuyển động của từng bánh, cấu trúc sử dụng Bánh xe Mecanum có thể thực hiện các chuyển động cơ bản như tiến, lùi, và xoay tròn một cách dễ dàng, đặc biệt là di chuyển ngang trong không gian chật hẹp.

Phân tích thiết kế Với xe dùng 4 bánh xe mecanum khi kết hợp hướng và tốc độ của 4 bánh xe thì sẽ có 12 hướng di chuyển

Hình 3.20 Cách điều hướng của xe khi sử dụng bánh mecanum

Hinh 3.21 Sơ đồ thực thi của động cơ

Xe sử dụng 4 bánh xe mecanum cho phép di chuyển theo 12 hướng khác nhau, mỗi hướng tương ứng với một vận tốc riêng Bộ điều khiển trung tâm truyền vận tốc mong muốn cho 4 bánh xe xuống mạch điều khiển, trong khi vi điều khiển Pic chuyển tín hiệu thành dạng PWM với tần số khác nhau để điều khiển động cơ servo 86J1880EC thông qua bộ driver hybrid 2HSS86H Bộ encoder của động cơ gửi tín hiệu về vi điều khiển, từ đó thông tin này được gửi lại bộ điều khiển trung tâm để tính toán vận tốc thực tế của động cơ, giúp bộ xử lý điều chỉnh vận tốc để đạt được vận tốc mong muốn.

TRIỂN KHAI VÀ KẾT QUẢ

Ngày đăng: 12/06/2022, 10:45

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] ROS, "Robot Operating System Wiki," Global planner, [Online] Available: http://wiki.ros.org/global_planner Sách, tạp chí
Tiêu đề: Robot Operating System Wiki
[2] ROS, " Robot Operating System," Costmap 2D, [Online]Available : http://wiki.ros.org/costmap_2d Sách, tạp chí
Tiêu đề: Robot Operating System
[3] I. Charles River Analytics, "robot_localization," [Online]. Available: http://docs.ros.org/lunar/api/robot_localization/html/ Sách, tạp chí
Tiêu đề: robot_localization
[4] Wiki, "Robot Operating System Wiki," Navigation, [Online]. Available: http://wiki.ros.org/navigation/Tutorials/RobotSetup [5] D. A. Wikipedia, "Wikipedia," [Online].Available:https://en.wikipedia.org/wiki/Dijkstra%27s_algorithm Sách, tạp chí
Tiêu đề: Robot Operating System Wiki," Navigation, [Online]. Available: http://wiki.ros.org/navigation/Tutorials/RobotSetup [5] D. A. Wikipedia, "Wikipedia
[6] ROS, "Robot Operating System," [Online]. Available: http://www.ros.org/is-ros-for-me/ Sách, tạp chí
Tiêu đề: Robot Operating System

HÌNH ẢNH LIÊN QUAN

Hình 2.2 Cấu trúc Filesystem của ROS - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.2 Cấu trúc Filesystem của ROS (Trang 15)
Hình 2.4 Các thành phần cơ bản của tầng ROS Computaion Graph - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.4 Các thành phần cơ bản của tầng ROS Computaion Graph (Trang 16)
Hình 2.6 Chức năng, hoạt động của Topic - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.6 Chức năng, hoạt động của Topic (Trang 18)
Hình 2.7 Chức năng, hoạt động của ROS Service - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.7 Chức năng, hoạt động của ROS Service (Trang 18)
Hình 2.8 Mối quan hệ giữa các thành phần của tầng ROS Computaion Graph - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.8 Mối quan hệ giữa các thành phần của tầng ROS Computaion Graph (Trang 19)
Hình 2.10 Sơ đồ hoạt động của package move_base - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.10 Sơ đồ hoạt động của package move_base (Trang 21)
Hình 2.11 Bản đồ costmap trong ROS - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.11 Bản đồ costmap trong ROS (Trang 22)
Hình 2.12  Giá trị chi phí ảnh hưởng đén hoại động của robot - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.12 Giá trị chi phí ảnh hưởng đén hoại động của robot (Trang 23)
Bảng 2.2 File global_costmap_params.yaml - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Bảng 2.2 File global_costmap_params.yaml (Trang 25)
Bảng 2.3 File local_costmap_params.yaml - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Bảng 2.3 File local_costmap_params.yaml (Trang 25)
Bảng 2.4 File base_local_planer_params.yaml - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Bảng 2.4 File base_local_planer_params.yaml (Trang 26)
Hình 2.14 Ví dụ về sử dụng tf broadcasting stastic tf - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.14 Ví dụ về sử dụng tf broadcasting stastic tf (Trang 27)
Hình 2.15 Hệ trục tọa độ gồm ấm trà, robot, cái bàn - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.15 Hệ trục tọa độ gồm ấm trà, robot, cái bàn (Trang 28)
Hình 2.17 Các ứng dụng của SLAM - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.17 Các ứng dụng của SLAM (Trang 31)
Hình 2.22 Hoạch định đường đi dùng thuật toán Dijkstra - ĐỒ ÁN TỐT NGHIỆP: Thiết kế hệ điều khiển xe tự hành sử dụng bánh đa hướng trên nền tảng ROS
Hình 2.22 Hoạch định đường đi dùng thuật toán Dijkstra (Trang 34)

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w