Mục lục:

Xây dựng ô tô tự lái của riêng bạn - (Có thể hướng dẫn này đang được tiến hành): 7 bước
Xây dựng ô tô tự lái của riêng bạn - (Có thể hướng dẫn này đang được tiến hành): 7 bước

Video: Xây dựng ô tô tự lái của riêng bạn - (Có thể hướng dẫn này đang được tiến hành): 7 bước

Video: Xây dựng ô tô tự lái của riêng bạn - (Có thể hướng dẫn này đang được tiến hành): 7 bước
Video: ✅ Tìm điểm căn xe BÊN TRÁI và BÊN PHẢI ⛔️ Hướng dẫn lái xe an toàn. 2024, Tháng bảy
Anonim
Image
Image

Xin chào, Nếu bạn xem qua sản phẩm khác có thể hướng dẫn trên Drive Robot với USB Gamepad từ xa của tôi, thì dự án này cũng tương tự, nhưng ở quy mô nhỏ hơn. Bạn cũng có thể theo dõi hoặc nhận một số trợ giúp hoặc nguồn cảm hứng từ danh sách phát Robotics, Nhận dạng giọng nói tại nhà hoặc Xe tự lái trên Youtube.

Tôi đã bắt đầu với robot lớn (Wallace 4), nhưng kể từ khi tôi bắt đầu một nhóm Meetup tại địa phương, tôi cần thứ gì đó ở quy mô nhỏ hơn và nhóm rất quan tâm đến thị giác máy tính.

Vì vậy, tôi đã xem qua khóa học Udemy này: Xây dựng xe tự lái của riêng bạn, điều này đã cho tôi ý tưởng cho dự án này.

Nếu bạn quan tâm đến khóa học Udemy, bạn có thể tiếp tục kiểm tra lại tại đó; nó được bán với một mức chiết khấu lớn theo thời gian. Lưu ý: có Phần 1 và Phần 2 - bạn cần thực hiện một số điều tra về cách nhận hai khóa học dưới dạng gói (chiết khấu).

Mục đích của hướng dẫn này là hai lần. Đầu tiên, đưa ra một số gợi ý và lựa chọn thay thế cho các phần nhất định của khóa học (chẳng hạn như các bộ phận và phần cứng). Và thứ hai, để mở rộng khóa học.

Mục đích chính của khóa học Udemy:

là có thể điều khiển một chiếc ô tô rô bốt bánh nhỏ tự lái trên con đường hai làn thu nhỏ.

Nó phải nhận ra vạch kẻ làn và khi nó đã đi đến cuối đường.

Nó phải nhận ra một dấu hiệu dừng (và dừng lại).

Ngoài ra, một tín hiệu giao thông ĐỎ và XANH.

Nó cũng phải nhận biết và di chuyển xung quanh chướng ngại vật (một chiếc xe khác).

Những gì có thể giảng dạy này bổ sung vào khóa học:

Lái chiếc ô tô nhỏ bằng Gamepad USB từ xa, giống như cách trong trò chơi Có thể hướng dẫn khác này.

Đưa ra một số lựa chọn thay thế cho những gì khóa học cung cấp.

Bạn thậm chí có thể không phải mua khóa học:

Tài liệu hướng dẫn này có thể là tất cả những gì bạn cần để bắt đầu.

Quân nhu

Các phần thiết yếu (gợi ý):

Khung rô bốt

Bốn động cơ

Arduino

Raspberry Pi (3, 3B +, 4)

Máy ảnh (Webcam USB hoặc mô-đun Picamera)

Năng lượng pin

Công tắc Bật / Tắt

dây nhảy

độc lập (nhựa và có thể cả kim loại)

Vui lòng xem lại toàn bộ Video có thể hướng dẫn và cả video trước khi cố gắng mua các bộ phận.

Sau khi hoàn thành dự án này, tôi nhận ra rằng các phần chính xác không phải là yếu tố quan trọng.

Bước 1: Thêm chi tiết về các bộ phận…

Image
Image
Thêm chi tiết về các bộ phận…
Thêm chi tiết về các bộ phận…
Thêm chi tiết về các bộ phận…
Thêm chi tiết về các bộ phận…

Video liên quan đi sâu vào một số chi tiết về các bộ phận và một số vấn đề mà tôi đã tìm thấy.

  • Nhìn xung quanh để tìm khung gầm / động cơ khác nhau
  • Động cơ phải có dây hàn vào chúng
  • Bạn có thể muốn có một máy khoan và các mũi khoan, HOẶC khung máy có nhiều lỗ hơn
  • Hãy nhớ rằng cân nặng là một vấn đề. Mọi thứ nên nhẹ nhất có thể.
  • Trình điều khiển động cơ L298 H-Bridge hoạt động tuyệt vời. LƯU Ý: nhận một cái với các khối đầu cuối vít (xem ảnh)
  • Bạn có thể sẽ muốn có cả standoffs bằng nhựa và kim loại, kích thước M3 có lẽ là sự lựa chọn tốt nhất.

Chân đế bằng nhựa tốt để gắn các bo mạch vào khung máy (trình điều khiển động cơ, Arduino, Raspberry, pcb nguồn, công tắc bật / tắt, v.v.).

Chân đế kim loại rất tốt cho việc lắp ráp khung máy (độ bền), và đặc biệt là khi bạn đang phát triển (lập trình, thử nghiệm). Để phát triển, các giá đỡ bằng kim loại có thể đóng vai trò như những chiếc cà kheo. Giống như khi bạn đang làm việc trên một chiếc ô tô thật, bạn muốn nâng ô tô lên để các bánh xe ở trên không và có thể di chuyển tự do. Cái này rất quan trọng! Bạn sẽ mắc sai lầm và bạn không muốn chiếc xe vừa cất cánh và lao vào.

Máy khoan + mũi khoan

Tôi thực sự muốn nhấn mạnh việc sử dụng máy khoan, nếu bạn có thể, và sử dụng giá đỡ thay vì băng dính hai mặt. Rất có thể bạn sẽ phải tháo và định vị lại bảng của mình, v.v., nhiều lần trong suốt dự án này và việc sử dụng băng keo trở nên rất lộn xộn.

Sử dụng máy khoan giúp bạn dễ dàng định vị lại (đặc biệt nếu khung máy bằng nhựa) và trông chuyên nghiệp hơn.

Bước 2: Cung cấp năng lượng cho xe trong quá trình phát triển

Cung cấp năng lượng cho xe trong quá trình phát triển
Cung cấp năng lượng cho xe trong quá trình phát triển
Cung cấp năng lượng cho xe trong quá trình phát triển
Cung cấp năng lượng cho xe trong quá trình phát triển

Theo tôi, cách nhanh nhất, dễ nhất để bắt đầu với dự án này là:

  • để phát triển phần mềm Arduino sketch, chỉ cần kết nối Arduino với máy tính của bạn qua USB
  • đối với phần mềm Raspberry Pi, bạn nên có nguồn USB 5V có thể cung cấp ít nhất 3 Amps. Và nó phải có công tắc bật / tắt. Trừ khi bạn có một bộ chia USB tốt, được kết nối với máy tính của mình, bạn có thể sẽ không thể cấp nguồn trực tiếp cho Raspberry từ máy tính của mình.
  • Đối với khi bạn đã sẵn sàng để kiểm tra động cơ / bánh xe, cách dễ nhất là (xem ảnh) một nguồn điện tốt. Tuy nhiên, những thứ đó không hề rẻ.

Quan điểm của tôi với phần này là nói rằng bạn không muốn sử dụng pin trong quá trình phát triển, vì điều đó sẽ làm chậm tiến trình của bạn rất nhiều.

Ngoài ra, bằng cách làm điều gì đó tương tự như những gợi ý trên, bạn không phải lo lắng (chưa) về chính xác cách bạn sẽ cung cấp năng lượng cho xe. Bạn có thể trì hoãn quyết định đó cho phần sau của dự án.

Bước 3: Cấp nguồn cho xe trong quá trình sử dụng thực tế

Cung cấp năng lượng cho xe trong quá trình sử dụng thực tế
Cung cấp năng lượng cho xe trong quá trình sử dụng thực tế
Cung cấp năng lượng cho xe trong quá trình sử dụng thực tế
Cung cấp năng lượng cho xe trong quá trình sử dụng thực tế

Nếu bạn quyết định theo khóa học (hoặc những gì tôi đã làm) để cấp nguồn 5V cho logic, thì hãy lưu ý rằng không phải tất cả các bộ nguồn 5V USB đều tốt cho dự án này.

Điểm chính ở đây là bạn cần 5V nhưng bạn cần ít nhất 3 Amps! Hãy nghĩ theo cách này - bạn muốn một bộ sạc dự phòng cung cấp năng lượng cho máy tính xách tay (có lẽ).

Nếu bạn sống ở Hoa Kỳ, tôi nghĩ một trong những cách tốt nhất để làm điều này là mua hàng từ Best Buy. Tại sao? Bởi vì họ có chính sách hoàn tiền trong 14 ngày cho các trường hợp trả lại hàng.

Tôi thực sự đã phải thử ba loại powerban khác nhau trước khi tìm được loại phù hợp. Những cái khác khiến Raspberry Pi phàn nàn về điện áp thấp.

Tôi đã bắt đầu với powerbank rẻ nhất và chỉ tiếp tục thử mô hình tiếp theo (đắt hơn), cho đến khi tôi tìm thấy một chiếc phù hợp.

Cách cấp nguồn cho Arduino

Trong khóa học về Udemy, tác giả đã chọn cấp nguồn trực tiếp cho Arduino từ pin dự phòng (thông qua một pcb tùy chỉnh do anh ta tạo ra) và anh ta đã sử dụng các chân nguồn trên đầu nối GPIO của Arduino.

Tuy nhiên, tôi đã chọn chỉ cấp nguồn cho Arduino trực tiếp từ Raspberry Pi thông qua cáp USB.

Bạn sẽ phải quyết định cái nào tốt hơn.

Cách cấp nguồn cho động cơ / trình điều khiển động cơ

Trong khóa học Udemy, tác giả đã chọn cấp nguồn trực tiếp cho động cơ / trình điều khiển từ nguồn 5V. Có hai cân nhắc nếu bạn sử dụng cách tiếp cận đó.

  1. Khi động cơ bắt đầu quay lần đầu tiên, chúng sẽ hút dòng điện nhiều nhất. Điều này có thể (sẽ) làm cho điện áp nguồn bị chùng xuống dưới 5V và khiến Raspberry thiết lập lại.
  2. Chỉ sử dụng 5V để cung cấp năng lượng cho động cơ có nghĩa là bạn không cung cấp nhiều năng lượng nhất có thể cho động cơ và xe sẽ di chuyển chậm hơn (ì ạch hơn). Tôi đã kiểm tra động cơ (với nguồn điện đó) (xem ảnh) đến ít nhất 9V. Chúng hoạt động tốt ở 9V.

Quan sát về 9V (hoặc hơn)

Nếu bạn đã xem tất cả các ảnh và video cho Có thể hướng dẫn này, bạn nhận thấy rằng tôi đã lắp ráp một PCB tùy chỉnh để tạo ra nguồn điện 9V của riêng mình. Tôi đã học được một vài điều trên đường đi.

Ngay bây giờ tôi đang sử dụng song song một số (3) tế bào pin 9V để cung cấp năng lượng cho động cơ. Tôi đã sử dụng cả pin kiềm và pin sạc NiMH.

Kinh nghiệm học tập số 1: Mất nhiều thời gian (nhiều giờ) để sạc pin NiMH 9V đúng cách.

Giải pháp khả thi: Đầu tư vào một bộ sạc NiMH nhiều pin. Nó phải là một bộ sạc "thông minh".

Nhược điểm: Chúng không hề rẻ.

Kinh nghiệm học tập # 2: Pin 9V thực sự được tạo thành từ một số tế bào nhỏ bên trong. Nếu một trong những tế bào đó bị chết, toàn bộ pin sẽ vô dụng. Tôi KHÔNG gặp vấn đề này, nhưng tôi đã đọc về nó.

Kinh nghiệm học tập # 3: Không phải tất cả pin 9V đều có cùng điện áp. Điều này là quan trọng. Vì điện áp càng cao thì tốc độ càng cao. Một số tế bào pin (và bộ sạc) chỉ có 8,4V. Một số thậm chí ít hơn. Một số là 9,6V.

Kinh nghiệm học tập # 4: Pin 9V, đặc biệt là pin NiMH, có trọng lượng nhẹ. Một điêu tôt. Tuy nhiên, hầu hết chúng chỉ cung cấp mA của dòng điện đầu ra. Đó là lý do tại sao tôi phải đặt chúng song song. Bạn cần tổng công suất hiện tại gần 2 Amps, ngay cả trong khoảng thời gian ngắn.

Kinh nghiệm học tập # 5: Có những bộ pin 9,6V, được sử dụng cho những thứ như ô tô điều khiển bằng sóng radio. Tôi chưa sử dụng một cái nào, nhưng tôi tin rằng chúng cung cấp nhiều dòng điện hơn so với việc sử dụng pin 9V song song như tôi đã làm. Ngoài ra, bạn có thể sạc một đơn vị duy nhất. Các gói có nhiều kích cỡ khác nhau. Và có một cân nhắc về trọng lượng. Và sau đó, bạn sử dụng gói để cung cấp năng lượng cho toàn bộ chiếc xe, hay chỉ cho động cơ? Nếu đối với toàn bộ chiếc xe, bạn sẽ cần bộ điều chỉnh bước xuống 5V cho Raspberry Pi.

L298 H-Bridge có khả năng xuất ra 5V cho mục đích này, nhưng tôi lo ngại về dòng điện mà nó có thể tạo ra cho Raspberry Pi và liệu nó có gây căng thẳng quá nhiều cho bo mạch L298 hay không.

Nếu bạn quyết định có hai nguồn điện riêng biệt, thì bạn có thể gặp vấn đề về trọng lượng (quá nặng).

Bước 4: Lập trình phần mềm cho Gamepad Driving

Tôi nghĩ rằng tôi đã trình bày rất nhiều phần này trong phần có thể hướng dẫn sử dụng Robot điều khiển qua USB từ xa, vì vậy tôi sẽ không lặp lại điều đó ở đây.

Các phần lập trình / phần mềm trong Có thể hướng dẫn khác chỉ là một gợi ý. Tôi nghĩ rằng người ta học được nhiều hơn bằng cách thử và sai.

Bước 5: Thêm máy ảnh

Thêm máy ảnh
Thêm máy ảnh
Thêm máy ảnh
Thêm máy ảnh
Thêm máy ảnh
Thêm máy ảnh

Trong khóa học Udemy, tôi tin rằng tác giả sử dụng chốt gỗ tròn và súng bắn keo để tạo cách nâng cao máy ảnh.

Bạn sẽ muốn nâng máy ảnh lên để máy ảnh nhìn xuống đường hai làn để có thể dễ dàng nhận ra các làn đường hơn.

Nơi tôi sống ở Hoa Kỳ, chốt bằng gỗ rất rẻ. Bạn có thể mua chúng tại Lowe's hoặc Home Depot. Tôi đã chọn chốt vuông thay vì chốt tròn.

Tôi cũng chọn làm một chân đế chắc chắn hơn cho tháp máy ảnh và tôi làm cho toàn bộ tháp có thể tháo rời khỏi ô tô, để tôi có thể tìm hiểu và thử nghiệm xem đâu là vị trí tốt nhất cho nó trên ô tô.

Ngoài ra, tôi đã làm tòa tháp với ý tưởng rằng tôi sẽ bắt đầu với một webcam USB, nhưng có thể sau đó sẽ chuyển sang sử dụng mô-đun Picamera.

Bạn có thể muốn đầu tư vào một máy ảnh kiểu mắt cá.

Tôi đã mua một khẩu súng bắn keo nóng rất rẻ tiền, nhưng tôi muốn gia cố chân tháp tốt hơn, vì vậy tôi đã khoan trước một số lỗ bắt vít và thêm vít để giữ mọi thứ với nhau tốt hơn.

Sau đó tôi bắt chân đế vào khung xe.

Nếu sau này, tôi muốn di chuyển mọi thứ xung quanh, tôi chỉ cần tháo chốt khỏi khung, khoan lỗ mới ở vị trí mới của khung và bắt vít lại tháp vào khung.

Tôi đã mang mã Python và Node.js "theo dõi tôi" từ robot lớn (Wallace Robot 4) như một cách để kiểm tra mọi thứ. Vui lòng xem các bức ảnh trong phần này để biết danh sách các youtuber cung cấp nhiều thông tin chi tiết hơn về "follow-me".

Như tôi đã đề cập, lần đầu tiên gắn webcam USB dễ dàng hơn. Sau này tôi có thể gắn mô-đun Picamera.

Bước 6: Nhận dạng khuôn mặt - Xác định vị trí

Image
Image

Phần này không phải là trọng tâm của khóa học Udemy, nhưng nó là một bài tập thú vị.

Nếu bạn thực hiện một số trang web tìm kiếm "nhận dạng khuôn mặt python opencv", bạn sẽ tìm thấy nhiều ví dụ hay về cách thực hiện điều đó và tất cả chúng đều thực hiện theo các bước tương tự.

  1. tải tệp khuôn mặt "haar"
  2. khởi tạo máy ảnh
  3. bắt đầu một vòng lặp nơi bạn lấy một khung hình
  4. chuyển đổi hình ảnh màu sang thang xám
  5. đưa nó vào opencv để nó tìm (các) khuôn mặt
  6. bắt đầu một vòng lặp bên trong (cho mỗi mặt được tìm thấy) (trong trường hợp của tôi, tôi thêm mã để hủy bỏ nếu có nhiều hơn 1 mặt)

Với mục đích này ở đây, khi chúng ta đã phát hiện một khuôn mặt, chúng ta biết X, Y, W và H của hình vuông tưởng tượng bao quanh khuôn mặt.

Nếu bạn muốn robot tiến hoặc lùi, bạn chỉ cần xem xét W. Nếu W quá lớn (quá gần), hãy yêu cầu robot di chuyển lại. Nếu W quá nhỏ (quá xa), hãy yêu cầu robot di chuyển về phía trước.

Chuyển động trái / phải chỉ phức tạp hơn một chút nhưng không điên rồ. Hãy xem hình ảnh cho phần này chi tiết cách xác định vị trí khuôn mặt bên trái và bên phải.

GHI CHÚ:

Nếu bạn chạy bất kỳ ví dụ OpenCV nào trên web, tất cả chúng đều hiển thị chế độ xem thực tế về những gì opencv đang "nhìn thấy", với khuôn mặt được phác thảo bằng hình vuông. Nếu bạn quan sát, hình vuông đó không ổn định (không đổi), ngay cả khi bạn không di chuyển.

Những giá trị thay đổi đó sẽ khiến robot liên tục chuyển động, tiến hoặc lùi, sang trái hoặc sang phải.

Vì vậy, bạn sẽ cần phải có một số loại delta cho cả tiến / lùi và trái / phải.

Hãy rẽ trái và phải:

Khi bạn đã tính toán trái và phải, sau đó nhận được sự khác biệt (delta):

delta = abs (trái - phải)

Bạn cần phải lấy tuyệt đối vì bạn không biết cái nào sẽ là con số lớn hơn.

Sau đó, bạn thêm một số mã điều kiện để chỉ cố gắng di chuyển nếu delta lớn hơn một số tối thiểu.

Bạn sẽ làm điều tương tự đối với chuyển tiếp và quay lại.

Bước 7: Vị trí khuôn mặt - Robot di chuyển

Một khi bạn biết rằng bạn cần rô-bốt di chuyển sang trái hoặc phải, tiến hoặc lùi, bạn làm như thế nào?

Vì có thể hướng dẫn này là một công việc đang được xử lý, nên hiện tại, tôi chỉ sao chép mã từ rô bốt lớn của mình để sử dụng cho dự án này. Vui lòng xem danh sách phát Robotics của tôi trên youtube, nơi trình bày chi tiết tất cả những điều này.

Tóm lại, tôi có mã trong các lớp.

Tập lệnh nhận dạng khuôn mặt Python thực hiện các yêu cầu http đến máy chủ Node.js

Máy chủ Node.js lắng nghe các yêu cầu http về hướng di chuyển, chuyển đổi chúng thành giao thức nối tiếp tùy chỉnh

Giao thức nối tiếp tùy chỉnh giữa máy chủ Node.js và Arduino

Bản phác thảo Arduino thực hiện các lệnh thực tế để di chuyển robot

Khóa học Udemy không làm điều đó như trên. Nhưng vì tôi muốn đạt được tiến bộ tốt và tập trung vào nhận dạng hình ảnh thực tế, tôi đã sử dụng lại mã trước đó của mình.

Đề xuất: