Mục lục:

Rpibot - Giới thiệu về Robot học: 9 bước
Rpibot - Giới thiệu về Robot học: 9 bước

Video: Rpibot - Giới thiệu về Robot học: 9 bước

Video: Rpibot - Giới thiệu về Robot học: 9 bước
Video: Vè Covid - 9 bước để đẩy lùi Covid #chongcovid #conganchongcovid 2024, Tháng bảy
Anonim
Rpibot - Giới thiệu về Robot học
Rpibot - Giới thiệu về Robot học

Tôi là một kỹ sư phần mềm nhúng trong một công ty ô tô của Đức. Tôi bắt đầu dự án này như một nền tảng học tập cho các hệ thống nhúng. Dự án đã bị hủy bỏ sớm nhưng tôi rất thích nó nên tôi vẫn tiếp tục trong thời gian rảnh. Đây là kết quả…

Tôi đã có các yêu cầu sau:

  • Phần cứng đơn giản (trọng tâm là phần mềm)
  • Phần cứng giá rẻ (khoảng 100 €)
  • Có thể mở rộng (một số tùy chọn đã là một phần của mô tả)
  • Cung cấp điện áp cho tất cả các thành phần từ nguồn 5V duy nhất (pin dự phòng)

Không thực sự có một mục tiêu nào khác ngoài việc học. Nền tảng này có thể được sử dụng để học tập, giám sát, các cuộc thi robot,…

Nó không phải là một hướng dẫn dành cho người mới bắt đầu. Bạn cần một số kiến thức cơ bản về:

  • Lập trình (Python)
  • Điện tử cơ bản (để kết nối các mô-đun với nhau bằng điện áp phù hợp)
  • Lý thuyết điều khiển cơ bản (PID)

Cuối cùng, bạn có thể sẽ phải đối mặt với những vấn đề như tôi đã làm. Với một số trí tò mò và sức chịu đựng, bạn sẽ đi qua dự án và giải quyết các thách thức. Mã của tôi càng đơn giản càng tốt và các dòng mã quan trọng được nhận xét để đưa ra gợi ý.

Mã nguồn hoàn chỉnh và các tệp có sẵn tại đây:

Quân nhu:

Cơ học

  • 1x ván ép (khổ A4, dày 4 mm)
  • 3x M4 x 80 Vít và đai ốc
  • 2x Động cơ bánh răng với trục đầu ra thứ cấp cho bộ mã hóa. Bánh xe.
  • 1x bánh xe miễn phí

1x Gắn camera xoay và nghiêng (tùy chọn)

Thiết bị điện tử

  • 1x Raspberry Pi Zero với tiêu đề và camera
  • 1x điều khiển servo PCA 9685
  • 2x bánh xe và mạch mã hóa quang học
  • 1x dây jumper nữ
  • 1x pin dự phòng USB
  • 1x trình điều khiển động cơ kép DRV8833
  • 2x Micro servo SG90 để xoay và nghiêng máy ảnh (tùy chọn)
  • 1x MPU9250 IMU (tùy chọn)
  • Cảm biến khoảng cách siêu âm 1x HC-SR04 (tùy chọn)
  • 1x bảng đục lỗ và dây hàn, tiêu đề,…

Bước 1: Xây dựng khung

Xây dựng khung gầm
Xây dựng khung gầm
Xây dựng khung gầm
Xây dựng khung gầm
Xây dựng khung gầm
Xây dựng khung gầm

Tôi không phải là một nhà thiết kế cơ khí giỏi. Ngoài ra, mục tiêu của dự án là không dành quá nhiều thời gian trong khung. Dù sao, tôi đã xác định các yêu cầu sau:

  • Vật liệu rẻ
  • Lắp ráp và tháo gỡ nhanh chóng
  • Có thể mở rộng (ví dụ: không gian cho các cảm biến được thêm vào)
  • Vật liệu nhẹ để tiết kiệm năng lượng cho các thiết bị điện tử

Một khung xe dễ dàng và rẻ tiền có thể được làm bằng ván ép. Nó rất dễ dàng để gia công bằng máy cưa bàn và máy khoan cầm tay. Bạn có thể dán các bộ phận nhỏ bằng gỗ để tạo giá đỡ cho các cảm biến và động cơ.

Hãy suy nghĩ về việc thay thế các thành phần bị lỗi hoặc gỡ lỗi điện. Các bộ phận chính cần được cố định bằng vít để có thể thay thế được. Một khẩu súng bắn keo nóng có thể đơn giản, nhưng có lẽ không phải là cách tốt nhất để chế tạo khung xe… Tôi cần nhiều thời gian để nghĩ về một khái niệm đơn giản để tháo rời các bộ phận một cách dễ dàng. In 3D là một giải pháp thay thế tốt, nhưng có thể khá tốn kém hoặc tốn thời gian.

Bánh xe miễn phí cuối cùng rất nhẹ và dễ lắp. Tất cả các lựa chọn thay thế đều nặng hoặc đầy ma sát (tôi đã thử một vài trong số chúng trước khi tìm ra cái cuối cùng). Tôi chỉ phải cắt một miếng đệm bằng gỗ để cân bằng bánh xe không có đuôi sau khi lắp các bánh xe chính.

Thuộc tính bánh xe (để tính toán phần mềm)

Chu vi: 21, 5 cm Số xung: 20 xung / vòng. Độ phân giải: 1, 075 cm (cuối cùng 1 xung là khoảng 1cm, dễ dàng cho việc tính toán phần mềm)

Bước 2: Điện tử và dây điện

Điện tử và Hệ thống dây điện
Điện tử và Hệ thống dây điện
Điện tử và Hệ thống dây điện
Điện tử và Hệ thống dây điện
Điện tử và Hệ thống dây điện
Điện tử và Hệ thống dây điện

Dự án đang sử dụng các mô-đun khác nhau như thể hiện trên sơ đồ.

Raspberry Pi Zero là bộ điều khiển chính. Nó đang đọc các cảm biến và điều khiển động cơ bằng tín hiệu PWM. Nó được kết nối với một PC từ xa bằng wifi.

DRV8833 là một cầu H động cơ kép. Nó cung cấp đủ dòng điện cho các động cơ (điều mà Raspberry Pi không thể làm được vì đầu ra chỉ có thể cung cấp một số mA).

Bộ mã hóa quang học cung cấp tín hiệu hình vuông mỗi khi ánh sáng đi qua các bánh xe bộ mã hóa. Chúng tôi sẽ sử dụng ngắt HW của Raspberry Pi để lấy thông tin mỗi khi tín hiệu chuyển đổi.

Pca9695 là một bảng điều khiển servo. Nó được giao tiếp bởi một bus nối tiếp I2C. Bo mạch này cung cấp các tín hiệu PWM và điện áp cung cấp đang điều khiển các servo để quay và nghiêng của cam.

MPU9265 là cảm biến gia tốc 3 trục, tốc độ quay góc 3 trục và cảm biến từ thông 3 trục. Chúng tôi sẽ sử dụng nó chủ yếu để lấy tiêu đề la bàn.

Các mô-đun khác nhau đều được kết nối với nhau bằng dây nhảy. Một breadboard hoạt động như một bộ điều phối và cung cấp điện áp cung cấp (5V và 3,3V) và mặt đất. Tất cả các kết nối được mô tả trong bảng kết nối (xem phần đính kèm). Kết nối 5V với đầu vào 3.3V có thể sẽ phá hủy chip của bạn. Hãy cẩn thận và kiểm tra tất cả hệ thống dây điện của bạn hai lần trước khi cung cấp (đặc biệt ở đây là bộ mã hóa phải được xem xét). Bạn nên đo điện áp cung cấp chính trên bảng điều khiển bằng đồng hồ vạn năng trước khi kết nối tất cả các bảng. Các mô-đun được cố định bằng vít nylon vào khung máy. Cũng ở đây, tôi rất vui khi có chúng cố định nhưng cũng có thể tháo rời trong trường hợp trục trặc.

Mối hàn duy nhất cuối cùng là động cơ và bảng mạch và tiêu đề. Thành thật mà nói, tôi thích dây nhảy nhưng chúng có thể dẫn đến kết nối lỏng lẻo. Trong một số tình huống, một số phần mềm giám sát có thể hỗ trợ bạn trong việc phân tích các kết nối.

Bước 3: Cơ sở hạ tầng phần mềm

Cơ sở hạ tầng phần mềm
Cơ sở hạ tầng phần mềm
Cơ sở hạ tầng phần mềm
Cơ sở hạ tầng phần mềm

Sau khi đạt được cơ chế, chúng tôi sẽ thiết lập một số cơ sở hạ tầng phần mềm để có điều kiện phát triển thoải mái.

Git

Đây là một hệ thống kiểm soát phiên bản mã nguồn mở và miễn phí. Nó được sử dụng để quản lý các dự án lớn như Linux, nhưng cũng có thể dễ dàng được sử dụng cho các dự án nhỏ (xem Github và Bitbucket).

Các thay đổi của dự án có thể được theo dõi cục bộ và cũng được đẩy đến một máy chủ từ xa để chia sẻ phần mềm với cộng đồng.

Các lệnh được sử dụng chính là:

git clone https://github.com/makerobotics/RPIbot.git [Lấy mã nguồn và cấu hình git]

git pull origin master [tải bản mới nhất từ kho lưu trữ từ xa]

git status [lấy trạng thái của kho lưu trữ cục bộ. Có tệp nào bị thay đổi không?] Git log [lấy danh sách các cam kết] git add. [thêm tất cả các tệp đã thay đổi vào giai đoạn được xem xét cho lần cam kết tiếp theo] git commit -m "comment for commit" [cam kết các thay đổi đối với kho lưu trữ cục bộ] git push origin master [đẩy tất cả các cam kết đến kho lưu trữ từ xa]

Ghi nhật ký

Python đang cung cấp một số chức năng ghi nhật ký được tích hợp sẵn. Cấu trúc phần mềm nên xác định tất cả khung ghi nhật ký trước khi bắt đầu phát triển thêm.

Trình ghi nhật ký có thể được cấu hình để ghi nhật ký với định dạng xác định trong thiết bị đầu cuối hoặc trong tệp nhật ký. Trong ví dụ của chúng tôi, trình ghi nhật ký được cấu hình bởi lớp máy chủ web nhưng chúng tôi cũng có thể tự làm điều đó. Ở đây chúng tôi chỉ đặt cấp độ ghi nhật ký thành GỠ LỖI:

logger = logging.getLogger (_ name_)

logger.setLevel (ghi nhật ký. DEBUG)

Đo lường và vẽ biểu đồ

Để phân tích các tín hiệu theo thời gian, cách tốt nhất là vẽ chúng dưới dạng biểu đồ. Vì Raspberry Pi chỉ có thiết bị đầu cuối bảng điều khiển, chúng tôi sẽ theo dõi dữ liệu trong tệp csv được phân tách bằng dấu chấm phẩy và vẽ biểu đồ từ PC từ xa.

Tệp theo dõi được phân tách bằng dấu chấm phẩy được tạo bởi mã python chính của chúng tôi và phải có tiêu đề như sau:

dấu thời gian; yawCorr; encoderR; I_L; odoDistance; ax; encoderL; I_R; yaw; eSpeedR; eSpeedL; pwmL; speedL; CycleTimeControl; wz; pwmR; speedR; Iyaw; hdg; m_y; m_x; eYaw; cycleTimeSense;

1603466959.65;0;0;25;0.0;-0.02685546875;0;25;0;25;25;52;0.0;23;0.221252441406;16;0.0;0;252.069366413;-5.19555664062;-16.0563964844;0;6; 1603466959.71;0;0;50;0.0;0.29150390625;0;50;0;25;25;55;0.0;57;-8.53729248047;53;0.0;0;253.562118111;-5.04602050781;-17.1031494141;0;6; 1603466959.76;0;-1;75;0.0;-0.188232421875;1;75;2;25;25;57;0;52;-24.1851806641;55;0;0;251.433794171;-5.64416503906;-16.8040771484;2;7;

Cột đầu tiên chứa dấu thời gian. Các cột sau đây là miễn phí. Kịch bản vẽ biểu đồ được gọi với danh sách các cột được vẽ biểu đồ:

remote @ pc: ~ / python rpibot_plotter -f trace.csv -p speedL, speedR, pwmL, pwmR

Kịch bản cốt truyện có sẵn trong thư mục công cụ:

Máy vẽ đồ thị đang sử dụng mathplotlib bằng Python. Bạn phải sao chép nó vào PC của mình.

Để thoải mái hơn, tập lệnh python được gọi bằng tập lệnh bash (plot.sh) được sử dụng để sao chép tệp theo dõi Raspberry Pi sang PC từ xa và gọi trình vẽ đồ thị với lựa chọn tín hiệu. nếu tệp phải được sao chép. Điều này thuận tiện hơn cho tôi thay vì sao chép thủ công mỗi lần. "sshpass" được sử dụng để sao chép tệp từ Raspberry Pi sang PC từ xa thông qua scp. Nó có thể sao chép một tập tin mà không cần yêu cầu mật khẩu (nó được truyền dưới dạng một tham số).

Cuối cùng một cửa sổ được mở ra với cốt truyện như trong hình.

Giao tiếp từ xa

Giao diện phát triển cho Raspberry Pi là SSH. Các tệp có thể được chỉnh sửa trực tiếp trên mục tiêu hoặc sao chép bằng scp.

Để điều khiển robot, một máy chủ web đang chạy trên Pi, cung cấp khả năng điều khiển thông qua Websockets. Giao diện này được mô tả trong bước tiếp theo.

Thiết lập Raspberry Pi

Có một tệp mô tả quá trình thiết lập Raspberry Pi trong thư mục "doc" của mã nguồn (setup_rpi.txt). Không có nhiều giải thích nhưng nhiều lệnh và liên kết hữu ích.

Bước 4: Giao diện người dùng

Giao diện người dùng
Giao diện người dùng

Chúng tôi sử dụng máy chủ web Tornado nhẹ để lưu trữ giao diện người dùng. Nó là một mô-đun Python mà chúng tôi gọi khi chúng tôi khởi động phần mềm điều khiển robot.

Kiến trúc phần mềm

Giao diện người dùng được tạo bởi các tệp sau: gui.html [Mô tả bố cục và điều khiển trang web] gui.js [Chứa mã javascript để xử lý các điều khiển và mở kết nối websocket với rô bốt của chúng tôi] gui.css [Chứa các kiểu của các điều khiển html. Vị trí của các điều khiển được xác định ở đây]

Giao tiếp websocket

Giao diện người dùng không phải là tuyệt vời nhất, nhưng nó đang thực hiện công việc. Ở đây tôi tập trung vào các công nghệ mới đối với tôi như Websockets.

Trang web đang giao tiếp với máy chủ web rô bốt bằng Websockets. Đây là một kênh giao tiếp hai chiều sẽ luôn mở khi kết nối được bắt đầu. Chúng tôi gửi các lệnh của robot qua Websocket đến Raspberry Pi và lấy thông tin (tốc độ, vị trí, luồng camera) để hiển thị.

Bố cục giao diện

Giao diện người dùng có đầu vào thủ công cho các lệnh. Điều này đã được sử dụng ngay từ đầu để gửi lệnh đến robot. Hộp kiểm đang bật và tắt luồng camera. Hai thanh trượt đang điều khiển xoay và nghiêng máy ảnh. Phần trên cùng bên phải của giao diện người dùng đang điều khiển chuyển động của rô-bốt. Bạn có thể kiểm soát tốc độ và khoảng cách mục tiêu. Thông tin đo từ xa cơ bản được hiển thị trong bản vẽ robot.

Bước 5: Lập trình Nền tảng Robot

Lập trình Nền tảng Robot
Lập trình Nền tảng Robot
Lập trình Nền tảng Robot
Lập trình Nền tảng Robot
Lập trình Nền tảng Robot
Lập trình Nền tảng Robot

Phần này là mục tiêu chính của dự án. Tôi đã cấu trúc lại rất nhiều phần mềm khi giới thiệu bộ khung mới với động cơ DC. Tôi sử dụng Python làm ngôn ngữ lập trình vì những lý do khác nhau:

  • Nó là ngôn ngữ chính của Raspberry Pi
  • Nó là một ngôn ngữ cấp cao với nhiều tính năng và tiện ích mở rộng được tích hợp sẵn
  • Nó là hướng đối tượng nhưng cũng có thể được sử dụng để lập trình tuần tự
  • Không cần biên dịch hoặc chuỗi công cụ. Chỉnh sửa mã và chạy nó.

Kiến trúc phần mềm chính

Phần mềm là hướng đối tượng, được chia thành một vài đối tượng. Ý tưởng của tôi là chia mã thành 3 khối chức năng:

Sense Think Actuate

Sense.py

Thu nhận và xử lý cảm biến chính. Dữ liệu được lưu trữ trong từ điển để sử dụng trong giai đoạn sau.

Control.py

Một lớp con truyền động đang điều khiển các động cơ và servo sau một số trừu tượng. Đối tượng Điều khiển chính đang xử lý các lệnh cấp cao và cả các thuật toán điều khiển (PID) cho động cơ.

rpibot.py

Đối tượng chính này đang quản lý máy chủ web Tornado và khởi tạo các lớp cảm giác và điều khiển trong các luồng riêng biệt.

Mỗi mô-đun có thể được chạy một mình hoặc như một phần của toàn bộ dự án. Bạn chỉ có thể cảm nhận và in ra thông tin cảm biến để kiểm tra xem các cảm biến có được kết nối chính xác và cung cấp thông tin phù hợp hay không.

Điều khiển PID

Nhiệm vụ đầu tiên là tìm ra những gì chúng ta muốn kiểm soát. Tôi bắt đầu bằng cách cố gắng kiểm soát vị trí, điều này rất phức tạp và không giúp được gì nhiều.

Cuối cùng, chúng tôi muốn kiểm soát từng tốc độ bánh xe và cả hướng của rô bốt. Để làm điều đó, chúng ta phải phân tầng hai lôgic điều khiển.

Để tăng độ phức tạp lên từng bước, rô bốt cần được điều khiển:

vòng lặp mở (với công suất không đổi)

pwm = K

sau đó thêm thuật toán vòng lặp đóng

pwm = Kp.speedError + Ki. Integration (speedError)

và cuối cùng thêm điều khiển hướng như một bước cuối cùng.

Đối với điều khiển tốc độ, tôi đã sử dụng điều khiển "PI" và "P" chỉ cho ngáp. Tôi tự thiết lập các thông số bằng cách thử nghiệm. Có lẽ nhiều thông số tốt hơn có thể được sử dụng ở đây. Mục tiêu của tôi chỉ là một đường thẳng và tôi gần như đã đạt được nó. Tôi đã tạo một giao diện trong phần mềm để viết một số biến bằng giao diện người dùng. Đặt tham số Kp thành 1.0 cần lệnh sau trong giao diện người dùng:

BỘ; Kp; 1,0

Tôi có thể đặt thông số P vừa đủ thấp để tránh bất kỳ ảnh chụp quá mức nào. Lỗi còn lại được sửa bằng tham số I (lỗi tích hợp)

Thật khó khăn cho tôi để tìm ra cách xếp tầng cả hai điều khiển. Giải pháp rất đơn giản, nhưng tôi đã thử nhiều cách khác trước đây… Vì vậy, cuối cùng, tôi đã thay đổi mục tiêu tốc độ của các bánh xe để rẽ theo hướng này hoặc hướng khác. Thay đổi trực tiếp đầu ra điều khiển tốc độ là một lỗi vì bộ điều khiển tốc độ đang cố gắng loại bỏ nhiễu này.

Sơ đồ điều khiển đã sử dụng được đính kèm. Nó chỉ hiển thị phía bên trái của điều khiển robot.

Bước 6: Hiệu chỉnh cảm biến

Hiệu chuẩn cảm biến
Hiệu chuẩn cảm biến
Hiệu chuẩn cảm biến
Hiệu chuẩn cảm biến
Hiệu chuẩn cảm biến
Hiệu chuẩn cảm biến

Điều đầu tiên cần xem xét là toàn bộ IMU phải hoạt động bình thường. Tôi đã đặt hàng 3 bộ phận và gửi chúng trở lại cho đến khi tôi có một bộ cảm biến hoạt động đầy đủ. Mỗi bộ cảm biến trước đây đều có một số bộ phận của bộ cảm biến không hoạt động bình thường hoặc hoàn toàn không hoạt động. Tôi đã sử dụng một số đoạn mã ví dụ để kiểm tra những điều cơ bản trước khi lắp nó vào rô bốt.

Các tín hiệu cảm biến IMU cần được hiệu chỉnh trước khi sử dụng. Một số tín hiệu cảm biến phụ thuộc vào góc lắp và vị trí.

Hiệu chỉnh gia tốc và tốc độ quay

Hiệu chuẩn đơn giản nhất là đối với gia tốc dọc (A_x). Khi ngừng hoạt động, phải có khoảng 0 m / s². Nếu bạn xoay cảm biến đúng cách, bạn có thể đo trọng lực (khoảng 9, 8 m / s²). Để hiệu chỉnh a_x, bạn chỉ cần gắn nó đúng cách và sau đó xác định độ lệch để có được 0 m / s² khi dừng lại. Bây giờ A_x đã được hiệu chỉnh. Bạn có thể lấy hiệu số cho tốc độ quay theo cách tương tự khi dừng.

Hiệu chuẩn từ kế cho la bàn

Việc hiệu chuẩn phức tạp hơn là cần thiết cho các cảm biến từ trường. Chúng ta sẽ sử dụng m_x và m_y để lấy từ trường theo phương ngang. Có m_x và m_y sẽ cho chúng ta cơ hội để tính toán hướng của la bàn.

Đối với mục đích đơn giản của chúng tôi, chúng tôi sẽ chỉ hiệu chỉnh độ lệch sắt cứng. Điều này phải được thực hiện khi cảm biến ở vị trí cuối cùng vì nó phụ thuộc vào nhiễu từ trường.

Chúng tôi ghi lại m_x và m_y trong khi chúng tôi quay robot quanh trục z. Chúng tôi vẽ biểu đồ m_x so với m_y trong biểu đồ XY. Kết quả là một dấu chấm lửng như trong hình. Dấu chấm lửng phải được căn giữa vào gốc. Ở đây chúng tôi xem xét các giá trị lớn nhất và nhỏ nhất của m_x và m_y để nhận được hiệu số theo cả hai hướng. Cuối cùng, chúng tôi kiểm tra hiệu chuẩn và thấy rằng dấu chấm lửng hiện đã được căn giữa.

Hiệu chỉnh sắt mềm có nghĩa là chúng ta thay đổi hình ảnh từ hình elip thành hình tròn. Điều này có thể được thực hiện bằng cách thêm một hệ số trên mỗi giá trị senor.

Giờ đây, một quy trình kiểm tra có thể được mã hóa để hiệu chuẩn lại hoặc ít nhất là để kiểm tra xem các cảm biến vẫn được hiệu chuẩn.

Đề mục la bàn

Dữ liệu từ kế sẽ được sử dụng để tính toán hướng của la bàn. Đối với điều này, chúng ta phải chuyển đổi tín hiệu m_x và m_y thành một góc. Python đang trực tiếp cung cấp hàm math.atan2 có mục tiêu này. Tính toán hoàn chỉnh được xác định trong tệp mpu9250_i2c.py ("calcHeading (mx, my, mz)").

Bước 7: Thiết kế thay thế

Thiết kế thay thế
Thiết kế thay thế
Thiết kế thay thế
Thiết kế thay thế
Thiết kế thay thế
Thiết kế thay thế

Dự án đã mất rất nhiều thời gian vì thiết kế hoàn toàn mở. Đối với mỗi thành phần, tôi đã thực hiện một số triển khai nguyên mẫu và trải nghiệm các giới hạn của hệ thống.

Chủ đề phức tạp nhất là bộ mã hóa bánh xe. Tôi đã thử nghiệm 3 tùy chọn khác nhau trước khi tìm thấy bộ mã hóa quang hiện đang được sử dụng. Tôi nghĩ rằng các giải pháp bị hủy bỏ cũng rất thú vị trong một dự án như vậy. Nó liên quan đến những phần mà tôi đã học được nhiều nhất.

Servo xoay liên tục được kết nối với pca 9695

Để tránh một cầu H bổ sung cho động cơ DC, trước tiên tôi bắt đầu với các servo quay liên tục. Chúng được điều khiển bởi trình điều khiển servo pca 9695 đã có mặt. Tất cả cơ học đẩy và thiết bị điện tử tương ứng đều đơn giản hơn nhiều. Thiết kế này có hai nhược điểm:

  • Phạm vi kiểm soát kém của các Servos.
  • Vị trí giữ bộ mã hóa bị thiếu

Các servo bắt đầu di chuyển với tốc độ 50% pwm và có tốc độ tối đa khoảng 55%. Đây là một phạm vi kiểm soát rất kém.

Nếu không có bộ mã hóa giữ, rất khó tìm được một bộ mã hóa sẵn sàng hoạt động. Tôi đã thử nghiệm 3 bộ mã hóa phản xạ khác nhau được gắn trên khung. Tôi đã dán một bánh xe mã hóa tự tạo ở bên ngoài bánh xe với các phần màu đen và trắng. Tôi đã sử dụng cảm biến QTR-1RC cần nhiều xử lý tín hiệu để có được tín hiệu phù hợp. Raspberry Pi không thể thực hiện loại xử lý thời gian thực đó. Vì vậy, tôi quyết định thêm NodeMCU D1 mini làm bộ điều khiển thời gian thực cho robot. Nó được kết nối với raspberry Pi bằng UART nối tiếp để cung cấp dữ liệu cảm biến đã xử lý. NodeMCU cũng đang quản lý cảm biến HC-SR04. Cơ khí rất khó và không mạnh mẽ, dòng nối tiếp bị nhiễu từ dòng I2C và các động cơ, vì vậy cuối cùng tôi đã chế tạo phiên bản thứ hai của khung với động cơ DC bánh răng đơn giản được điều khiển bởi một cầu H. Các động cơ này có một trục đầu ra thứ cấp để đặt bộ mã hóa quang học.

Bước 8: Xử lý hình ảnh

Đang xử lý hình ảnh
Đang xử lý hình ảnh
Đang xử lý hình ảnh
Đang xử lý hình ảnh
Đang xử lý hình ảnh
Đang xử lý hình ảnh
Đang xử lý hình ảnh
Đang xử lý hình ảnh

Để cải thiện tính năng lái xe tự động, chúng tôi có thể thực hiện một số xử lý hình ảnh.

Thư viện opencv là một tài liệu tham khảo cho điều đó. Nó có thể được Python sử dụng để triển khai nhanh chóng việc phát hiện chướng ngại vật.

Chúng tôi chụp ảnh và áp dụng một số tác vụ xử lý ảnh:

Các thử nghiệm đầu tiên được thực hiện với phép biến hình Canny và Sobel. Canny có thể là một ứng cử viên sáng giá nhưng không đủ nhạy bén. Sobel quá nhạy cảm (phát hiện quá nhiều đối tượng).

Cuối cùng, tôi đã tạo bộ lọc của riêng mình để trộn tất cả các gradient ngang và dọc (phát hiện đồ nội thất):

  • Chuyển đổi hình ảnh màu thành hình ảnh mức xám
  • Làm mờ hình ảnh để loại bỏ nhiễu nhỏ
  • Đặt hình ảnh thành hình ảnh đen trắng
  • Bây giờ chúng tôi phát hiện độ dốc ngang và dọc để phát hiện các đối tượng là tường và đồ nội thất
  • Chúng tôi chỉ lọc các đường viền lớn còn lại (xem các đường viền màu trong hình)

Giờ đây, chúng tôi có thể sử dụng thông tin mới này để phát hiện các chướng ngại vật…

Bước 9: Các bước tiếp theo…

Bước tiếp theo…
Bước tiếp theo…
Bước tiếp theo…
Bước tiếp theo…

Giờ đây, chúng ta có một nền tảng robot đơn giản với các cảm biến, thiết bị truyền động và một camera. Mục tiêu của tôi là di chuyển tự động và quay trở lại nhà ga mà không cần thêm bất kỳ cảm biến nào khác. Đối với điều này, tôi sẽ cần các bước sau:

  • Kết hợp cảm biến của tín hiệu đầu từ và đầu từ
  • Xử lý hình ảnh máy ảnh (chỉ có CPU thấp cho điều đó)
  • Phát hiện va chạm (khoảng cách siêu âm và camera)
  • Xây dựng bản đồ hoặc định hướng

Bây giờ hãy đi và tạo ra những thách thức hoặc mục tiêu của riêng bạn…

Đề xuất: