Công nghệ

Robot trợ lý cá nhân (Tìm đồ vật và đi theo bạn) với Raspberry Pi + RoboClaw

null
Written by lbtmicr06

Robot trợ lý cá nhân (Tìm đồ vật và đi theo bạn) với Raspberry Pi + RoboClaw

Bài viết của Saral TayalTheo
Bộ trượt camera theo dõi đối tượng có trục xoay. Được in 3D và lắp ráp trên bộ điều khiển động cơ DC RoboClaw và Arduino.
Máy in 3D thay khuôn tự động
Điện thoại thông minh trong suốt

Hãy xem video trên YouTube để hiểu rõ hơn về bài hướng dẫn này.

Con robot này là một giấc mơ mà tôi ấp ủ từ lâu. Trước khi đi sâu vào cách chế tạo con robot này, hãy để tôi giới thiệu nhanh về khả năng của nó!

  • Bạn có thể yêu cầu robot đi theo bạn. (Việc này được thực hiện thông qua thuật toán nhận diện khuôn mặt bằng máy tính TensorFlow)
  • Bạn có thể yêu cầu robot tìm bạn và sau đó đi theo bạn. (Điều này sẽ sử dụng thị giác máy tính + học máy)
  • Bạn có thể yêu cầu robot tìm bất kỳ vật thể nào ( từ danh sách này ), dùng xe trượt robot để nhặt vật đó lên và mang đến chỗ bạn.
  • Bạn có thể ra lệnh bằng giọng nói cho robot mang đồ vật đã thu thập và đi theo bạn như một trợ lý robot.
  • Điều tuyệt vời nhất là bạn có thể đưa ra tất cả các lệnh này bằng giọng nói vì robot có khả năng nhận dạng giọng nói.

Con robot này thực sự đặc biệt vì nó có thể sử dụng các mô hình Học máy để ‘nhìn’ thế giới thông qua một camera thông thường và thực hiện các nhiệm vụ tùy thuộc vào sự thay đổi vị trí của vật thể được phát hiện trong camera.

Robot này được chế tạo dựa trên vi điều khiển Raspberry Pi phổ biến, bộ điều khiển động cơ RoboClaw mạnh mẽ và nền tảng robot Rover 5 thông dụng. Hơn nữa, tất cả các bộ phận vật lý bổ sung đều được in 3D. Robot này cũng sử dụng bộ tăng tốc Tensorflow USB Coral để tăng tốc độ phát hiện vật thể chậm chạp của Raspberry Pi. Chi tiết hơn về tất cả những điều này sẽ được trình bày trong các bước tiếp theo.

Phần đầu của hướng dẫn Instructables này sẽ trình bày một số lý thuyết đằng sau cách hoạt động của các thuật toán và mã lập trình. Phần thứ hai của hướng dẫn Instructables này sẽ hướng dẫn cách bạn có thể tự chế tạo robot này, bao gồm cả việc lắp ráp vật lý và cài đặt thư viện, v.v.

Tất cả mã nguồn, file in 3D và các file mã nguồn mở khác đều có sẵn miễn phí tại đây:

Tệp in 3D: https://www.thingiverse.com/thing:3794952

Mã nguồn: https://github.com/SaralTayal123/Object-Finding-Ro…

Quân nhu

(Có nhiều thông tin chi tiết hơn về các linh kiện điện tử trong Bước 4)

Tệp in 3D (chi tiết hơn ở bước 3)

Raspberry Pi 3b/3b+

2 bộ điều khiển động cơ RoboClaw 2x7A

Webcam USB (hoặc Camera Pi + Micro USB)

Bộ tăng tốc USB Google Coral

Cảm biến khoảng cách siêu âm

Bộ chuyển đổi điện áp 5V + pin 7-12V cho Raspberry Pi

Nền tảng Rover 5

Động cơ DC chổi than có hộp số và bộ mã hóa (xe trượt robot)

(Thông tin chi tiết hơn về các linh kiện điện tử có trong Bước 4)

Bước 1: Giải thích về thị giác robot

Giải thích về thị giác robot
Giải thích về thị giác robot
Giải thích về thị giác robot
Giải thích về thị giác robot

Giải thích về Thị giác Robot (CV):
Trước tiên, hãy để tôi nhanh chóng định nghĩa một vài thuật ngữ.

Thị giác máy tính (Computer Vision – CV) : Thị giác máy tính sử dụng máy tính để xử lý luồng dữ liệu từ camera (các giá trị toán học 2D) nhằm hiểu rõ hơn về những gì camera đang thu được.

Học máy (ML) : Sử dụng hàng nghìn hình ảnh của một vật thể — giả sử là một chiếc cốc — và sử dụng dữ liệu này để tính toán một mô hình (hình ảnh) về hình dạng trung bình của chiếc cốc dựa trên tất cả các hình ảnh trong tập dữ liệu. Càng nhiều hình ảnh = mô hình càng chính xác.

Robot này kết hợp Học máy (Machine Learning) với Thị giác máy tính (Computer Vision). Điều này có nghĩa là nó xử lý luồng video từ webcam thông qua một mô hình học máy để phát hiện các đối tượng trong khung hình. Ví dụ, dựa trên ví dụ học máy “mô hình cốc trung bình”, máy tính có thể nhìn vào khung hình video của camera và cố gắng khớp hình ảnh cốc trung bình vào hình ảnh mới. Nếu khớp với một mức độ chính xác nhất định, hình ảnh mới sẽ được gắn nhãn là một chiếc cốc! Bằng cách theo dõi chính xác vị trí đối tượng được phát hiện thông qua khung hình camera, chúng ta có được khả năng phát hiện đối tượng!

Việc thu thập hàng nghìn hình ảnh về nhiều vật thể và khuôn mặt có thể rất khó khăn. Hơn nữa, việc tính toán xem vật thể trung bình trông như thế nào (huấn luyện mô hình) là một nhiệm vụ cực kỳ tốn nhiều tài nguyên tính toán. Do đó, tôi quyết định sử dụng các mô hình ‘Face Detect’ và ‘Mobile-lite SSD COCO’ có sẵn miễn phí từ thư viện TensorFlow của Google. (TensorFlow là chương trình học máy thực sự huấn luyện mô hình phát hiện vật thể và so sánh các hình ảnh/video mới để phân loại chúng và phát hiện các vật thể trong đó.)

Giải thích về nhận diện khuôn mặt

Giờ đây, khi bạn đã có mô hình nhận diện khuôn mặt từ Google, bạn có thể sử dụng nó để tìm kiếm khuôn mặt trong luồng video! Khi thuật toán nhận diện khuôn mặt tìm thấy một khuôn mặt trong khung hình camera, nó sẽ xuất ra độ chính xác mà nó cho rằng đã tìm thấy khuôn mặt của bạn và tọa độ khuôn mặt của bạn trong khung hình video. Bây giờ, đây là phần khó khăn. Làm thế nào để chúng ta sử dụng dữ liệu vị trí camera này để điều khiển robot theo dõi một người?

Câu trả lời rất đơn giản. Nếu tọa độ X của người đó nằm trong 25% bên trái của khung hình, thì robot sẽ quay sang trái cho đến khi người đó trở lại vị trí trung tâm của khung hình. Nếu tọa độ X của người đó nằm trong 25% bên phải của khung hình, mã lệnh sẽ điều khiển robot quay sang phải cho đến khi người đó trở lại vị trí trung tâm của khung hình. Ví dụ: Nếu độ phân giải webcam của bạn là 1280*720 (chiều rộng 1280 pixel và chiều cao 720 pixel), thì vùng phát hiện bên trái sẽ là 0,3 x 1280 = 384 pixel. Vùng phát hiện bên phải sẽ là 1280 – (0,3 * 1280) = 896 pixel. Do đó, nếu khuôn mặt bạn đang theo dõi có tọa độ x < 384, robot sẽ quay sang trái cho đến khi tọa độ X của khuôn mặt lớn hơn 384 và ngược lại đối với phía bên phải. Bạn có thể điều chỉnh vùng phát hiện này theo ý muốn trong mã lệnh. Hơn nữa, bạn có thể triển khai một vòng lặp PID thanh lịch hơn cho nhiệm vụ này, nhưng giải pháp đơn giản này hiện tại vẫn hoạt động tốt!

Như vậy, đến bước này chúng ta đã dạy robot cách xoay/quay để theo dõi một người. Tuy nhiên, robot không thể theo dõi người đó thành công nếu nó không thể nhận biết được người đó đang di chuyển lại gần hay ra xa. Đừng lo lắng, giải pháp cho vấn đề này cũng rất đơn giản và thông minh!

Chúng ta thực hiện theo dõi khoảng cách bằng cách theo dõi sự thay đổi diện tích khuôn mặt! Mô hình TensorFlow sẽ trả về vị trí bắt đầu theo trục X, vị trí kết thúc theo trục X, vị trí bắt đầu theo trục Y và vị trí kết thúc theo trục Y của đối tượng được phát hiện. Bằng cách lấy vị trí kết thúc theo trục X trừ đi vị trí bắt đầu theo trục X, ta có được chiều rộng của đối tượng. Bằng cách lấy vị trí kết thúc theo trục Y trừ đi vị trí bắt đầu theo trục Y của đối tượng được phát hiện, ta có được chiều rộng của đối tượng. Nếu nhân hai giá trị này lại với nhau, ta sẽ có được diện tích của đối tượng được phát hiện! Bây giờ, nếu diện tích khuôn mặt của người đó giảm đi, điều đó có nghĩa là người đó đang ở xa hơn và robot sẽ di chuyển về phía trước cho đến khi người đó quay lại vị trí ban đầu. Nếu diện tích khuôn mặt của người đó tăng lên, thì người đó đang đến gần robot hơn và robot phải di chuyển lùi lại để theo dõi người đó và duy trì diện tích khuôn mặt.

Giải thích về phát hiện đối tượng

Thuật toán phát hiện vật thể hoạt động rất giống với thuật toán phát hiện khuôn mặt. Thay vì sử dụng mô hình ‘Phát hiện khuôn mặt’, chúng tôi sử dụng mô hình COCO, có thể phát hiện 90 vật thể được liệt kê ở đây . Nếu vật thể được phát hiện nằm ở bên phải khung hình camera, robot sẽ di chuyển sang phải để căn giữa vật thể, và nếu vật thể nằm ở bên trái khung hình camera, robot sẽ di chuyển sang trái để căn giữa vật thể.

Tuy nhiên, không giống như thuật toán nhận diện khuôn mặt, thuật toán nhận diện vật thể không sử dụng diện tích của vật thể được phát hiện để xác định xem cần tiến lại gần hơn hay lùi xa hơn. Điều này là do nhận diện vật thể được sử dụng để tìm và nhặt các vật thể, chứ không phải duy trì cùng một khoảng cách như nhận diện khuôn mặt. Một số vật thể sẽ lớn hơn những vật thể khác và việc sử dụng giá trị diện tích tiêu chuẩn sẽ không hiệu quả.

Để giải quyết vấn đề này, chúng ta có thể sử dụng một cảm biến khoảng cách siêu âm đơn giản được gắn ở mặt dưới của robot để đo khoảng cách từ robot đến vật thể được phát hiện. Khi khoảng cách được phát hiện nhỏ hơn một ngưỡng nhất định, và nếu robot đang ở vị trí chính giữa hướng về vật thể, robot sẽ thực hiện một loạt các lệnh đơn giản để mở càng gắp, di chuyển về phía trước, đóng càng gắp và chuyển sang chế độ phát hiện khuôn mặt bằng cách sử dụng giá trị kích thước khuôn mặt cũ để tìm và quay lại chỗ người có vật thể đã thu thập.

Tại sao chúng ta cần một mô hình phát hiện khuôn mặt thứ cấp khi mô hình COCO đã có thể phát hiện được người?

Như đã đề cập trong phần Phát hiện đối tượng ở trên, chúng tôi đã sử dụng mô hình luồng tensor COCO vì nó đã rất chính xác và nhanh chóng trong việc phát hiện hơn 90 vật thể thông dụng hàng ngày. Một số bạn có thể đã nhận thấy rằng mô hình phát hiện đối tượng COCO cũng có thể phát hiện người. Vậy tại sao tôi không sử dụng mô hình COCO để phát hiện khuôn mặt? Trước hết, mô hình COCO chạy chậm hơn mô hình phát hiện khuôn mặt vì nó tìm kiếm hơn 90 loại đối tượng so với chỉ 1 (khuôn mặt) trong mô hình phát hiện khuôn mặt. Khi tôi nói chậm hơn, tôi không có ý nói đến độ trễ mà là FPS thấp hơn. Tuy nhiên, FPS thấp hơn này không phải là vấn đề lớn nhất. Vấn đề lớn nhất là theo dõi. Bạn thấy đấy, thuật toán phát hiện người COCO thực sự phát hiện toàn bộ cơ thể của người chứ không chỉ khuôn mặt, điều này gây khó khăn trong việc xác định khu vực và liệu robot có nên di chuyển lại gần hay ra xa người đó. Nếu bạn ở gần robot và camera của nó, nó sẽ nhìn thấy khuôn mặt của bạn và tính toán khu vực dựa trên đó. Nhưng khi bạn di chuyển ra xa camera, nhiều phần cơ thể của bạn sẽ lọt vào tầm nhìn của webcam và do đó kích thước của vật thể được phát hiện sẽ tăng lên theo thuật toán của robot. Vì vậy, mặc dù bạn đang đi xa, robot thực tế có thể nghĩ rằng bạn đang đến gần hơn, nên nó sẽ làm ngược lại với những gì nó cần làm là tiến lại gần bạn và thay vào đó sẽ lùi lại xa bạn. Tuy nhiên, với khuôn mặt, rất khó có khả năng khuôn mặt của bạn bị cắt một phần khỏi tầm nhìn của webcam và đây là một cách theo dõi và bám sát con người ổn định hơn nhiều.

Lọc dữ liệu

Tiếp theo, chúng ta sẽ lọc dữ liệu đầu vào thực tế từ các mô hình phát hiện đối tượng và theo dõi khuôn mặt. Bạn thấy đấy, các mô hình này khá chính xác, nhưng đôi khi lại đưa ra tọa độ không ổn định/giật cục giữa các khung hình video hoặc có thể cho ra kết quả dương tính giả, gây nhầm lẫn cho robot và khiến nó hoạt động không ổn định. (Hãy xem video trên YouTube của dự án để biết ví dụ về điều này).

Để khắc phục điều này, tôi đã triển khai một cơ chế lọc đơn giản. Bất cứ khi nào một đối tượng được phát hiện với điểm tin cậy dưới 80%, nó sẽ bị bỏ qua. Điều này rất tốt để lọc ra các kết quả dương tính giả. Nhưng còn việc lọc dữ liệu không ổn định thì sao? Để làm điều này, tôi đã sử dụng một hàm tính trung bình đơn giản, lấy 3 tọa độ gần nhất và tính trung bình chúng để cho ra tọa độ hiện tại được sử dụng cho việc tính toán chuyển động của robot. 3 tọa độ này được lưu trữ trong một mảng và điểm dữ liệu cũ nhất trong 3 điểm sẽ được thay thế ngay khi một điểm dữ liệu tọa độ mới được trả về từ mô hình thị giác máy tính (FIFO). Bằng cách tính trung bình 3 điểm dữ liệu gần nhất, chúng ta có thể dễ dàng làm mượt dữ liệu không ổn định và cũng làm mượt bất kỳ giá trị ngoại lệ nào trong dữ liệu. Về mặt lý thuyết, phương pháp này làm cho robot phản hồi chậm hơn với các chuyển động nhanh, nhưng với tốc độ khung hình đủ cao từ các mô hình phát hiện đối tượng, điều này sẽ không thành vấn đề. Bạn luôn có thể điều chỉnh giá trị trung bình nhiều hơn hoặc ít hơn 3 tùy thuộc vào nhu cầu về khả năng phản hồi so với độ mượt mà. Tôi thấy mức 3 là sự cân bằng hoàn hảo, giúp robot không bị chậm trễ đáng kể mà vẫn di chuyển mượt mà.

Servo webcam

Tôi cũng gắn webcam dùng cho dự án này lên một cơ cấu nghiêng được điều khiển bằng động cơ servo. Lý do là vì con người thường đứng thẳng và khuôn mặt của họ sẽ nằm ngoài tầm nhìn của webcam. Do đó, cơ cấu nghiêng bằng động cơ servo có thể nghiêng webcam lên trên khi tìm kiếm khuôn mặt và nghiêng xuống đất khi tìm kiếm vật thể để thu thập. Vui lòng xem các hình ảnh đính kèm ở trên để hiểu rõ hơn về cách gắn động cơ servo.

Bước 2: Cách robot nhặt đồ vật

Robot nhặt đồ vật như thế nào?
Robot nhặt đồ vật như thế nào?
Robot nhặt đồ vật như thế nào?

Giờ đây, robot đã có thể tìm thấy vật thể bằng thị giác máy tính (CV) và học máy (ML), chúng ta chuyển sang bước nhặt vật thể thực tế. Bước này được thực hiện khi robot đã điều hướng thành công đến vật thể cần tìm và cũng đã đạt đến một khoảng cách kích hoạt nhất định (trong mã của tôi là 30cm) so với vật thể mà nó đang cố gắng nhặt. Các bước để nhặt vật thể như sau:

  1. Robot sẽ mở khoang chứa đồ của nó trước tiên.
  2. Tiếp theo, robot sẽ di chuyển về phía trước 30 cm.
  3. Tiếp theo, robot sẽ đóng xe trượt của nó lại và nhặt vật thể lên.
  4. Tiếp theo, robot sẽ chuyển trở lại chế độ nhận diện khuôn mặt và quay lại chỗ người đó.

Xe trượt của robot được vận hành bằng động cơ DC chổi than. Lý do cho điều này rất đa diện. Thứ nhất, động cơ DC chổi than có hộp số rất nhỏ và dễ tìm mua. Thứ hai, việc điều khiển vị trí chính xác thông qua bộ điều khiển động cơ và bộ mã hóa của RoboClaw rất dễ dàng. Tiếp theo, động cơ DC chổi than có mô-men xoắn cực lớn nhờ tỷ số truyền cao. Điều này đặc biệt hữu ích khi xe trượt của robot cần nhặt một vật lớn hơn, nặng hơn.

Tôi chọn thiết kế dạng xe trượt thay vì cánh tay robot vì nhiều lý do.

  1. Xe trượt robot có thể nâng được những vật thể lớn và nặng hơn nhiều nhờ kích thước lớn của nó. Thêm vào đó, xe trượt robot không có nguy cơ vật thể bị tuột khỏi càng gắp vì nó giữ vật thể bằng trọng lực.
  2. Cánh tay robot cần biết chính xác vị trí cần di chuyển và việc định vị chính xác này chỉ có thể thực hiện được với một camera phụ hướng từ trên xuống, điều này làm cho cánh tay robot trở nên kém thực tế hơn.
  3. Xe trượt robot có thiết kế thon gọn hơn cánh tay robot và giúp giảm kích thước của robot.
  4. Xe trượt robot chỉ cần một động cơ thay vì nhiều động cơ servo như cánh tay robot.
  5. Xe trượt robot có thể dễ dàng được in 3D tại nhà bởi bất kỳ ai.
  6. Xe trượt robot là một giải pháp tiết kiệm chi phí hơn nhiều.

Trong số những lý do đó, ưu điểm lớn nhất của xe trượt là khả năng nâng được các vật thể lớn với nguy cơ trượt thấp hơn nhiều và không cần camera phụ.

Cơ cấu trượt hoạt động bằng cách kết nối động cơ DC chổi than với một bánh răng tuyến tính gắn vào tay trượt đầu tiên. Bánh răng tuyến tính này lại truyền chuyển động tuyến tính đến một bánh răng quay khác, bánh răng này sẽ đảo chiều chuyển động trước khi truyền đến bánh răng tuyến tính thứ hai. Hãy xem hình ảnh chú thích tôi đã đính kèm ở trên để hiểu rõ hơn về cách hoạt động của cơ cấu này.

Bước 3: Tính năng nhận diện giọng nói hoạt động như thế nào?

Tính năng nhận diện giọng nói hoạt động như thế nào?
Tính năng nhận diện giọng nói hoạt động như thế nào?

Chức năng nhận diện giọng nói trên robot hoạt động thông qua chương trình nhận diện giọng nói SnowBoy. SnowBoy là một chương trình nhận diện từ khóa kích hoạt bằng giọng nói cực kỳ nhẹ và hoạt động ngoại tuyến.

  • Điều này có nghĩa là SnowBoy hầu như không sử dụng bất kỳ sức mạnh xử lý CPU nào để phát hiện giọng nói (<2% trên Raspberry Pi 3 của tôi).
  • SnowBoy chạy cục bộ trên thiết bị. Điều này có nghĩa là giọng nói hoặc dữ liệu của bạn được xử lý trên chính Raspberry Pi chứ không phải trên máy chủ internet nào đó. Nhờ vậy, dữ liệu giọng nói của bạn được bảo mật và không có bất kỳ lo ngại nào về quyền riêng tư.
  • Snowboy có khả năng tùy chỉnh cao với bất kỳ từ khóa kích hoạt nào bạn muốn + hỗ trợ phát hiện nhiều từ khóa kích hoạt.đồng thời..

Vì Snowboy có thể phát hiện nhiều từ khóa kích hoạt cùng lúc, tôi đã tạo ra cấu trúc phát hiện giọng nói như sau:

Đầu tiên, người dùng nói từ đánh thức “Robot”. Bộ đếm thời gian nội bộ 10 giây bắt đầu và đèn màu cam bật sáng. Sau đó, người dùng phải đưa ra lệnh thứ hai, ví dụ như…

  1. “Theo tôi”: Xe tự hành tìm thấy người và đi theo họ.
  2. “coco cup” (từ “cup” quá ngắn để có thể nhận diện chính xác): Lệnh này yêu cầu robot tìm một chiếc cốc và mang đến cho bạn.
  3. “Chuối”: Robot tìm thấy một quả chuối và mang đến cho bạn.
  4. Bạn có thể thêm nhiều từ khóa kích hoạt khác cho các đối tượng khác mà bạn muốn robot phát hiện từ tập dữ liệu COCO.

Lý do sử dụng từ khóa kích hoạt robot trước khi đưa ra lệnh là để tránh vô tình kích hoạt lệnh sai. Khi robot di chuyển, độ rung từ robot đôi khi có thể tạo ra tín hiệu sai, khiến chương trình nghĩ rằng bạn đã nói một từ nhưng thực tế thì không. Bằng cách thêm từ khóa kích hoạt “robot” và bộ hẹn giờ 10 giây để nói lệnh sau đó, sẽ giúp lọc bỏ những tín hiệu sai ngẫu nhiên này.

**Toàn bộ mã nguồn đều có trong bài viết hướng dẫn trên Instrucables, nơi tôi hướng dẫn cách cài đặt.**

Bước 4: Xây dựng cơ sở vật chất

Tòa nhà vật chất
Tòa nhà vật chất
Tòa nhà vật chất

Giờ chúng ta chuyển sang phần cấu tạo vật lý của robot. Robot này được chế tạo dựa trên nền tảng Rover 5 thông dụng.

Tôi chọn nền tảng robot này vì nó rất phổ biến và được bán bởi nhiều nhà phân phối, giúp bất kỳ ai trên thế giới cũng có thể dễ dàng sao chép dự án này. Lý do thứ hai là vì nó sử dụng bánh xích thay vì bánh xe, giúp việc xoay chuyển dễ dàng hơn nhiều (một bánh xích tiến về phía trước và bánh xích kia lùi về phía sau) và cũng cho phép robot dễ dàng leo qua các chướng ngại vật nhỏ. Lý do thứ ba là vì khung gầm Rover 5 được trang bị động cơ DC có bộ mã hóa tích hợp. Hầu hết các khung gầm robot không có động cơ tích hợp bộ mã hóa. Bộ mã hóa cho bộ điều khiển động cơ RoboClaw biết vị trí của động cơ và giúp RoboClaw và robot điều khiển chuyển động chính xác hơn nhiều.

Dưới đây là một số liên kết đến nơi bạn có thể tìm thấy nền tảng Rover 5.

https://www.sparkfun.com/products/10336

https://www.dfrobot.com/product-470.html

https://www.pololu.com/product/1551

https://solarbotics.com/product/50858/

Các bộ phận vật lý còn lại đều được in 3D. Bạn có thể tải xuống tất cả các bộ phận tại đây: https://www.thingiverse.com/thing:3794952 Tôi cũng đã thêm các tệp .STEP và .F3D để bạn có thể chỉnh sửa các bộ phận cho phù hợp với nhu cầu của mình. Nếu bạn không muốn chỉnh sửa các bộ phận, bạn có thể tải xuống các tệp .stl và in 3D trực tiếp.

Dưới đây là danh sách tất cả các bộ phận bạn cần in cho dự án này.

 

  1. Tấm đế : Bộ phận này che kín lỗ hở trên bệ của robot Rover 5. Nó cũng đóng vai trò là đường ray cho các bánh răng tuyến tính của xe trượt robot. Động cơ và bánh răng của xe trượt robot cũng được gắn vào bộ phận này.
  2. Cánh tay robot 1/2 : Hai bộ phận này là cánh tay robot thực tế, ghép lại với nhau để nhặt vật thể. Phần trên của các bộ phận này cũng có bánh răng tuyến tính giúp chúng chuyển động. Hãy in các bộ phận này với mật độ lấp đầy cao hơn bình thường để đảm bảo chúng đủ chắc chắn để nhặt vật thể.
  3. Giá đỡ cảm biến khoảng cách : Bộ phận in 3D này được gắn vào mặt dưới của tấm đế. Nó chứa cảm biến khoảng cách siêu âm được sử dụng để phát hiện thời điểm cần nhặt vật thể.
  4. Bánh răng động cơ : Bộ phận này được lắp vào động cơ bằng lực ma sát và chuyển đổi chuyển động quay của động cơ thành chuyển động quay của bánh răng 12 răng.
  5. Bánh răng truyền động 1 : bộ phận này nhận chuyển động của bánh răng động cơ và truyền đến cánh tay robot đầu tiên.
  6. Bộ truyền động 2 : bộ phận này nhận chuyển động tuyến tính từ cánh tay robot trượt thứ nhất và đảo chiều chuyển động đó, đồng thời truyền đến cánh tay robot trượt thứ hai.
  7. Nắp bảo vệ bánh răng : Bộ phận này che chắn cụm bánh răng để bảo vệ nó. Nó cũng giúp cố định phần trên của các cánh tay robot ở đúng vị trí.
  8. Giá đỡ servo : Bộ phận này được gắn vào phía trên nắp hộp số và chứa servo dùng để xoay webcam.
  9. Trục webcam : Bộ phận này được gắn vào phía trên nắp hộp số ở phía đối diện với giá đỡ servo và hỗ trợ webcam khi nó xoay.
  10. Giá đỡ webcam : Bộ phận này chứa webcam và được kết nối với trục webcam và giá đỡ servo, cho phép nó xoay.
  11. Vỏ Robot – Vỏ hình cá voi này là mảnh ghép cuối cùng bao phủ toàn bộ các linh kiện điện tử để che giấu và bảo vệ chúng. Phần này cũng chứa các đèn LED báo trạng thái nhận dạng giọng nói và cả công tắc nguồn dạng nút nhấn. Phần này là tùy chọn nếu bạn muốn trưng bày các linh kiện điện tử thay vì che phủ chúng.

Bước 5: Điện tử

Điện tử
Điện tử
Điện tử

Tiếp theo, chúng ta sẽ nói đến các linh kiện điện tử cần thiết để dự án này hoạt động.

  1. Raspberry Pi 3/3B . Đây là bộ não của robot. Raspberry Pi thực hiện tất cả các phép tính để xác định vị trí robot nên đi, cách di chuyển và nhiệm vụ cần thực hiện. Raspberry Pi là trung tâm điều khiển cho tất cả các cảm biến và thiết bị điện tử, cho phép chúng hoạt động cùng nhau. Raspberry Pi 4 ra mắt khi tôi đang hoàn thành dự án nên phiên bản này không sử dụng nó. Tuy nhiên, Pi 4 vẫn là một lựa chọn tuyệt vời vì nó nhanh hơn và hỗ trợ chuẩn USB 3.0, cho phép phát hiện vật thể nhanh hơn nhiều từ bộ tăng tốc USB Coral.
  2. 2X RoboClaw 2X7A . Hai RoboClaw này là “cơ bắp” của robot. Chúng là các bộ điều khiển động cơ cho phép robot di chuyển và thực hiện các nhiệm vụ cần thiết. RoboClaw thứ nhất điều khiển cả hai động cơ bánh xích, và RoboClaw thứ hai điều khiển động cơ duy nhất của xe trượt robot. Bộ điều khiển động cơ này thực sự đặc biệt vì nó giảm tải rất nhiều quá trình xử lý điều khiển động cơ khỏi Raspberry Pi, vì Pi chỉ cần cho RoboClaw biết vị trí cần di chuyển của động cơ, và RoboClaw có thể xử lý tất cả các thao tác phức tạp về thời gian, tốc độ, gia tốc và nhịp độ của động cơ.
  3. Bộ tăng tốc USB Google Coral – Thiết bị nhỏ gọn chạy bằng nguồn USB này thực chất là một chip ASIC do Google sản xuất để tăng tốc đáng kể các tác vụ Học máy. Raspberry Pi chỉ có thể đạt được 1-2 FPS khi sử dụng CPU tích hợp để xử lý thị giác máy tính và phát hiện đối tượng, tốc độ này quá chậm khiến robot không thể phản hồi nhanh. Hơn nữa, việc chạy phát hiện đối tượng trên CPU của Raspberry Pi sử dụng 100% CPU của Raspberry Pi, khiến việc thực hiện các tác vụ khác như điều khiển động cơ, nhận dạng giọng nói, v.v. trở nên rất khó khăn. Việc chuyển sang Bộ tăng tốc USB Coral cho phép phát hiện đối tượng chạy ở tốc độ 8-12 FPS, giúp robot phản hồi nhanh hơn trong khi chỉ sử dụng 20-30% CPU của Raspberry Pi, phần lớn CPU còn lại được dành cho các tác vụ khác đã đề cập trước đó. Raspberry Pi 4 sẽ là lựa chọn tốt hơn cho dự án này hiện nay nhờ cổng USB 3.0 của Pi 4, cho phép Bộ tăng tốc USB Coral chạy nhanh hơn gấp 3-4 lần!
  4. Bộ chuyển đổi hạ áp : Thiết bị điện tử nhỏ này lấy điện áp cao của pin và hạ áp xuống còn 5 volt. Tín hiệu 5V này được sử dụng để cấp nguồn cho Raspberry Pi thông qua cổng nguồn USB.
  5. Webcam : Bạn có thể sử dụng bất kỳ webcam USB thông dụng nào hoặc Camera Raspberry Pi. Lưu ý rằng nếu bạn sử dụng camera Raspberry Pi, bạn sẽ cần sử dụng một micro USB riêng để nhận lệnh bằng giọng nói vì camera Pi không có micro tích hợp. Trong robot của tôi, tôi đã sử dụng webcam Logitech C270, nhưng một lần nữa, bạn có thể sử dụng bất kỳ webcam USB nào, bao gồm cả những webcam giá rẻ 5 đô la trên Ebay.
  6. Pin : Bạn có thể sử dụng bất kỳ loại pin nào bạn muốn. Pin LiPo rất tuyệt vì chúng có kích thước nhỏ gọn, mật độ năng lượng cao và khả năng cung cấp năng lượng cho tất cả các thiết bị điện tử trong dự án này mà không bị giới hạn dòng điện. Tôi đã sử dụng pin LiPo 2 cell 7.4 volt 1500 mAh.
  7. Động cơ : Khung gầm robot Rover 5 đã được lắp đặt sẵn động cơ. Sử dụng các động cơ và bộ mã hóa đã được lắp đặt sẵn để điều khiển robot. Đối với phần xe trượt của robot, bạn có thể sử dụng bất kỳ động cơ DC chổi than có hộp số nào có bộ mã hóa tích hợp và mô-men xoắn tốt. Hãy đảm bảo động cơ của bạn có bộ mã hóa tích hợp vì nếu không có bộ mã hóa, sẽ rất khó để điều khiển chuyển động của xe trượt robot một cách chính xác.
  8. Cảm biến khoảng cách – Đây là một cảm biến khoảng cách siêu âm HC-SR04 đơn giản. Bạn có thể sử dụng bất kỳ phiên bản thông dụng nào của cảm biến này.
  9. Servo – Bất kỳ servo 9 gram thông dụng nào cũng đều hoạt động được.

Sơ đồ chân GPIO tôi đã sử dụng (Có thể tùy chỉnh ngoại trừ các chân nối tiếp phần cứng TX/RX trên Raspberry Pi)

  1. Servo (Dùng để lia camera) – GPIO17. Nối đất và nguồn 5V từ RoboClaw.
  2. Đèn LED màu cam (Dùng khi phát hiện từ khóa đánh thức “robot”): GPIO20 + GND
  3. Đèn LED xanh lá cây (Được sử dụng khi có lệnh được đưa ra sau từ đánh thức “robot”): GPIO21 + GND
  4. RoboClaw: RoboClawS1 –> GPIO 14 của RPI. RoboClawS2 –> GPIO 15 của RPI (Kết nối GPIO14 với cả hai chân S1 của RoboClaw nhưng chỉ kết nối GPIO15 với chân S2 của RoboClaw chịu trách nhiệm điều khiển chuyển động của robot)
  5. Cảm biến khoảng cách siêu âm –> Chân Echo GPIO8. Chân Trig GPIO24. VCC–> RPI 3V (Nếu bạn kết nối cảm biến khoảng cách siêu âm với nguồn điện 5V, bạn sẽ cần sử dụng bộ chia điện áp đơn giản cho chân Echo vì Raspberry Pi hoạt động trên tín hiệu logic 3V)

Sơ đồ chân cắm RoboClaw

  1. Hướng dẫn S1, S2 trong phần Sơ đồ chân của Raspberry Pi.
  2. Động cơ A – Bánh xe bên trái của xe tự hành (Động cơ xe trượt robot nếu đây là RoboClaw được sử dụng để điều khiển xe trượt)
  3. Động cơ B – Bánh xe bên phải của xe tự hành (Trống nếu đây là RoboClaw được sử dụng để điều khiển xe trượt tuyết)
  4. EN1 – Bộ mã hóa bánh xe bên trái của xe tự hành (Bộ mã hóa động cơ xe trượt robot nếu đây là RoboClaw được sử dụng để điều khiển xe trượt)
  5. EN2 – Bánh xe bên phải của xe tự hành (Trống nếu đây là RoboClaw được sử dụng để điều khiển xe trượt tuyết)
  6. Đầu vào nguồn – Kết nối với pin 7-12 volt.

Bước 6: Tổng quan về phần mềm/mã nguồn

Tổng quan về phần mềm/mã nguồn

Có 4 đoạn mã Python chạy đồng thời.

  1. Kịch bản Snowboy nhận dạng giọng nói
  2. Kịch bản điều khiển chính của robot hướng dẫn robot di chuyển dựa trên dữ liệu đầu vào về vật thể được phát hiện, lệnh thoại và chỉ số đo từ cảm biến khoảng cách.
  3. Đoạn mã cảm biến khoảng cách (Đoạn mã này gặp sự cố khi tôi tích hợp trực tiếp vào kịch bản điều khiển robot, có lẽ do nó cần độ chính xác về thời gian và bị chậm lại bởi nhiều luồng trong kịch bản điều khiển robot chính).
  4. Đoạn mã phát hiện đối tượng này gửi luồng hình ảnh từ webcam đến bộ điều khiển USB của robot Coral và nhận dạng các đối tượng dựa trên những gì robot đang cố gắng tìm kiếm (khuôn mặt so với các đối tượng COCO).

Lý do tôi phải sử dụng 4 tập lệnh khác nhau thay vì hợp nhất chúng thành một tập lệnh duy nhất là vì hai lý do. Thứ nhất, tôi gặp sự cố với một số tập lệnh, ví dụ như tập lệnh nhận diện giọng nói Snowboy và tập lệnh phát hiện khoảng cách siêu âm, bị lỗi và không hoạt động do thời gian chạy vòng lặp mã quá lâu khi tôi kết hợp tất cả chúng lại. Vấn đề này có thể được giải quyết một phần thông qua đa xử lý (không phải đa luồng vì chỉ có một luồng chạy tại một thời điểm, khác với đa xử lý có thể chạy 2 hoặc nhiều tiến trình cùng lúc) nhưng tôi vẫn gặp một số vấn đề về thời gian. Lý do thứ hai tôi không thể kết hợp 4 tập lệnh Python là do vấn đề tương thích thư viện. Một số thư viện mà các tập lệnh cần chỉ hoạt động với Python 2.7, trong khi một số thư viện khác chỉ hoạt động với Python 3.x. Do đó, tôi buộc phải chạy các tập lệnh Python riêng biệt.

Để đảm bảo sự liên lạc giữa các tập lệnh khác nhau này, tôi đã sử dụng một giải pháp rất nhẹ nhàng gọi là MQTT. MQTT thường được các nhà sản xuất sử dụng trong các ứng dụng IoT để thêm một giao thức truyền thông nhẹ và rất nhanh vào các thiết bị thông minh. Bằng cách thêm một luồng riêng biệt vào mỗi chương trình để kiểm tra dữ liệu MQTT đến, tôi đã có thể tích hợp tất cả 4 tiến trình Python với nhau một cách rất đơn giản. Một giải pháp thay thế cho MQTT có thể là sử dụng pipe (nếu sử dụng đa xử lý) hoặc sử dụng web socket. Bạn có thể nghĩ rằng MQTT sẽ gây ra độ trễ trong việc truyền thông giữa các tiến trình, nhưng vì nó giao tiếp bên trong Raspberry Pi chứ không phải truyền dữ liệu qua internet, nên độ trễ thực tế khi gửi thông tin gần như bằng 0.

Bốn đoạn mã Python này sử dụng giao thức MQTT để giao tiếp với nhau. Sơ đồ tư duy thể hiện mối quan hệ này được đính kèm trong ảnh phía trên.

  • Kịch bản nhận dạng giọng nói Snowboy gửi thông báo đến kịch bản phát hiện đối tượng và kịch bản điều khiển robot chính. Dữ liệu này cho kịch bản nhận dạng đối tượng biết cần chạy mô hình nào (phát hiện khuôn mặt hoặc COCO) và cho kịch bản điều khiển robot chính biết nhiệm vụ hiện tại chúng ta đang cố gắng thực hiện.
  • Chương trình nhận diện khoảng cách luôn gửi thông tin đến chương trình điều khiển chính của robot, thông báo khoảng cách mà nó đang phát hiện mọi lúc. Dữ liệu này sẽ bị bỏ qua trừ khi robot đang tìm kiếm một vật thể và vật thể đó nằm ở trung tâm khung hình của webcam.
  • Tập lệnh phát hiện đối tượng luôn gửi thông tin đến tập lệnh điều khiển chính của robot để cho biết nó đang phát hiện những đối tượng nào và tọa độ của đối tượng được phát hiện.

Bước 7: Hướng dẫn cài đặt mã nguồn và thư viện

Dưới đây là các bước cần thực hiện để cài đặt mã trên thiết bị của bạn.

Trước tiên, hãy tải xuống tệp zip dự án từ liên kết GitHub này: https://github.com/SaralTayal123/Object-Finding-Ro… Tệp này sẽ cung cấp cho bạn toàn bộ mã nguồn cho robot. Tuy nhiên, chúng ta cần cài đặt một số thư viện trên Raspberry Pi để mã hoạt động đúng cách.

  1. Hãy bắt đầu bằng cách cài đặt phần mềm nhận dạng giọng nói Snowboy bằng cách làm theo liên kết này:
    https://pimylifeup.com/raspberry-pi-snowboy/
  2. Thông tin chi tiết hơn về cách thiết lập tệp .asoundrc thực tế có tại đây:
    https://docs.kitt.ai/snowboy/ (Không sử dụng tệp .asoundrc từ trang docs.kitt.ai. Hãy sử dụng định dạng từ hướng dẫn pimylifeup, nếu không tính năng nhận dạng giọng nói sẽ không hoạt động).
  3. Cài đặt các thư viện phụ thuộc của Coral/Tensorflow bằng cách sử dụng hướng dẫn chính thức của Google tại đây:
    https://coral.withgoogle.com/docs/accelerator/get-… (Nhấp vào “Có” để bật tần số tối đa)

Cài đặt OpenCV bằng cách sử dụng các lệnh sau trong cửa sổ terminal.

  1. sudo apt-get install python-opencv
  2. sudo pip3 install opencv-python==3.3.0.10 (Phiên bản mới hơn cũng có thể hoạt động)
  3. sudo apt-get install libjasper-dev
  4. sudo apt-get install libqtgui4
  5. sudo apt-get install libqt4-test

Cài đặt Mosquito theo hướng dẫn sau

  1. sudo apt-get install -y mosquitto mosquitto-clients
  2. sudo pip install paho-mqtt

Cài đặt thư viện và các thành phần phụ thuộc của RoboClaw

  1. https://resources.basicmicro.com/configuring-the-r… (Cấu hình cổng nối tiếp của RPI để giao tiếp với RoboClaw)
  2. https://resources.basicmicro.com/packet-serial-wit… (hướng dẫn cài đặt pyserial và thiết lập RoboClaw lần đầu tiên)

Cài đặt mã cảm biến khoảng cách:

  1. pip install Bluetin_Echo
  2. pip install monotonic

Vậy là xong phần cài đặt thư viện.

Để chạy đoạn mã, hãy làm theo các bước sau. (Ngoài ra, bạn cũng có thể sử dụng một tập lệnh khởi động để thực hiện việc này tự động khi xe tự hành khởi động).

Thiết bị đầu cuối 1 (mã robot chính) –

  1. Chuyển đến thư mục mà bạn đã tải mã nguồn từ GitHub xuống (Ví dụ: cd /home/pi/raspberry_pi_packet_serial)
  2. sudo python roverMainScript.py

Thiết bị đầu cuối 2 (cảm biến khoảng cách siêu âm) –

  1. Chuyển đến thư mục mà bạn đã tải mã nguồn từ GitHub xuống (Ví dụ: cd /home/pi/raspberry_pi_packet_serial)
  2. python3 distance.py

Thiết bị đầu cuối 3 (mã CV phát hiện đối tượng) –

  1. Chuyển đến thư mục mà bạn đã tải mã nguồn từ GitHub xuống (Ví dụ: cd /home/pi/raspberry_pi_packet_serial)
  2. python3 objectdetection.py

Nhà ga số 4 (Nhận dạng giọng nói Snowboy) –

  1. Chuyển đến thư mục mà bạn đã tải mã nguồn từ GitHub xuống (Ví dụ: cd /home/pi/snowboy)
  2. python demo2.py Robot.pmdl coco_cup.pmdl banana.pmdl follow_me.pmdl (Bạn có thể thêm nhiều từ khóa kích hoạt ‘—.pmdl’ khác cho bất kỳ đối tượng COCO nào khác mà bạn muốn phát hiện và nhặt lên)

Bước 8: Những thách thức tôi gặp phải + Các nguyên mẫu tôi đã loại bỏ

Những thách thức tôi đã gặp phải + Những nguyên mẫu tôi đã loại bỏ

Để kết thúc hướng dẫn này, tôi muốn nêu bật một số phương pháp thay thế mà tôi đã thử trước khi chế tạo robot theo cách tôi đã làm.

  1. Sử dụng máy tính bên ngoài để xử lý nhận dạng đối tượng. Trong thiết lập này, tôi đã sử dụng Raspberry Pi làm máy chủ webcam, nhận tín hiệu từ webcam và truyền qua mạng cục bộ hoặc internet đến một máy tính mạnh hơn để thực hiện nhận dạng đối tượng, sau đó gửi dữ liệu nhận dạng đối tượng trở lại Raspberry Pi để tính toán chuyển động. Tôi gần như buộc phải sử dụng phương pháp này vì Raspberry Pi có tốc độ khung hình (FPS) nhận dạng đối tượng rất kém. Phương pháp này khá phức tạp và làm tăng thêm độ phức tạp không cần thiết cho dự án. Điều này cũng làm cho robot hoạt động khá chậm chạp vì có độ trễ đáng kể khi truyền tín hiệu webcam đến máy tính khác để xử lý và sau đó truyền dữ liệu đã xử lý trở lại Raspberry Pi. Điều đó cũng có nghĩa là Raspberry Pi phải luôn được kết nối với internet và bất kỳ sự gián đoạn internet nào trong giây lát cũng sẽ khiến robot hoạt động vô dụng. May mắn thay, bộ tăng tốc USB Coral đã giải quyết tất cả những vấn đề đó. Nó mang lại cho tôi hiệu suất FPS tốt cho việc nhận dạng đối tượng và nó cũng rất nhỏ, đến mức có thể gắn vừa trên chính robot! Hơn nữa, nó không cần kết nối internet hoạt động để truyền video từ webcam, điều đó có nghĩa là toàn bộ robot có thể hoạt động hoàn hảo bất kể nó có được kết nối với internet hay không.
  2. Ban đầu, tôi định sử dụng bộ điều khiển động cơ cơ bản. Tôi muốn sử dụng IC điều khiển động cơ kiểu cầu H để điều khiển bánh xích của robot và động cơ của xe trượt robot. Điều này là một thảm họa vì bộ điều khiển động cơ đơn giản không cung cấp khả năng điều khiển vị trí chính xác hoặc dễ dàng triển khai với thư viện Python. RoboClaw là một bước tiến lớn vì nó là một bộ điều khiển động cơ “cắm và chạy” rất tiện lợi, có khả năng điều khiển vị trí động cơ cực kỳ chính xác, điều này rất cần thiết để xe trượt robot có thể nhặt đồ vật một cách đáng tin cậy. Hơn nữa, RoboClaw rất dễ cấu hình ở chế độ đa RoboClaw, cho phép tôi kết nối 2 RoboClaw với cổng nối tiếp phần cứng của Raspberry Pi. Ngoài ra, RoboClaw có thể được kết nối với máy tính thông qua cổng USB, cho phép tôi dễ dàng thực hiện điều chỉnh Auto-PID, kiểm tra tất cả các động cơ, kiểm tra xem các bộ mã hóa đã được đấu dây đúng hướng hay chưa, v.v.
  3. Chỉ sử dụng một mô hình thị giác máy tính (CV). Ban đầu, tôi chỉ cố gắng sử dụng mô hình phát hiện đối tượng COCO để xử lý cả lệnh “theo tôi” và “tìm đối tượng ___”. Điều này hoạt động tốt cho việc tìm kiếm đối tượng và tôi vẫn đang sử dụng nó cho phiên bản cuối cùng của robot này. Tuy nhiên, tôi gặp vấn đề với lệnh “theo tôi” vì tôi không thể phát hiện khoảng cách khuôn mặt chính xác do vùng được phát hiện của người đó tăng kích thước khi người đó đi ra xa camera và nhiều phần cơ thể hơn của người đó nằm trong tầm nhìn của camera. Hơn nữa, chỉ cần giơ tay lên cao cũng khiến hệ thống phát hiện đối tượng cho rằng bạn đã lớn hơn vì nó đang phát hiện một vùng ranh giới lớn hơn (tôi đã nói chi tiết hơn về điều này ở bước 2). Vì tôi không thể sử dụng diện tích tương đối cho các phép tính khoảng cách của mình, ban đầu tôi đã nghĩ đến việc kết hợp một cảm biến khoảng cách được gắn trên giá đỡ xoay và nghiêng, hướng nó vào trung tâm của người được phát hiện và sử dụng điều đó để xác định xem người đó đang đến gần hay xa hơn. Như bạn có thể hình dung, điều này sẽ phức tạp một cách không cần thiết, làm tăng thêm danh sách các bộ phận mà robot này sử dụng, và cũng cần rất nhiều tinh chỉnh để đảm bảo các động cơ servo hướng đúng góc vì góc của camera so với người thay đổi tùy thuộc vào khoảng cách của họ ngay cả khi họ ở cùng một vị trí trong khung hình webcam. Để tinh chỉnh này, người ta cần biết khoảng cách của người đó đến camera, điều mà chúng ta đã cố gắng tính toán ngay từ đầu. Tôi đã giải quyết vấn đề phức tạp này bằng cách đơn giản sử dụng một mô hình phát hiện khuôn mặt chuyên dụng để theo dõi vùng khuôn mặt vì khuôn mặt không bị cắt khỏi khung hình giống như toàn bộ cơ thể người bị cắt khỏi khung hình camera và khuôn mặt không bị thay đổi kích thước quá mạnh.
  4. Sử dụng cánh tay robot: Ban đầu tôi muốn sử dụng cánh tay robot để nhặt các vật thể. Tuy nhiên, như tôi đã giải thích ở phần trước của dự án này, cánh tay robot khá hạn chế vì nó chỉ có thể nhặt được các vật thể nhỏ và nhẹ. Hơn nữa, việc phải thêm một camera thứ hai để phân tích thị giác máy tính từ trên cao sẽ làm tăng thêm độ phức tạp cho dự án này. Tuy nhiên, đây là một nâng cấp thú vị trong tương lai cho các nhiệm vụ chuyên biệt hơn mà robot tự hành không thể thực hiện (tôi sẽ nói thêm về điều này ở bước tiếp theo).
  5. Vỏ cá voi: Trước khi chế tạo robot giống với tàu thám hiểm Opportunity trên sao Hỏa, tôi đã chế tạo nó trông giống một con cá voi. (Tôi đã đính kèm hình ảnh ở trên). Nó trông không đẹp bằng tàu thám hiểm hiện tại.

Bước 9: Nâng cấp trong tương lai + Những thay đổi tiềm năng bạn có thể thực hiện

Các bản nâng cấp trong tương lai + Những thay đổi tiềm năng bạn có thể thực hiện

Dự án này là một dự án vô cùng tham vọng, đã dạy cho tôi rất nhiều điều về thị giác máy tính, máy học, robot học, v.v. Việc thực hiện dự án này là một niềm vui tuyệt vời, nhưng dù vậy, giống như mọi dự án khác, dự án này vẫn còn chỗ để cải tiến và nâng cấp.

Các cải tiến và nâng cấp khả thi

  • Tích hợp trợ lý giọng nói sử dụng xử lý ngôn ngữ tự nhiên (NLP) để tương tác với người dùng và nhận các câu lệnh tự nhiên thay vì các câu lệnh chính xác. Sẽ còn tuyệt vời hơn nữa nếu trợ lý giọng nói có thể liên kết với Google Now hoặc Amazon Alexa để có thể làm được nhiều việc hơn những gì robot có thể làm. Điều này sẽ đặc biệt hữu ích với chế độ “theo dõi tôi” của robot vì bạn có thể luôn luôn cho phép trợ lý thông minh theo dõi bạn và luôn có thể nghe thấy bạn, trái ngược với một trợ lý giọng nói được cắm vào ở phòng khác.
  • Tích hợp thêm một cánh tay robot vào hệ thống xe trượt robot hiện có. Cánh tay robot sẽ cho phép robot thực hiện nhiều chức năng hữu ích hơn, chẳng hạn như mở cửa, mở nắp chai và nói chung là có thể tương tác với môi trường xung quanh thay vì chỉ nhặt và mang đồ vật như xe trượt robot.
  • Đơn giản hóa mạch điện tử + PCB tùy chỉnh. Hiện tại, robot có rất nhiều linh kiện điện tử khác nhau được kết nối với nhau bằng dây nối. Tôi rất muốn tạo ra một PCB tùy chỉnh có thể tích hợp bộ chuyển đổi hạ áp, cả hai bộ điều khiển động cơ RoboClaw, Raspberry Pi và bộ tăng tốc USB Coral vào một PCB duy nhất. Điều này cũng sẽ giúp toàn bộ robot trông gọn gàng hơn rất nhiều!

Dự án này do 1 người thực hiện!

Josgoul đã làm được!

Bạn có phải là người thực hiện dự án này không? Hãy chia sẻ với chúng tôi!

Đăng nhập để đăng bài “Tôi đã làm được!”

About the author

lbtmicr06

Leave a Comment