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

(Đồ án tốt nghiệp) thiết kế và chế tạo robot tự động điều hướng môi trường trong nhà

82 11 0

Đ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

Định dạng
Số trang 82
Dung lượng 2,7 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1: TỔNG QUAN VỀ ĐỀ TÀI (15)
    • 1.1 Xu hướng phát triển của robot hiện đại (15)
    • 1.2 Những vấn đề của robot di động (15)
    • 1.3 Mục tiêu đồ án và phương pháp thực hiện (16)
  • CHƯƠNG 2: HỆ ĐIỀU HÀNH ROBOT ROS (17)
    • 2.1 Giới thiệu hệ điều hành robot ROS (17)
    • 2.2 Tổng quan về cách thức hoạt động của ROS (17)
    • 2.3 Các khái niệm quan trọng trong ROS (18)
      • 2.3.1 Thuật ngữ ROS (18)
      • 2.3.2 Chủ đề (21)
      • 2.3.3 Dịch vụ (22)
      • 2.3.4 Truyền thông trong ROS (23)
    • 2.4 Công cụ trực quan 3D (RViz) (24)
  • CHƯƠNG 3: TÍNH TOÁN THIẾT KẾ PHẦN CƠ KHÍ (26)
    • 3.1 Cấu tạo của robot (26)
    • 3.2 Phương án chọn cơ cấu chuyển động robot [1] (27)
      • 3.2.1 Phương án 1: Robot chuyển động đa hướng loại 4 bánh omni (27)
      • 3.2.2 Phương án 2: Robot chuyển động đa hướng loại 3 bánh omni (28)
      • 3.2.3 Phương án 3: Robot loại 2 bánh vi sai chuyển động độc lập (29)
    • 3.3 Tính toán chọn động cơ [2] (29)
  • CHƯƠNG 4: TÍNH TOÁN, THIẾT KẾ MẠCH ĐIỆN ĐIỀU KHIỂN (32)
    • 4.1 Sơ đồ khối mạch điều khiển (32)
    • 4.2 Tìm hiểu cảm biến Kinect (32)
      • 4.2.1 Giới thiệu chung (32)
      • 4.2.2 Những thành phần chính của Kinect (33)
      • 4.2.3 Tính toán độ sâu (34)
      • 4.2.4 Một số đặc tính (38)
    • 4.3 Động cơ và giải thuật PID vị trí (39)
      • 4.3.1 Động cơ Servo DC (39)
      • 4.3.2 Giải thuật PID vị trí [9] (44)
    • 4.4 Các linh kiện điện tử (45)
      • 4.4.1 Mạch hạ áp LM2596 (45)
      • 4.4.2 Arduino Motor Shield L293D (46)
      • 4.4.3 Arduino Mega 2560 (47)
  • CHƯƠNG 5: THIẾT KẾ CHƯƠNG TRÌNH ĐIỀU KHIỂN (49)
    • 5.1 Nội dung chương trình điều khiển (49)
      • 5.1.1 Tổng quan toàn hệ thống (49)
      • 5.1.2 Hệ thống robot (50)
    • 5.2 Điều hướng (51)
      • 5.2.1 Điều hướng của robot di động (51)
      • 5.2.2 Bản đồ (52)
      • 5.2.3 Vị trí của robot (52)
      • 5.2.4 Cảm biến (53)
      • 5.2.5 Tính toán đường dẫn và lái xe (53)
    • 5.3 SLAM (53)
      • 5.3.1 Phần cứng cần thiết của robot để SLAM (53)
      • 5.3.2 Di chuyển (53)
      • 5.3.3 Đo hình học (53)
      • 5.3.4 Cảm biến đo khoảng cách (53)
    • 5.4 Giải thuật chương trình cho máy tính xử lý (54)
  • KẾT LUẬN (56)
  • TÀI LIỆU THAM KHẢO (57)
    • Hinh 2.3 Chủ đề (0)

Nội dung

Cụ thể như trong môi trường công nghiệp ở nước ngoài, AGV là một loại robot được sử dụng để chuyên chở tự động.. Với mong muốn tạo ra những robot có tính ứng dụng cao như vậy cho đời sốn

TỔNG QUAN VỀ ĐỀ TÀI

Xu hướng phát triển của robot hiện đại

Theo dự đoán trong vòng 20 năm nữa mỗi người sẽ có nhu cầu sử dụng một robot cá nhân như nhu cầu một máy tính PC hiện nay và robot sẽ là tâm điểm của một cuộc cách mạng lớn sau Internet Với xu hướng này, cùng các ứng dụng truyền thống khác của robot trong công nghiệp, y tế, giáo dục đào tạo, giải trí và đặc biệt là trong an ninh quốc phòng thì thị trường robot sẽ vô cùng to lớn

Robot đã có những bước tiến đáng kể trong hơn nửa thế kỷ qua Robot đầu tiên được ứng dụng trong công nghiệp vào những năm 60 để thay thế con người làm những công việc nặng nhọc, nguy hiểm trong môi trường độc hại Do nhu cầu sử dụng ngày càng nhiều trong quá trình sản xuất phức tạp nên robot công nghiệp cần có những khả năng thích ứng linh hoạt và thông minh hơn Ngày nay, ngoài ứng dụng sơ khai ban đầu của robot trong chế tạo máy thì các ứng dụng khác như trong y tế, chăm sóc sức khỏe, nông nghiệp, đóng tàu, xây dựng, an ninh quốc phòng đang là động lực cho sự phát triển của ngành công nghiệp robot

Có thể kể đến những loại robot được quan tâm nhiều trong thời gian qua là: tay máy robot (Robot Manipulators), robot di động (Mobile Robots), robot phỏng sinh học (Bio Inspired Robots) và robot cá nhân (Personal Robots) Robot di động được nghiên cứu nhiều như xe tự hành trên mặt đất AGV (Autonomous Guided Vehicles), robot tự hành dưới nước AUV (Autonomous Underwater Vehicles), robot tự hành trên không UAV (Unmanned Arial Vehicles) và robot vũ trụ (Space robots) Với robot phỏng sinh học, các nghiên cứu trong thời gian qua tập trung vào hai loại chính là robot đi bộ (Walking robot) và robot dáng người (Humanoid robot) Bên cạnh đó các loại robot phỏng sinh học như cá dưới nước, các cấu trúc chuyển động phỏng theo sinh vật biển cũng được nhiều nhóm nghiên cứu, phát triển.

Những vấn đề của robot di động

Robot di động được định nghĩa là một loại xe robot có khả năng tự di chuyển, tự vận động (có thể lập trình lại được) dưới sự điều khiển tự động để thực hiện tốt những công việc được giao Môi trường hoạt động của robot có thể là đất, nước, không khí, không gian vũ trụ hay là sự tổ hợp của các môi trường trên Bề mặt địa hình robot di chuyển có thể là bằng phẳng hoặc thay đổi lồi lõm Những ứng dụng thực tế đòi hỏi những robot di động có tính tự động cao và những kỹ thuật hiện đại, bao gồm sự đa dạng của những cảm biến rẻ mà đáng tin cậy và tính toán điện tử công suất làm tăng tính tự động hóa của robot di động Tính tự động hóa có nghĩa là robot phải dựa vào chính khả năng của nó để xuất ra những dữ liệu vận hành có ích từ bộ phận cảm biến và tự nó đưa ra quyết định thích hợp Một trong các yêu cầu cơ bản của robot tự động thực thụ là khả năng định hướng tốt trong phạm vi môi trường chưa xác định và hình dung ra một bản đồ định hướng Bằng cách sử dụng những quan sát thích hợp từ môi trường, kết hợp với bản đồ cùng lúc để định hướng cho robot đang là một yêu cầu cần nghiên cứu cho robot di động Việc đồng thời định vị và vẽ bản đồ cùng lúc là một phương pháp chung có liên quan đến việc triển khai một hệ thống di động trong môi trường chưa xác định Đối với một robot di động tự động, định hướng là một công việc để di chuyển một cách an toàn từ nơi này đến nơi khác Việc định hướng gặp nhiều khó khăn do nhiều vấn đề khá phức tạp Vấn đề gây trở ngại chính là những hạn chế của việc ước tính năng lượng, những khó khăn trong việc phát hiện và nhận biết đối tượng, những khó khăn trong việc tránh xung đột với các đối tượng khác nhau, và những khó khăn liên quan tới việc sử dụng thông tin cung cấp từ môi trường.

Mục tiêu đồ án và phương pháp thực hiện

Xây dựng mô hình mobile robot có khả năng quét và tạo bản đồ dưới dạng 2D và tự định hướng về đích với tọa độ đích cho trước lúc bắt đầu khởi động Ngoài khả năng định hướng, robot phải tránh được các vật cản có trên quãng đường di chuyển Mục đích sâu xa của đề tài là phát triển một robot tự động thông minh, có thể được sử dụng trong lĩnh vực vận chuyển hàng trong công nghiệp, phục vụ con người, giúp việc như robot hướng dẫn du khách hoặc làm một số công việc đơn giản trong văn phòng hoặc tại gia như mang café, hút bụi, lau nhà, …

Thiết kế mô hình một robot di động tự động, trong đó bao gồm phần gia công cơ khí, mạch công suất, mạch vi điều khiển, đồng thời sử dụng hệ điều hành robot ROS Khối thị giác được chọn là thiết bị chơi game Kinect, thông qua xử lý từ máy tính nó sẽ kết hợp với mạch vi điều khiển giúp robot có khả năng định hướng về đích và tránh vật cản hoàn toàn tự động.

HỆ ĐIỀU HÀNH ROBOT ROS

Giới thiệu hệ điều hành robot ROS

Hệ điều hành Robot (ROS) là phần mềm trung gian robot (tức là bộ sưu tập các khung phần mềm để phát triển phần mềm robot) Mặc dù ROS không phải là một hệ điều hành , nó cung cấp các dịch vụ được thiết kế cho cụm máy tính không đồng nhất như trừu tượng hóa phần cứng , điều khiển thiết bị cấp thấp , thực hiện chức năng thường được sử dụng, chuyển tin nhắn giữa các quy trình và quản lý gói Chạy các bộ quy trình dựa trên ROS được biểu diễn trong biểu đồ kiến trúc nơi quá trình xử lý diễn ra trong các nút có thể nhận, đăng và dữ liệu cảm biến đa kênh, điều khiển, trạng thái, lập kế hoạch, bộ truyền động và các thông điệp khác Mặc dù tầm quan trọng của khả năng phản ứng và độ trễ thấp trong điều khiển robot, bản thân ROS không phải là hệ điều hành thời gian thực (RTOS) Tuy nhiên, có thể tích hợp ROS với mã thời gian thực Việc thiếu hỗ trợ cho các hệ thống thời gian thực đã được giải quyết trong việc tạo ra ROS 2.0 , một phiên bản chính của API ROS sẽ tận dụng các thư viện và công nghệ hiện đại cho lõi ROS chức năng và thêm hỗ trợ cho mã thời gian thực và phần cứng nhúng

Hình 2.1 Logo hệ điều hành ROS

Tổng quan về cách thức hoạt động của ROS

Trước khi chúng ta đi sâu hơn và bắt đầu làm việc với ROS, chúng ta cần xem bức tranh lớn của hệ thống

Nói chung, ROS bao gồm mã và các công cụ giúp mã dự án của bạn chạy và thực hiện công việc được yêu cầu, bao gồm cả cơ sở hạ tầng để chạy nó, giống như các thông điệp truyền giữa các quy trình

ROS được thiết kế để trở thành một hệ thống kết hợp lỏng lẻo trong đó một quy trình được gọi là nút (node) và mỗi nút phải chịu trách nhiệm cho một nhiệm vụ Các nút giao tiếp với nhau bằng cách sử dụng các thông điệp truyền qua các kênh logic được gọi là các chủ đề (topic) Mỗi nút có thể gửi hoặc nhận dữ liệu từ nút khác bằng mô hình Thuê bao xuất bản/ Thuê bao đăng kí Chúng ta sẽ thấy điều đó trong hành động sau

Mục tiêu chính của ROS là hỗ trợ tái sử dụng mã trong nghiên cứu và phát triển robot để bạn có thể tìm thấy một hệ thống gói tích hợp Một lần nữa, hãy nhớ rằng ROS không phải là hệ điều hành, thư viện hoặc RTOS Đó là một khung sử dụng khái niệm hệ điều hành

Hình 2.2 Các nút giao tiếp với nhau theo kiểu chủ đề

Các khái niệm quan trọng trong ROS

• Nodes: Các nút là các quá trình thực hiện tính toán ROS được thiết kế để được mô-đun ở quy mô hạt mịn; một hệ thống điều khiển robot thường bao gồm nhiều nút

Ví dụ: một nút điều khiển công cụ tìm phạm vi laser, một nút điều khiển động cơ bánh xe, một nút thực hiện nội địa hóa, một nút thực hiện quy hoạch đường dẫn, một nút cung cấp chế độ xem đồ họa của hệ thống, v.v Một nút ROS được viết với việc sử dụng thư viện máy khách ROS, chẳng hạn như roscpp hoặc rospy

• Master: ROS Master cung cấp đăng ký tên và tra cứu phần còn lại của Biểu đồ tính toán Không có Master, các nút sẽ không thể tìm thấy nhau, trao đổi tin nhắn hoặc gọi dịch vụ

• Messages: Các nút giao tiếp với nhau bằng cách gửi tin nhắn Một thông điệp chỉ đơn giản là một cấu trúc dữ liệu, bao gồm các trường được gõ Các kiểu nguyên thủy chuẩn (số nguyên, dấu phẩy động, boolean, v.v.) được hỗ trợ, cũng như các mảng của kiểu nguyên thủy Các thông điệp có thể bao gồm các cấu trúc và mảng được lồng tùy ý (giống như các cấu trúc C)

• Topic: Thực sự giống như một chủ đề trong một cuộc trò chuyện Nút thuê bao xuất bản trước tiên đăng ký chủ đề của nó với Master và sau đó bắt đầu xuất bản các thông báo về một chủ đề Các nút thuê bao đăng kí muốn nhận thông tin yêu cầu chủ đề của nút thuê bao xuất bản tương ứng với tên của chủ đề đã đăng ký trong bản gốc Dựa trên thông tin này, nút thuê bao đăng kí kết nối trực tiếp với nút thuê bao xuất bản để trao đổi tin nhắn dưới dạng chủ đề

• Service: là giao tiếp hai chiều đồng bộ giữa máy khách dịch vụ yêu cầu dịch vụ liên quan đến một nhiệm vụ cụ thể và máy chủ dịch vụ chịu trách nhiệm trả lời các yêu cầu

• Service Server: là một máy chủ trong giao tiếp tin nhắn dịch vụ nhận yêu cầu làm đầu vào và truyền phản hồi dưới dạng đầu ra Cả hai yêu cầu và phản hồi đều ở dạng tin nhắn Theo yêu cầu dịch vụ, máy chủ thực hiện dịch vụ được chỉ định và cung cấp kết quả cho khách hàng dịch vụ dưới dạng phản hồi Máy chủ dịch vụ được triển khai trong nút nhận và thực hiện một yêu cầu đã cho

• Publish và Thuê bao xuât bản: Thuật ngữ “publish” là viết tắt của hành động truyền các thông điệp tương đối tương ứng với chủ đề Nút Thuê bao xuât bản đăng ký thông tin và chủ đề của riêng mình với Master và gửi tin nhắn đến các nút thuê bao đăng kí được kết nối quan tâm đến cùng một chủ đề Thuê bao xuât bản được khai báo trong nút và có thể được khai báo nhiều lần trong một nút

• Subscribe và subcriber: Thuật ngữ “subscribe”, là viết tắt của hành động nhận tin nhắn tương đối tương ứng với chủ đề Nút Thuê bao đăng kí đăng ký thông tin và chủ đề riêng của mình với Master và nhận thông tin Thuê bao xuât bản xuất bản chủ đề tương đối từ Master Dựa trên thông tin nhà xuất bản nhận được, nút thuê bao đăng kí trực tiếp yêu cầu kết nối với nút Thuê bao xuât bản và nhận tin nhắn từ nút Thuê bao xuât bản được kết nối Một thuê bao đăng kí được khai báo trong nút và có thể được khai báo nhiều lần trong một nút Giao tiếp chủ đề là giao tiếp không đồng bộ dựa trên Thuê bao xuât bản và Thuê bao đăng kí và rất hữu ích khi chuyển một số dữ liệu nhất định Do chủ đề liên tục truyền và nhận luồng tin nhắn sau khi được kết nối, nên nó thường được sử dụng cho các cảm biến phải truyền dữ liệu định kỳ Mặt khác, cần có sự giao tiếp đồng bộ với yêu cầu và phản hồi được sử dụng Do đó, ROS cung cấp một phương thức đồng bộ hóa tin nhắn gọi là “dịch vụ” Một dịch vụ bao gồm máy chủ dịch vụ đáp ứng các yêu cầu và dịch vụ khách yêu cầu đáp ứng Không giống như chủ đề, dịch vụ là tin nhắn một lần giao tiếp Khi yêu cầu và phản hồi của dịch vụ được hoàn thành, kết nối giữa hai nút bị ngắt kết nối

• Parameter: Tham số trong ROS đề cập đến các tham số được sử dụng trong nút Hãy nghĩ về nó như các tệp cấu hình * ini trong chương trình Windows Giá trị mặc định được đặt trong tham số và có thể được đọc hoặc ghi nếu cần Đặc biệt, nó rất hữu ích khi các giá trị được cấu hình có thể được sửa đổi trong thời gian thực Ví dụ: bạn có thể chỉ định các cài đặt như số cổng USB, thông số hiệu chỉnh máy ảnh, giá trị tối đa và tối thiểu của tốc độ động cơ

• Parameter Server: Khi các tham số được gọi trong gói, chúng được đăng ký với máy chủ tham số được tải trong bản gốc

• Catkin: đề cập đến hệ thống xây dựng của ROS Về cơ bản, hệ thống xây dựng sử dụng CMake (Tạo nền tảng chéo) và môi trường xây dựng được mô tả trong tệp “CMakeLists.txt”, trong thư mục gói CMake đã được sửa đổi trong ROS để tạo ra một hệ thống xây dựng dành riêng cho ROS Catkin bắt đầu thử nghiệm alpha từ ROS Fuerte và các gói cốt lõi bắt đầu chuyển sang Catkin trong phiên bản ROS Groovy Catkin đã được áp dụng cho hầu hết các gói trong phiên bản ROS Hydro Hệ thống xây dựng Catkin giúp dễ dàng sử dụng các bản dựng, quản lý gói và phụ thuộc liên quan đến ROS giữa các gói Nếu bạn định sử dụng ROS vào thời điểm này, bạn nên sử dụng Catkin thay vì xây dựng ROS (rosbuild)

• roscore: là lệnh chạy chủ ROS Nếu nhiều máy tính trong cùng một mạng, nó có thể được chạy từ một máy tính khác trong mạng Tuy nhiên, ngoại trừ trường hợp đặc biệt hỗ trợ nhiều roscore, chỉ nên chạy một roscore trong mạng Khi ROS master đang chạy, địa chỉ URI và số cổng được gán cho các biến môi trường ROS_MASTER_URI được sử dụng Nếu người dùng chưa đặt biến môi trường, địa chỉ IP cục bộ hiện tại được sử dụng làm địa chỉ URI và số cổng 11311 được sử dụng là số cổng mặc định cho bản gốc

• rosrun: là lệnh thực thi cơ bản của ROS Nó được sử dụng để chạy một nút trong gói Nút sử dụng biến môi trường ROS_HOSTNAME được lưu trữ trong máy tính mà nút đang chạy dưới dạng địa chỉ URI và cổng được đặt thành một giá trị duy nhất tùy ý

• roslaunch: Trong khi rosrun là một lệnh để thực thi một nút, ngược lại, roslaunch thực thi nhiều nút Đó là một lệnh ROS chuyên thực hiện nút với các chức năng bổ sung như thay đổi tham số gói hoặc tên nút, định cấu hình không gian tên của các nút, đặt ROS_ ROOT và ROS_PACKAGE_PATH và thay đổi biến môi trường khi thực hiện các nút roslaunch sử dụng tệp ‘* launch, để xác định các nút sẽ được thực thi Tệp này dựa trên XML (Ngôn ngữ đánh dấu mở rộng) và cung cấp nhiều tùy chọn dưới dạng thẻ XML

• XML: (Ngôn ngữ đánh dấu mở rộng) là ngôn ngữ đánh dấu rộng và linh hoạt mà W3C khuyến nghị để tạo các ngôn ngữ đánh dấu mục đích đặc biệt khác XML sử dụng các thẻ để mô tả cấu trúc dữ liệu Trong ROS, nó được sử dụng trong các thành phần khác nhau, chẳng hạn như * launch, * urdf và pack.xml.

Công cụ trực quan 3D (RViz)

RViz là công cụ trực quan 3D của ROS Mục đích chính là hiển thị các thông báo ROS ở chế độ 3D, cho phép chúng ta xác minh trực quan dữ liệu Ví dụ: nó có thể trực quan hóa khoảng cách từ cảm biến khoảng cách Laser (LDS) đến vật cản, Dữ liệu đám mây điểm (PCD) của cảm biến khoảng cách 3D như RealSense, Kinect hoặc Xtion, giá trị hình ảnh thu được từ một máy ảnh, và nhiều hơn nữa mà không phải phát triển phần mềm riêng biệt

Hình 2.6 Đang mở vào giao diện Rviz

Nó cũng hỗ trợ trực quan hóa khác nhau bằng cách sử dụng đa giác do người dùng chỉ định và đánh dấu tương tác cho phép người dùng thực hiện các chuyển động tương tác với các lệnh và dữ liệu nhận được từ nút người dùng Ngoài ra, ROS mô tả các robot ở dịnh dạng mô tả Robot hợp nhất (URDF) , được thể hiện dưới dạng mô hình 3D mà mỗi mô hình có thể được di chuyển hoặc vận hành theo mức độ tự do tương ứng của chúng, do đó chúng có thể được sử dụng để mô phỏng hoặc điều khiển

Mô hình robot di động có thể được hiển thị và dữ liệu khoảng cách nhận được từ cảm biến khoảng cách Laser (LDS) có thể được sử dụng để điều hướng RViz cũng có thể hiển thị hình ảnh từ camera gắn trên robot như được hiển thị ở góc dưới bên trái của hình 2.8 Ngoài ra, nó có thể nhận dữ liệu từ nhiều cảm biến khác nhau như Kinect, LDS, RealSense và trực quan hóa chúng dưới dạng 3D

Hình 2.7 Điều hướng sử dụng cảm biến kinect

Hình 2.8 Đo khoảng cách sử dụng kinect

TÍNH TOÁN THIẾT KẾ PHẦN CƠ KHÍ

Cấu tạo của robot

Hình 3.1 Cấu tạo của robot 1: Cảm biến Kinect ; 5: Bánh xe điều hướng

2: Vị trí đặt laptop; 6: Vị trí đặt mạch điều khiển

3: Động cơ và gá động cơ; 7: Thanh Inox 4: Bánh xe dẫn động; 8: Gá đặt Kinect

Robot có cấu tạo gồm:

• Cấu tạo kiểu vi sai gồm 2 bánh xe dẫn động 2 bên (4) được nối trực tiếp với động cơ (3) và 2 bánh điều hướng (5) Hai bánh điều hướng di chuyển tự do được kéo đi bởi hai bánh dẫn động hai bên

• Tầng 1 của robot (6) là khoảng không gian để bố trí các mạch điều khiển,quạt tản nhiệt, vi điều khiển,

• Cảm biến Kinect (1) gắn trên gá (8) được đưa lên cao hơn so với mặt trên của robot để tăng tầm nhìn cho cảm biến.

Phương án chọn cơ cấu chuyển động robot [1]

3.2.1 Phương án 1: Robot chuyển động đa hướng loại 4 bánh omni

Hình 3.2 Sơ đồ robot 4 bánh omni Ưu điểm:

• Trong thiết kế 4 bánh, 4 bánh Omni được gắn ở 90 ° với nhau Điều này có nghĩa là bất kỳ hai bánh xe song song với nhau và hai bánh xe khác vuông góc nhau Lợi ích đầu tiên và chính là tính toán đơn giản Vì có 2 cặp bánh xe, mỗi cặp chỉ cần 1 phép tính và 4 bánh xe chỉ cần 2 phép tính

• Tận dụng được hiệu suất động cơ tốt do được bố trí vuông góc

• Ngoài ra tại bất kỳ điểm nào cũng có hai bánh lái và hai bánh miễn phí Điều này làm cho hai bánh lái hiệu quả 100% và điều khiển robot ở tốc độ cao hơn so với thiết kế 3 bánh

• Khó để đảm bảo tiếp xúc khi cả 4 bánh di chuyển, nhất là khi mặt đường không bằng phẳng

• Khó áp dụng thuật toán để điều khiển

• Chúng kém hiệu quả hơn vì không phải tất cả các bánh xe đều được sử dụng đầy đủ để lái và điều khiển robot

• Vì bánh xe Omni là sự kết hợp của nhiều bánh xe / con lăn thành một, nên có khả năng chống xoay lớn hơn dẫn đến mất năng lượng lớn hơn; tức là Mất do ma sát

• Do robot có bánh xe Omni hoạt động theo nguyên tắc trượt, điều khiển vị trí rất khó

3.2.2 Phương án 2: Robot chuyển động đa hướng loại 3 bánh omni

Hình 3.3 Sơ đồ robot 3 bánh omni Ưu điểm:

• Ma sát tốt hơn, cân bằng trên mặt phẳng tốt hơn so với 4 bánh omni

• Thiết kế ba bánh cung cấp lực kéo lớn hơn vì bất kỳ lực phản kháng nào được phân phối chỉ qua ba điểm

• Đầu tiên từ quan điểm thiết kế, vì các bánh xe được đặt cách nhau 120 °, chỉ một trong số các bánh xe sẽ có hiệu quả 100% Nói cách khác là chỉ một bánh xe lái còn 2 bánh kia tự do khiến cho tốc độ robot thấp hơn

• Tính toán khó vì không có bánh xe nào được xếp cùng một trục nên yêu cầu 3 phép tính toán khác nhau

• Chúng kém hiệu quả hơn vì không phải tất cả các bánh xe đều được sử dụng đầy đủ để lái và điều khiển robot

• Vì bánh xe Omni là sự kết hợp của nhiều bánh xe / con lăn thành một, nên có khả năng chống xoay lớn hơn dẫn đến mất năng lượng lớn hơn; tức là Mất do ma sát

• Do robot có bánh xe Omni hoạt động theo nguyên tắc trượt, điều khiển vị trí rất khó

3.2.3 Phương án 3: Robot loại 2 bánh vi sai chuyển động độc lập

Hình 3.4 Sơ đồ chuyển động 2 bánh vi sai Ưu điểm:

• Là cơ chế điều khiển phổ biến cho người chế tạo robot

• Thiết kế, xây dựng cơ học và thuật toán điều khiển trở nên đơn giản

• Chi phí giá thành thấp

• Một trong những nhược điểm lớn của điều khiển này là robot không lái như mong đợi Nó không lái dọc theo một đường thẳng cũng không quay chính xác ở các góc mong đợi, đặc biệt là khi chúng ta sử dụng động cơ

DC Điều này do sự khác nhau số vòng quay của mỗi bánh xe trong thời gian nhất định.

Tính toán chọn động cơ [2]

Bảng 3.1 Các thông số kỹ thuật của robot

STT Đặc điểm Thông số

2 Tải trọng tối đa 10[kg]

3 Đường kính bánh xe 56[mm]

4 Vận tốc tối đa của robot 0.5[m/s]

Ta có khối lượng của toàn robot tính cả laptop xấp xỉ 10kg Như vậy ta xem như trọng lượng phân bố đều ra cả 4 bánh xe mỗi bánh chịu tải trọng là 2,5 kg

Ta có bản hệ số ma sát ứng với các loại vật liệu như sau:

Bảng 3.2 Bảng hệ số ma sát ứng với các loại vật liệu

Vật liệu Hệ số ma sát trượt

Gỗ rắn trên gỗ rắn 0,25

Thép trên đất cứng 0,2-0,4 Lốp cao su trên đất cứng 0,4-0,6

Ta lựa chọn hệ số ma sát của bánh xe với đất nền là 0,4

Ta có công suất tính momen cản như sau:

• Pms: công suất do momen cản gây ra

• fms: hệ số ma sát (trên nền đất ta chọn bằng 0.4) Công suất thực tế của robot cần:

• 𝑃 𝑡𝑡 : Công suất cần thiết của động cơ dẫn động

• 𝑃 𝑚𝑠 : Công suất do momen cản gây ra

• 𝜂: Hiệu suất của nối trục động cơ với bánh xe

Ta tính được tốc độ góc của bánh xe:

𝜋 = 17,1 (𝑣ò𝑛𝑔 /𝑠) Tốc độ cần thiết của động cơ là :

• 𝜔 𝑏𝑥1 : Tốc độ góc của bánh xe dẫn động thứ nhất

• 𝜔 𝑏𝑥1 : Tốc độ góc của bánh xe dẫn động thứ hai

• 𝑛 1,2 : Tốc độ vòng quay của bánh xe

• 𝜂 đ𝑐 : Tốc độ vòng quay cần thiết của động cơ Dựa vào kết quả tính toán ở trên ta chọn phương án thiết kế với hai động cơ gắn ở hai bánh Mỗi động cơ có thông số kỹ thuật như sau:

• Điện áp hoạt động : 12VDC

• Dòng tải tối đa: 1400 mA

• Tốc độ vòng quay : 120 vòng/phút

TÍNH TOÁN, THIẾT KẾ MẠCH ĐIỆN ĐIỀU KHIỂN

Sơ đồ khối mạch điều khiển

Hình 4.1 Sơ đồ khối mạch điều khiển Hình 4.1 mô tả sơ đồ khối của mạch điều khiển robot tự động điều hướng môi trường tong nhà bao gồm các khối và chức năng như sau:

• Khối nguồn: sử dụng 4 viên pin sạc 18650 loại 3.6V 2600mAh được ghép nối tiếp ta có được nguồn 14.4v Sau đó qua mạch hạ áp xuống 12v để nuôi cảm biến Kinect và khối điều khiển động cơ

• Khối xử lý trung tâm: sử dụng Laptop Asus đã cài ROS Kinetic và các gói thư viện cần thiết để nhận các tín hiệu thu được từ khối vi điều khiển, cảm biến Kinect để xử lí và đưa lệnh điều khiển

• Khối cảm biến : dùng cảm biến Kinect để giả tín hiệu quét laser cũng như làm tầm nhìn cho robot sử dụng nguồn 12v và giao tiếp với máy tính qua cổng USB

• Khối điều khiển động cơ: sử dụng module L293 để điều khiển động cơ theo chế độ PWM, module L293 dùng nguồn 12v

• Khối vi điều khiển: sử dụng Arduino mega 2560 nhận tín hiệu của encoder tính toán vận tốc và gửi về khối xử lí trung tâm thông qua cổng UART đồng thời nhận lệnh từ khối trung tâm để điều khiển động cơ.

Tìm hiểu cảm biến Kinect

Hình 4.2 Cảm biến Kinect Kinect là sản phẩm của Microsoft dựa trên công nghệ camera được phát triển bởi PrimeSense, những sản phẩm đầu tiên được bán tại Bắc Mỹ vào ngày 4 tháng 11 năm 2010 [3] Kinect được coi như là một thiết bị ngoại vi cho Xbox 360, cho phép giao tiếp với con người thông qua các cử chỉ, đem lại những cảm giác thú vị cho người chơi game trên Xbox Khả năng hiểu được cử chỉ con người của Kinect dựa trên hai đặc tính chính sau: thông tin về độ sâu ảnh (depth map), khả năng phát hiện và bám theo đặc tính cơ thể người (body skeleton tracking)

Kinect đang giữ kỷ lục Guiness thế giới về “Thiết bị điện tử được tiêu thụ nhanh nhất” với 8 triệu sản phẩm trong 60 ngày Mười triệu sản phẩm Kinect đã được phân phối trên thế giới vào ngày 9 tháng 3 năm 2011 Bên cạnh phục vụ cho mục đích chơi game, sản phẩm Kinect còn được dùng vào mục đích nghiên cứu xử lý ảnh 3D, phát hiện cử chỉ (gesture recognition), bám theo người (body tracking) và nhiều mục đích khác Lý do chính cho sự thành công của sản phẩm Kinect là giá cả khá rẻ (khoảng 140$ trên 1 sản phẩm) cho thiết bị có khả năng cung cấp các thông tin 3D với chất lượng chấp nhận được

4.2.2 Những thành phần chính của Kinect

Kinect gồm có: RGB camera, cảm biến độ sâu (3D Depth Sensors), dãy microphone (Multi-array Mic) và động cơ điều khiển góc ngẩng (Motorized Tilt)

• RGB Camera: như một camera thông thường, có độ phân giải 640×480 với tốc độ 30 fps

• Cảm biến độ sâu: độ sâu được thu về nhờ sự kết hợp của hai cảm biến: đèn chiếu hồng ngoại (IR Projector) và camera hồng ngoại (IR camera)

• Dãy đa microphone: gồm bốn microphone được bố trí dọc Kinect như trên hình

2.2, được dùng vào các ứng dụng điều khiển bằng giọng nói

• Động cơ điều khiển góc ngẩng: là loại động cơ DC khá nhỏ, cho phép ta điều chỉnh camera lên xuống để bảo đảm camera có được góc nhìn tốt nhất

Hình 4.4 Động cơ trong Kinect Một trong những đặc tính quan trọng nhất của Kinect đó là thu về giá trị độ sâu hay giá trị khoảng cách tới vật thể trong thế giới thực Phần tiếp theo sẽ nói về nguyên lý hoạt động của Kinect trong việc tính toán giá trị này

Hình 4.5 Cấu tạo bên trong Kinect Cặp cảm biến IR camera và IR projector sẽ phối hợp với nhau để cho ra giá trị độ sâu ảnh bằng công nghệ Light Coding của PrimeSense [4]

Hình 4.6 Quá trình thu về bản đồ độ sâu ảnh Khác với kỹ thuật Stereo Camera với việc dùng cặp camera giống nhau để xây dựng nên bản đồ độ sâu, hay kỹ thuật Time-Of-Flight (TOF) định nghĩa khoảng cách bằng ước lượng thời gian di chuyển của tia sáng đi và về trong không gian; kỹ thuật Light Coding dùng một nguồn sáng hồng ngoại chiếu liên tục kết hợp với một camera hồng ngoại để tính toán khoảng cách [5] Công việc tính toán này được thực hiện bên trong Kinect bằng chip PS1080 SoC của PrimeSense Công nghệ mới này được cho là đáp ứng chính xác hơn, giá cả rẻ hơn cho việc sử dụng ở môi trường trong nhà

Projector sẽ chiếu một chùm sáng hồng ngoại, tạo nên những đốm sáng ở không gian phía trước Kinect, tập hợp đốm sáng được phát ra này là cố định Những đốm sáng này được tạo ra nhờ một nguồn sáng truyền qua lưới nhiễu xạ (diffraction gratings) Tập hợp các đốm sáng này được IR camera chụp lại, thông qua giải thuật đặc biệt được tích hợp trong PS1080 SoC [6] cho ra bản đồ độ sâu Bản chất của giải thuật này là các phép toán hình học dựa trên quan hệ giữa hai cảm biến IR camera và Projector mà ta sẽ đề cập sau Hình 4.7 cho ta thấy rõ mẫu hình tập hợp các đốm sáng từ Projector và được chụp lại bởi IR camera

Hình 4.7 Mẫu hình được chiếu bởi projector và chụp lại bằng IR camera Để hiểu cách thức Kinect ước lượng khoảng cách tới vật thể trong môi trường như thế nào, ta quan sát hình 4.8 trong trường hợp phân tích với một điểm đơn giản

Hình 4.8 Tính toán khảng cách tới một điểm chiếu từ Projector [7]

Ta giả sử Projector phát đi một tia sáng dọc đường màu xanh lá, nó sẽ được chụp lại dưới dạng một đốm sáng bởi IR camera khi chạm vào bề mặt vật thể trong không gian Ta xét ba mặt phẳng ở ba khoảng cách khác nhau: mặt phẳng gần Kinect (close plane), mặt phẳng ở xa Kinect (distant plane) và mặt phẳng tham chiếu (reference plane) ở giữa hai mặt phẳng trên Trong đó, mặt phẳng tham chiếu ngầm được biết trước bên trong Kinect với đầy đủ thông tin về khoảng cách Ngoài ra, ta cũng đề cập thêm mặt phẳng ảnh (image plane) của IR camera, là mặt phẳng hình chiếu của các điểm trong không gian thu về bởi IR camera Ta xét trong ba trường hợp khi tia sáng màu xanh lá chạm vào ba điểm trên ba mặt phẳng lần lượt là A, B, C; ba điểm này được chiếu lên mặt phẳng ảnh tương ứng là A’, B’, C’ Quan sát vị trí A’, B’ và C’, ta có nhận xét: điểm A càng gần Kinect (hay close plane càng gần Kinect) thì A’ càng xa B’ về phía bên phải; ngược lại, điểm C càng xa Kinect (hay distant plane càng xa Kinect) thì C’ càng xa B’ về phía bên trái Từ đó: khi ta biết trước hướng, điểm xuất phát của tia sáng từ Projector và vị trí B’ là hình chiếu của điểm B trên mặt phẳng tham chiếu lên mặt phẳng ảnh, ta hoàn toàn có thể tính toán được độ sâu ảnh hay khoảng cách tới vật thể

Kinect làm điều tương tự với tập hợp các đốm sáng còn lại phát đi từ projector, với mặt phẳng tham chiếu biết trước Nó tìm điểm là tâm của đốm sáng mà IR camera chụp lại được và điểm tương đồng của đốm sáng đó trên mặt phẳng tham chiếu (ví dụ: hình 4.8 ta có A và B, C và B là các cặp điểm tương đồng), để tìm khoảng chênh lệch giữa hai điểm này theo chiều ngang khi chiếu về trên mặt phẳng ảnh; và lưu ý là giá trị chênh lệch này được tính bằng đơn vị pixel Tập hợp của tất cả các giá trị chênh lệch từ tập hợp đốm sáng, sẽ tạo nên bản đồ độ chênh lệch (disparity map), giá trị này càng lớn thì khoảng cách hay giá trị độ sâu ảnh (depth) càng lớn, từ đó mà ta xây dựng được bản đồ độ sâu (depth map) với giá trị tính bằng mét thực sự Tuy nhiên, do tập hợp số lượng đốm sáng phát đi từ projector nhỏ hơn so với tổng số pixel trên mặt phẳng ảnh của IR camera nên một phần giá trị độ sâu ảnh còn lại sẽ được nội suy Theo tính toán của Nicolas Burrus [8], một trong những người mở đường cho việc tìm hiểu về Kinect qua các thí nghiệm của ông Ông đã công thức hóa được quan hệ giữa giá trị khoảng cách thật z tính bằng mét và giá trị độ chênh lệch d:

Trong đó d là con số nguyên biểu diễn dưới dạng 11 bit, tức khoảng thay đổi từ 0÷2047 Với kết quả đo đạc thực nghiệm trên thư viện OpenNI, giá trị z biến thiên trong khoảng 0.5÷6.0 mét và bản đồ độ sâu ổn định trong khoảng 0.5÷5.0 mét Do đó, giá trị d thực sự biến thiên trong khoảng từ 434÷1030 Như vậy, trong không gian từ 0÷0.5 mét phía trước Kinect, Kinect không thể đưa về bản đồ độ sâu, đây là một nhược điểm

Một số đặc tính khác của Kinect đáng quan tâm: tiêu cự và góc mở camera (field of view), nguồn cung cấp và công suất tiêu thụ, môi trường hoạt động Kinect là sản phẩm thương mại của Microsoft nên các thông số kỹ thuật chi tiết không được công bố Các thông số được trình bày dưới đây là kết quả đo đạc thực nghiệm:

• Tiêu cự, góc mở IR camera và RGB camera:

Hai camera RGB và IR được đặt cách nhau 2.5 cm nên có chút khác nhau ở khung hình thu về từ hai camera Để đảm bảo khung hình RGB có thể chứa được khung hình IR, người ta thiết kế góc mở của RGB camera lớn hơn Điều này cũng dẫn đến tiêu cự của RGB camera nhỏ hơn Các thông số trong bảng 4.1 được đo đạc bằng thực nghiệm:

Bảng 4.1 Góc mở và tiêu cự của RGB và IR camera [5]

Feature RGB camera IR camera

• Nguồn cung cấp và công suất tiêu thụ:

Vì Kinect cần nhiều điện năng để hoạt động nên cổng USB của Xbox-360 không thể đáp ứng mà phải qua một cổng chia để chia thành 2 kết nối riêng là USB và kết nối nguồn, giúp cho thiết bị kết nối với Xbox-360 bằng cổng USB trong khi nguồn điện cần cho Kinect là 12VDC được lấy từ adapter Phiên bản Xbox-360 mới sẽ không cần adapter vì nó có các AUX port đặc biệt để cung cấp cho cổng kết nối Với kết nối USB ta hoàn toàn có thể cho Kinect giao tiếp với máy tính Thay adapter bằng nguồn 12V sau khi đã qua mạch hạ áp từ 14.4V

Hình 4.9 Kinect adapter Công suất tiêu thụ đo bằng thực nghiệm:

Bảng 4.2 Công suất tiêu thụ trên Kinect [4]

Kinect là thiết bị được thiết kế cho việc sử dụng ở môi trường trong nhà (indoor) Ở môi trường ngoài trời, kết quả thử nghiệm cho bản đồ độ sâu không chính xác vào thời điểm ánh sáng mạnh, nhưng cho kết quả chấp nhận được khi ánh sáng yếu (vào thời điểm buổi chiều tối).

Động cơ và giải thuật PID vị trí

4.3.1 Động cơ Servo DC Động cơ Servo DC là động cơ không đồng bộ Động cơ Servo DC bao gồm hai thành phần chính: động cơ DC và encoder Ngoài ra, động cơ có thể được gắn thêm hộp số (Gear box) có tác dụng tăng momen quay và giảm tốc độ động cơ Động cơ Servo DC được ứng dụng cho việc điều khiển chính xác: góc quay, tốc độ, momen Trong đề tài, cặp động cơ được chọn là động cơ Servo DC Faulhaber công suất 60W, sử dụng nguồn DC 12V, encoder 2 kênh với độ phân giải 12 xung và được trang bị hộp giảm tốc tỉ số 64:1

Hình 4.10 Động cơ Servo DC

4.3.1.1 Động cơ DC Động cơ DC là động cơ điện hoạt động với dòng điện một chiều Động cơ điện một chiều ứng dụng rộng rãi trong các ứng dụng dân dụng cũng như công nghiệp Cấu tạo của động cơ gồm có hai phần: stato đứng yên và roto quay so với stato Phần cảm (phần kích từ – thường đặt trên stato) tạo ra từ trường đi trong mạch từ, xuyên qua các vòng dây quấn của phần ứng (thường đặt trên roto) Khi có dòng điện chạy trong mạch phần ứng, các thanh dẫn phần ứng sẽ chịu tác động bởi các lực điện từ theo phương tiếp tuyến với mặt trụ roto, làm cho roto quay

Tùy theo cách mắc cuộn dây roto và stato mà người ta có các loại động cơ sau:

• Động cơ kích từ độc lập: Cuộn dây kích từ (cuộn dây stato) và cuộn dây phần ứng (roto) mắc riêng rẽ nhau, có thể cấp nguồn riêng biệt

• Động cơ kích từ nối tiếp: Cuộn dây kích từ mắc nối tiếp với cuộn dây phần ứng Đối với loại động cơ kích từ độc lập, người ta có thể thay thế cuộn dây kích từ bởi nam châm vỉnh cữu, khi đó ta có loại động cơ điện một chiều dùng nam châm vĩnh cửu Đối với loại động cơ kích từ độc lập dùng nam châm vĩnh cửu, để thay đổi tốc độ, ta thay đổi điện áp cung cấp cho roto Việc cấp áp một chiều thay đổi thường khó khăn, do vậy người ta dùng phương pháp điều xung (PWM):

Hình 4.11 Điều chỉnh độ rộng xung PWM Mạch điều khiển động cơ bằng phương pháp PWM hoạt động dựa theo nguyên tắc cấp nguồn cho động cơ bằng chuỗi xung đóng mở với tốc độ nhanh Nguồn DC được chuyển đổi thành tín hiệu xung vuông (chỉ gồm hai mức 0 volt và xấp xỉ điện áp hoạt động) Tín hiệu xung vuông này được cấp cho động cơ Nếu tần số chuyển mạch đủ lớn động cơ sẽ chạy với một tốc độ đều đặn phụ thuộc vào momen của trục quay

Với phương pháp PWM này, ta điều chỉnh tốc độ của động cơ thông qua việc điều chế độ rộng của xung, tức là thời gian mức cao của chuỗi xung vuông cấp cho động cơ Việc điều chỉnh này sẽ tác động đến công suất trung bình cấp cho động cơ và do đó sẽ làm thay đổi tốc độ của động cơ cần điều khiển Như trên hình 6.2, với dãy xung điều khiển trên cùng, xung có độ rộng nhỏ nên động cơ chạy chậm Nếu độ rộng xung càng lớn (như dãy xung thứ 2 và thứ 3) động cơ DC chạy càng nhanh

Do đặc tính cảm kháng của động cơ, dòng qua động cơ là dòng liên tục, gợn sóng như sau:

Hình 4.12 Dạng sóng áp và dòng trên động cơ

Encoder là dụng cụ dùng để xác định vị trí góc của đĩa quay hoặc xác định quãng đường di chuyển cho bánh xe, trục động cơ hay bất kỳ thiết bị nào có cơ cấu quay và cần xác định độ dịch chuyển

Có hai loại encoder là encoder tuyệt đối (absolute encoder) và encoder tương đối (incremental encoder) Encoder tuyệt đối cung cấp cho ta chính xác vị trí encoder mà không cần qua xử lý, trong khi encoder tương đối thì đòi hỏi thêm khâu xử lý từ tín hiệu encoder trước khi xác định được vị trí quay của động cơ Với giá thành rẻ hơn và việc xử lý cũng không quá phức tạp nên encoder tương đối được chọn trong đề tài này Ở đây, ta tập trung nói về incremental optical encoder là loại encoder tương đối sử dụng cảm biến quang Hệ thống optical encoder bao gồm một nguồn phát quang (thường là hồng ngoại – infrared), một cảm biến quang và một đĩa có chia rãnh

Hình 4.13 Optical Encoder Encoder thường có ba kênh (ba ngõ ra) bao gồm kênh A, kênh B và kênh Z (Index) Trên hình 6.4, ta thấy một lỗ nhỏ trên đĩa quay và một cặp phát – thu dành riêng cho lỗ nhỏ này Đó là kênh Z của encoder Cứ mỗi lần động cơ quay được một vòng, hồng ngoại từ nguồn phát sẽ xuyên qua lỗ nhỏ đến cảm biến quang và cảm biến lại thu được một tín hiệu Như thế cứ mỗi vòng quay của động cơ, lại xuất hiện một xung ở kênh Z Bên ngoài đĩa quay được chia thành các rãnh nhỏ và có một cặp thu – phát khác dành cho các rãnh này Đây chính là kênh A của encoder, hoạt động của kênh A cũng tương tự kênh Z, điểm khác nhau là trong một vòng quay của động cơ, sẽ có N xung xuất hiện trên kênh A N là số rãnh trên đĩa và còn được gọi là độ phân giải (resolution) của encoder Mỗi loại encoder có một độ phân giải khác nhau, có khi trên mỗi đĩa chỉ có vài rãnh nhưng cũng có trường hợp có đến hàng nghìn rãnh được chia Để điều khiển động cơ, ta phải biết được độ phân giải của encoder đang dùng Độ phân giải ảnh hưởng đến độ chính xác điều khiển và cả phương pháp điều khiển Ngoài ra, trên encoder còn có một cặp thu phát khác được đặt trên cùng đường tròn với kênh A nhưng lệch một chút (lệch M+0.5 rãnh), đây là kênh B của encoder Tín hiệu xung từ kênh B có cùng tần số với kênh A nhưng lệch pha 90 0 Bằng cách phối hợp kênh A và kênh B ta có thể biết chiều quay của động cơ

Hình 4.14 Hai kênh A và B lệch pha trong encoder

Khi cảm biến A bắt đầu bị che thì cảm biến B vẫn nhận được hồng ngoại xuyên qua và ngược lại Hình trên là dạng xung ngõ ra trên 2 kênh Xét trường hợp động cơ quay cùng chiều kim đồng hồ, tín hiệu di chuyển từ trái sang phải Lúc tín hiệu kênh A chuyển từ mức cao xuống thấp (cạnh xuống) thì kênh B đang ở mức thấp Ngược lại, nếu động cơ quay ngược chiều kim đồng hồ, tín hiệu di chuyển từ phải qua trái Lúc này, tại cạnh xuống của kênh A thì kênh B đang ở mức cao Như vậy, bằng cách phối hợp hai kênh A và B, ta không những xác định được góc quay (thông qua số xung) mà còn biết được chiều quay của động cơ (thông qua mức của kênh B ở cạnh xuống của kênh A)

Encoder được sử dụng trong đề tài là loại 12 xung trên một vòng quay với đủ ba kênh A, B và Z, tuy nhiên chỉ cần sử dụng 2 kênh A, B là đủ cho ứng dụng điều khiển vị trí

Hình 4.15 Encoder đi kèm động cơ Servo DC

Cách đọc encoder bằng Arduino Mega

Ta sử dụng ngắt của Arduino Mega để đọc encoder về, đây là phương pháp đơn giản nhưng chính xác Ý tưởng của phương pháp này rất đơn giản, ta nối kênh A của encoder của động cơ bên phải với ngắt int4 (chân 19) và kênh B với một chân nào đó bất kỳ (ở đây ta dùng chân 17) Cứ mỗi lần ngắt xảy ra, tức có 1 xung xuất hiện ở kênh

A thì trình phục vụ ngắt ngoài tự động được gọi Trong trình phục vụ ngắt này ta kiểm tra mức của kênh B, tùy theo mức của kênh B ta sẽ tăng biến đếm xung lên 1 hoặc giảm đi 1 Làm tương tự với encoder của động cơ bên trái, nối kênh A của encoder với ngắt int5 (chân 18) và kênh B với một chân nào đó bất kỳ (chân 16)

4.3.2 Giải thuật PID vị trí [9]

Trong các lĩnh vực điều khiển mà ở đó ta cần điều khiển đầu ra theo mong muốn hoặc cần sự ổn định, chúng ta cần một thuật toán điều khiển ví dụ như điều khiển động cơ, nhiệt độ, áp suất, tốc độ hay các biến khác trong các ứng dụng khác nhau Thuật toán PID là một trong những thuật toán kinh điển được giới thiệu để giải quyết các bài toán về điều khiển Bộ điều khiển PID có thể sử dụng để điều khiển bất kỳ biến nào miễn sao giá trị của chúng bị tác động thông qua thuật toán PID

Bộ điều khiển PID sẽ giám sát đầu ra của hệ thống, sau đó so sánh với giá trị mong muốn Nếu hệ thống chưa đạt được giá trị mong muốn, nghĩa là sai số e khác không, bộ PID sẽ tính toán ra giá trị tác động u mới (tác động vào hệ thống) để hiệu chỉnh hệ thống Quá trình này sẽ được thực hiện liên tục cho đến khi nào e = 0, lúc đó hệ thống sẽ đạt trạng thái ổn định Hệ thống như thế còn được gọi là hệ thống điều khiển vòng kín (Closed Loop Control) vì nó có hồi tiếp trạng thái của hệ thống về bộ điều khiển

Hình 4.16 PID vòng kín PID là chữ viết tắt của tỷ lệ - tích phân - vi phân Hàm ý rằng bộ điều khiển sẽ tính giá trị tỷ lệ, tính tích phân và vi phân của sai số để hiệu chỉnh hệ thống về trạng thái cân bằng động Đặc tính bộ điều khiển P,I,D:

Các linh kiện điện tử

Mạch hạ áp DC – DC nhỏ gọn có hiệu suất cao (92%)

• Điện áp đầu vào: Từ 3V đến 30V

• Điện áp đầu ra: Điều chỉnh được trong khoảng 1.5V đến 30V

• Dòng đáp ứng tối đa là 3A

Driver Motor Shield L293D là một module mở rộng chuyên dụng cho các ứng dụng điều khiển động cơ, robot Driver Motor Shield L293D có nhiều chức năng, dễ vận hành và có thư viện hỗ trợ Đây là một driver phổ biến cho điều khiển động cơ

DC, sử dụng IC điều khiển động cơ DC L293D Các chân tương thích với Arduino, do đó dễ dàng sử dụng để lập trình cho các dự án Arduino

• Điện áp đầu vào: 4.5V đến 36V

• Tương thích với các board Arduino Uno R3, Arduino Leonardo R3 và Arduino Mega 2560

• Có thể điều khiển động cơ DC (4 động cơ), động cơ servo (2 động cơ) và động cơ bước (2 động cơ) 2 cổng điều khiển servo motor được đánh dấu: Servo_1 và Servo_2 trên linh kiện Các cổng điều khiển động cơ DC được đánh dấu lần lượt là M1, M2, M, M4, chân giữa là chân GND

• 2 cổng điều khiển động cơ servo có điện áp vào 5V với timer có độ phân giải cao, phù hợp cho các ứng dụng điều khiển bằng Arduino có độ chính xác cao Đặc biệt không có jitter

• Có 2 IC Driver L293D, do đó sẽ có 4 cầu H để điều khiển được 4 động cơ DC Mỗi cầu H có dòng ra tối đa 0.6A (dòng chịu đựng cực đại là 1.2A) ở mỗi kênh điều khiển

• Các cổng M dùng điều khiển động cơ DC được điều khiển bằng tín hiệu PWM

• Driver còn hỗ trợ điều khiển 2 động cơ bước, với 2 cổng dùng cho 2 động cơ servo có thể được dùng cho động cơ bước Với Shield L293D, động cơ bước có thể vận hành ở tất cả các chế độ: full step, half step và micro-step Động cơ bước dùng cho driver có thể là loại đơn cực (unipolar) hoặc lưỡng cực (bipolar)

• Có sẵn nút RESET để khởi động lại board Arduino

Arduino Mega2560 là một vi điều khiển bằng cách sử dụng ATmega2560 Nó chưa mọi thứ cần thiết để hỗ trợ các vi điều khiển Arduino Mega2560 khác với tất cả các vi xử lý trước giờ vì không sử dụng FTDI chip điều khiển chuyển tín hiệu từ USB để xử lý Thay vào đó, nó sử dụng ATmega16U2 lập trình như là một công cụ chuyển đổi tín hiệu từ USB Ngoài ra, Arduino Mega2560 cơ bản vẫn giống Arduino Uno R3, chỉ khác số lượng chân và nhiều tính năng mạnh mẽ hơn, nên các bạn vẫn có thể lập trình cho con vi điều khiển này bằng chương trình lập trình cho Arduino Uno R3

• 54 chân digital (15 có thể được sử dụng như các chân PWM)

• 4 UARTs (cổng nối tiếp phần cứng),

Hình 4.22 Sơ đồ các linh kiện của của Arduino Mega 2560

THIẾT KẾ CHƯƠNG TRÌNH ĐIỀU KHIỂN

Nội dung chương trình điều khiển

5.1.1 Tổng quan toàn hệ thống

Hình 5.1 Tổng quan toàn hệ thống

Hình 5.1 khái quát cho ta cái nhìn tổng quát về cách hoạt động của toàn hệ thống Hệ thống gồm 2 máy tính, máy trạm (Workstation) đóng vai trò máy khách và máy Laptop trên robot là máy chủ được kết nối với nhau qua giao thức SSH

SSH là chữ viết tắt của Secure Shell, tạm dịch là "môi trường an toàn" SSH được hiểu đơn giản là giao thức kết nối giữa máy chủ và máy khách được bảo mật một cách an toàn Hiểu đơn giản hơn, Bạn sử dụng SSH để kết nối với VPS, Server thì sẽ không sợ bị đánh cắp thông tin được truyền đi giữa máy tính của Bạn và máy chủ SSH cũng giống như giao thức SSL, nó mã hóa dữ liệu đường truyền Bạn có thể sử dụng để chạy chương trình, chuyển tập tin, chuyển tiếp khác kết nối TCP / IP qua liên kết an toàn Hiện nay SSH có phiên bản 2 là SSH2

Hình 5.3 Hệ thống robot Hình 5.3 thể hiện cách hoạt động của hệ thống robot, Laptop giữ vai trò là khối xử lí trung tâm, nó giao tiếp với khối điều khiển - ở đây là Arduino Mega 2650 theo chuẩn UART Khối điều khiển thu tín hiệu encoder từ động cơ và tính được vận tốc thực tế từ số vòng quay của bánh xe, sau đó gửi về khối xử lí trung tâm, đồng thời khối xử lí trung tâm nhận tín hiệu đó và tín toán vị trí của robot và gửi dữ liệu vận tốc để điều khiển động cơ Máy ảnh RGBD và cảm biến IR của kinect tạo tín hiệu quét laser giả Để chi tiết hơn sẽ được trình bày ở mục dưới.

Điều hướng

Có một cách dễ để hiểu điều hướng hơn khi điều hướng GPS trong cuộc sống hàng ngày Nếu bạn đặt điểm đến trên thiết bị điều hướng, điều hướng cho phép bạn kiểm tra khoảng cách và thời gian di chuyển từ vị trí hiện tại đến điểm đến và bạn có thể đặt các tùy chọn và thông tin cụ thể như địa điểm dừng và đường ưa thích trên đường

Hệ thống định vị có một lịch sử tương đối ngắn Năm 1981, một nhà sản xuất xe hơi Japnese Honda lần đầu tiên đề xuất một hệ thống tương tự dựa trên con quay hồi chuyển ba trục và bản đồ phim có tên “Electro Gryrocator1” Sau đó, Etak Navigator, một hệ thống định vị điện tử hoạt động với la bàn điện tử và cảm biến gắn trên bánh xe, được giới thiệu bởi công ty cung cấp ô tô Etak của Hoa Kỳ Tuy nhiên, việc gắn cảm biến và la bàn điện tử lên xe là một gánh nặng lớn cho giá ô tô và có vấn đề về độ tin cậy của hệ thống định vị Từ những năm 1970, Hoa Kỳ đã phát triển các hệ thống định vị vệ tinh cho mục đích quân sự và trong những năm 2000, 24 vệ tinh GPS (Hệ thống định vị toàn cầu) đã có sẵn cho mục đích chung và các hệ thống định vị dựa trên tam giác sử dụng các vệ tinh này bắt đầu lan rộng

5.2.1 Điều hướng của robot di động

Trở lại với robot, nền tảng và điểm nổi bật của robot tự động là không có nghi ngờ, điều hướng Điều hướng trong robotics là không thể tách rời và cần thiết Điều hướng là sự di chuyển của robot đến một đích xác định, điều này không dễ dàng như âm thanh Nhưng điều quan trọng là phải biết chính robot đang ở đâu và có bản đồ về môi trường nhất định Nó cũng quan trọng để tìm tuyến đường được tối ưu hóa trong số các tùy chọn định tuyến khác nhau và để tránh các chướng ngại vật như tường và đồ nội thất Đó là một việc không dễ dàng

Chúng ta cần gì để thực hiện điều hướng trong robot? Nó có thể thay đổi tùy thuộc vào thuật toán điều hướng và có thể được yêu cầu như các tính năng cơ bản

• Tính toán đường dẫn và lái xe

Tính năng cần thiết đầu tiên để điều hướng là bản đồ Hệ thống định vị được trang bị một bản đồ rất chính xác từ thời điểm mua và bản đồ được sửa đổi có thể được tải xuống định kỳ để có thể được hướng dẫn đến đích dựa trên bản đồ Nhưng liệu một bản đồ của căn phòng sẽ có sẵn nơi robot dịch vụ sẽ được đặt? Giống như một hệ thống định vị, robot cần một bản đồ, vì vậy chúng ta cần tạo một bản đồ và đưa nó cho robot, hoặc robot có thể tự tạo một bản đồ

SLAM (Simultaneous Localization And Mapping) được phát triển để cho phép robot tạo bản đồ có hoặc không có sự trợ giúp của con người Đây là phương pháp tạo bản đồ trong khi robot khám phá không gian chưa biết và phát hiện môi trường xung quanh và ước tính vị trí hiện tại cũng như tạo bản đồ

Thứ hai, robot phải có khả năng đo lường và ước tính tư thế của nó (vị trí + hướng) Trong trường hợp ô tô, GPS được sử dụng để ước tính tư thế của nó Tuy nhiên, GPS không thể được sử dụng trong nhà và ngay cả khi có thể sử dụng GPS, GPS có lỗi lớn không thể được sử dụng cho robot Ngày nay, hệ thống có độ chính xác cao như DGPS được sử dụng, nhưng điều này cũng vô dụng trong nhà cũng như quá đắt cho mục đích chung Để khắc phục vấn đề này, nhiều phương pháp khác nhau như nhận dạng điểm đánh dấu và ước tính vị trí trong nhà đã được giới thiệu Tuy nhiên, về chi phí và độ chính xác, nó vẫn không đủ để sử dụng chung Hiện nay, phương pháp ước tính tư thế trong nhà được sử dụng rộng rãi nhất cho robot dịch vụ là xác định góc chết, là ước tính tư thế tương đối, nhưng nó đã được sử dụng trong một thời gian dài và bao gồm các cảm biến chi phí thấp và có thể đạt được một mức độ chính xác nhất định kết quả dự toán Số lượng chuyển động của robot được đo bằng vòng quay của bánh xe Tuy nhiên, có một lỗi giữa khoảng cách tính toán với vòng quay bánh xe và khoảng cách di chuyển thực tế Do đó, thông tin quán tính từ cảm biến IMU có thể sử dụng để giảm lỗi bằng cách bù lỗi vị trí và sự định hướng giữa giá trị tính toán và giá trị thực

Thứ ba, tìm hiểu xem có những chướng ngại vật như tường và vật thể cần có cảm biến hay không Nhiều loại cảm biến như cảm biến khoảng cách và cảm biến tầm nhìn được sử dụng Cảm biến khoảng cách sử dụng cảm biến khoảng cách dựa trên laser (LDS, LRF, LiDAR), cảm biến siêu âm và cảm biến khoảng cách hồng ngoại Cảm biến tầm nhìn bao gồm camera âm thanh nổi, camera đơn sắc, camera đa hướng và gần đây, RealSense, Kinect, Xtion, được sử dụng rộng rãi như camera Depth, được sử dụng để xác định chướng ngại vật

5.2.5 Tính toán đường dẫn và lái xe

Tính năng cần thiết cuối cùng để điều hướng là tính toán và di chuyển tuyến đường tối ưu đến đích Đây được gọi là tìm kiếm và lập kế hoạch đường đi và có nhiều thuật toán thực hiện việc này như thuật toán A* , trường tiềm năng, bộ lọc hạt và RRT (Rapidly-exploring Random) Trong phần này, chúng ta đã tóm tắt ngắn gọn về SLAM và các thành phần của điều hướng, nhưng vẫn còn khó khăn và rộng lớn để hiểu Việc đo lường và ước tính tư thế robot đã được giải thích trong phần trước Bây giờ, để hiểu rõ về SLAM để tạo bản đồ và điều hướng với bản đồ được tạo, ta xem ở phần tiếp theo.

SLAM

5.3.1 Phần cứng cần thiết của robot để SLAM

Các gói gmapping, cartogograph và rtabmap được sử dụng rộng rãi cho SLAM và trong phần này, chúng ta sẽ sử dụng gói gmapping Nó tốt cho phần cứng bị hạn chế, mặc dù chúng không liên quan đến robot di động

Nền tảng phải có khả năng di chuyển với lệnh vận tốc tuyến tính trục X, Y và lệnh vận tốc góc theta Ví dụ, robot bao gồm hai động cơ như rô bốt di động vi sai hoặc rô bốt có bánh xe có nhiều hơn ba trục truyền động

Các thông tin đo hình nên có thể đạt được Khoảng cách di chuyển phải được đo bằng cách tính toán thông qua tính toán chết hoặc vị trí bù với dữ liệu quán tính hoặc ước tính tốc độ dịch và tốc độ góc bằng cảm biến IMU để robot có thể tính toán và ước tính tư thế hiện tại của nó

5.3.4 Cảm biến đo khoảng cách Đối với SLAM và điều hướng, robot nên có các cảm biến như LDS (Cảm biến khoảng cách Laser), LRF (Công cụ tìm phạm vi laser) hoặc LiDAR có thể đo khoảng cách đến chướng ngại vật trên mặt phẳng XY Các máy ảnh có độ sâu như RealSense, Kinect và Xtion cũng có thể chuyển đổi thông tin 3D thành thông tin 2D của mặt phẳng XY Nói cách khác, cần phải gắn một cảm biến có khả năng đo khoảng cách trên mặt phẳng XY Cảm biến siêu âm, cảm biến PSD và SLAM trực quan cũng có thể được xem xét Chúng ta sẽ dùng Kinect để fake laser.

Giải thuật chương trình cho máy tính xử lý

Hình 5.5 Sơ đồ các nodes, topics của robot

• Nút Arduino (motor_controll.ino):

Vòng lặp chính trong motor_controll.ino chuyển đổi số đếm của encoder thành vòng tua hiện tại của cả hai động cơ và điều khiển tốc độ của động cơ bằng điều khiển PID Thư viện rosserial [10] thuận tiện cho phép chương trình giao tiếp với phần còn lại của các nút ros trong PC thông qua USB Chương trình đăng ký vào chủ đề /cmd_vel đặt tốc độ mong muốn của động cơ và công bố tốc độ thực tế trên chủ đề /rpm Tôi đã sử dụng hai chân ngắt trong mega, một cho mỗi bộ mã hóa Điều khiển PID và xuất bản /rpm đều được thực hiện trong cùng một chu kỳ vòng lặp, với tốc độ mong muốn là 10Hz (cứ sau 100 ms)

Chủ đề đã đăng kí: /cmd_vel

Chủ đề đã xuất bản: /rpm (geometry_msgs::Vector3Stamped)

• Nút base_controller (base_controller.cpp):

Nút base_controller đăng kí chủ để /rpm từ arduino và chuyển đổi nó ra vận tốc x, vận tốc y, vận tốc theta, vị trí xy và yaw Sau đó xuất bản thông tin dưới dạng tin nhắn odometry và tf

Chủ đề đã đăng kí: /rpm (geometry_msgs::Vector3Stamped)

Chủ đề đã xuất bản: /odom (nav_msgs:Odometry)

• Kinect : Cài đặt thư viện freenect[11], và sử dụng gói depthimage_to_laserscan

[12] để xuất bản quét laser giả

Chủ đề đã xuất bản: /laserscan

• Teleop_twist_keyboard: gói teleop_twist_keyboard[13] nhận đầu vào bàn phím và xuất bản tin nhắn cmd_vel

Chủ đề đã xuất bản: /cmd_vel

• Gmapping: gói gmapping sử dụng bản đồ hóa và bản đồ hóa đồng thời(SLAM) để tạo bản đồ 2D từ dữ liệu quét laser [14] [15]

Chủ đề đã đăng kí: tf(tf/tfMessage) , scan(sensor_msgs/LaserScan) Chủ đề đã xuất bản: map_metadata(nav_msgs/MapMetaData), map(nav_msgs/OccupancyGrid)

• Điều hướng: sử dụng các gói amcl, base_local_planner và costmap_2d từ ngăn xếp điều hướng [16]

Chủ đề đã đăng kí: scan(sensor_msgs/LaserScan)

Chủ đề đã xuất bản: cmd_vel

Ngày đăng: 17/06/2021, 11:58

TỪ KHÓA LIÊN QUAN

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

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w