Mục lục:

Hướng dẫn phát hiện vật thể robot bốn chân Jetson Nano: 4 bước
Hướng dẫn phát hiện vật thể robot bốn chân Jetson Nano: 4 bước

Video: Hướng dẫn phát hiện vật thể robot bốn chân Jetson Nano: 4 bước

Video: Hướng dẫn phát hiện vật thể robot bốn chân Jetson Nano: 4 bước
Video: Chia sẻ về sự khác nhau giữa Arduino và Raspberry Jetson Nano 2024, Tháng sáu
Anonim
Image
Image

Nvidia Jetson Nano là một bộ công cụ dành cho nhà phát triển, bao gồm một SoM (Hệ thống trên Mô-đun) và một bo mạch mang tham chiếu. Nó chủ yếu được nhắm mục tiêu để tạo ra các hệ thống nhúng yêu cầu sức mạnh xử lý cao cho các ứng dụng máy học, thị giác máy và xử lý video. Bạn có thể xem đánh giá chi tiết cho nó trên kênh YouTube của tôi.

Nvidia đã cố gắng làm cho Jetson Nano trở nên thân thiện với người dùng và dễ dàng phát triển các dự án nhất có thể. Họ thậm chí còn đưa ra một khóa học nhỏ về cách chế tạo rô bốt của bạn với Jetson Nano, vài ngày sau khi bảng được đưa ra. Bạn có thể tìm thấy thông tin chi tiết về dự án đó tại đây.

Tuy nhiên, bản thân tôi gặp một số vấn đề với Jetbot như một dự án:

1) Đối với tôi, nó không đủ EPIC. Jetson Nano là một bo mạch rất thú vị với khả năng xử lý tuyệt vời và việc chế tạo một con rô bốt có bánh xe đơn giản với nó dường như là một việc rất… không thể thực hiện được.

2) Sự lựa chọn phần cứng. Jetbot yêu cầu một số phần cứng đắt tiền / có thể được thay thế bằng các lựa chọn thay thế khác - ví dụ: họ sử dụng phím điều khiển để điều khiển từ xa. Nghe có vẻ thú vị, nhưng tôi có thực sự cần một cần điều khiển để điều khiển rô bốt không?

Vì vậy, ngay sau khi có trong tay Jetson Nano, tôi đã bắt đầu làm việc với dự án của riêng mình, một Jetspider. Ý tưởng là sao chép các bản demo cơ bản mà Jetbot đã có, nhưng với phần cứng phổ biến hơn và có thể áp dụng cho nhiều loại dự án hơn.

Bước 1: Chuẩn bị phần cứng của bạn

Chuẩn bị phần cứng của bạn
Chuẩn bị phần cứng của bạn

Đối với dự án này, tôi đã sử dụng một nguyên mẫu ban đầu của robot bốn chân Zuri, do Zoobotics chế tạo. Nó đã nằm xung quanh phòng thí nghiệm của công ty chúng tôi trong một thời gian dài. Tôi đã trang bị cho nó một giá treo bằng gỗ cắt laser cho Jetson Nano và một giá gắn máy ảnh. Thiết kế của chúng là độc quyền, vì vậy nếu đối với robot Jetson Nano của bạn, bạn muốn tạo ra thứ gì đó tương tự, bạn có thể xem qua dự án Meped, một dự án bốn nhân tương tự với thiết kế mã nguồn mở. Trên thực tế, vì không ai có mã nguồn cho vi điều khiển của Zuri (Arduino Mega) trong phòng thí nghiệm của chúng tôi, nên tôi đã sử dụng mã từ Meped với một số điều chỉnh nhỏ về độ lệch chân / chân.

Tôi đã sử dụng web-cam tương thích USB Raspberry Pi thông thường và một khóa USB Wifi.

Điểm chính là vì chúng tôi sẽ sử dụng Pyserial để giao tiếp nối tiếp giữa vi điều khiển và Jetson Nano, hệ thống của bạn về cơ bản có thể sử dụng bất kỳ loại vi điều khiển nào, miễn là nó có thể được giao tiếp với Jetson Nano bằng cáp nối tiếp USB. Nếu rô bốt của bạn sử dụng động cơ DC và trình điều khiển động cơ (ví dụ: dựa trên L298P) thì có thể giao tiếp trực tiếp trình điều khiển động cơ với Jetson Nano GPIO. Nhưng, thật không may, để điều khiển các servo, bạn chỉ có thể sử dụng một bộ vi điều khiển khác hoặc một trình điều khiển servo I2C chuyên dụng, vì Jetson Nano không có GPIO PWM phần cứng.

Tóm lại, bạn có thể sử dụng loại robot với bất kỳ bộ vi điều khiển nào có thể kết nối với Jetson Nano bằng cáp dữ liệu USB. Tôi đã tải mã cho Arduino Mega lên kho lưu trữ github cho hướng dẫn này và phần liên quan đến giao tiếp Jetson Nano với Arduino ở đây:

if (Serial.available ()) {switch (Serial.read ()) {

{

trường hợp 1':

phía trước();

nghỉ;

trường hợp '2':

mặt sau();

nghỉ;

trường hợp '3':

rẽ phải();

nghỉ;

trường hợp '4':

rẽ trái();

nghỉ;

Chúng tôi kiểm tra xem có sẵn dữ liệu hay không và nếu có, hãy chuyển dữ liệu đó vào cấu trúc điều khiển trường hợp chuyển mạch. Hãy chú ý, dữ liệu từ chuỗi đến dưới dạng ký tự, hãy chú ý dấu ngoặc kép xung quanh các số 1, 2, 3, 4.

Bước 2: Cài đặt các gói cần thiết

May mắn thay cho chúng tôi, hình ảnh hệ thống Jetson Nano mặc định đi kèm với rất nhiều thứ được cài đặt sẵn (như OpenCV, TensorRT, v.v.), vì vậy chúng tôi chỉ cần cài đặt một vài gói khác để mã hoạt động và kích hoạt SSH.

Hãy bắt đầu bằng cách bật SSH trong trường hợp bạn muốn thực hiện tất cả các công việc còn lại từ xa.

cập nhật apt sudo

sudo apt install openssh-server

Máy chủ SSH sẽ tự động khởi động.

Để kết nối với máy Ubuntu của bạn qua mạng LAN, bạn chỉ cần nhập lệnh sau:

tên người dùng ssh @ ip_address

Nếu bạn có máy Windows, bạn sẽ cần cài đặt máy khách SSH, ví dụ như Putty.

Hãy bắt đầu bằng cách cài đặt Trình quản lý gói Python (pip) và Pillow để thao tác hình ảnh.

sudo apt cài đặt python3-pip python3-pil

Sau đó, chúng tôi sẽ cài đặt kho lưu trữ Jetbot, vì chúng tôi dựa vào một số phần của khung công tác của nó để thực hiện phát hiện đối tượng.

sudo apt cài đặt python3-smbus python-pyserial

git clone

cd jetbot

sudo apt-get install cmake

sudo python3 setup.py cài đặt

Cuối cùng sao chép kho lưu trữ Github của tôi cho dự án này vào thư mục chính của bạn và cài đặt Flask và một số gói khác để điều khiển từ xa của robot bằng máy chủ web.

git clone

đĩa CD

sudo pip3 cài đặt -r yêu cầu-opencv

Tải xuống mô hình SSD (Single Shot Detector) được huấn luyện trước từ liên kết này và đặt nó vào thư mục jetspider_demos.

Bây giờ chúng ta đã sẵn sàng để đi!

Bước 3: Chạy mã

Chạy mã
Chạy mã

Tôi đã thực hiện hai bản trình diễn cho Jetspider, bản trình diễn đầu tiên là điều khiển từ xa đơn giản, rất giống với bản trình diễn tôi đã thực hiện trước đó cho máy quay Banana Pi và bản trình diễn thứ hai sử dụng TensorRT để phát hiện đối tượng và gửi các lệnh di chuyển qua kết nối nối tiếp tới bộ vi điều khiển.

Vì hầu hết mã viễn thông được mô tả trong hướng dẫn khác của tôi (tôi chỉ thực hiện một số chỉnh sửa nhỏ, sắp xếp lại quá trình truyền video) ở đây tôi sẽ tập trung vào phần Phát hiện đối tượng.

Tập lệnh chính cho đối tượng theo sau là object_following.py trong jetspider_object_following, cho teleoperation là spider_teleop.py trong jetspider_teleoperation.

Tập lệnh đối tượng sau bắt đầu bằng việc nhập các mô-đun cần thiết và khai báo các biến và thể hiện lớp. Sau đó, chúng tôi khởi động máy chủ web Flask với dòng này

app.run (host = '0.0.0.0', threaded = True)

Ngay sau khi chúng tôi mở địa chỉ 0.0.0.0 (localhost) trong trình duyệt web hoặc địa chỉ Jetson Nano trên mạng (có thể kiểm tra bằng lệnh ifconfig), chức năng này sẽ được thực thi

def index ():

Nó hiển thị mẫu trang web mà chúng ta có trong thư mục mẫu. Mẫu có nguồn video được nhúng trong đó, vì vậy sau khi tải xong, def video_feed (): sẽ được thực thi, trả về đối tượng Phản hồi được khởi tạo bằng hàm trình tạo.

Bí quyết để triển khai cập nhật tại chỗ (cập nhật hình ảnh trong trang web cho luồng video của chúng tôi) là sử dụng phản hồi nhiều phần. Phản hồi nhiều phần bao gồm tiêu đề bao gồm một trong các loại nội dung nhiều phần, theo sau là các phần, được phân tách bằng điểm đánh dấu ranh giới và mỗi phần có loại nội dung cụ thể cho từng phần.

Trong hàm def gen ():, chúng ta thực hiện hàm tạo trong một vòng lặp vô hạn để chụp ảnh, gửi nó đến hàm def thi hành (img):, tạo ra một ảnh sẽ được gửi đến trang web sau đó.

def execute (img): function là nơi tất cả những điều kỳ diệu xảy ra, nó lấy một hình ảnh, thay đổi kích thước nó bằng OpenCV và chuyển nó đến cá thể lớp Jetbot ObjectDetector "model". Nó trả về trả về danh sách các phát hiện và chúng tôi sử dụng OpenCV để vẽ các hình chữ nhật màu xanh xung quanh chúng và viết các chú thích với lớp được phát hiện đối tượng. Sau đó, chúng tôi kiểm tra xem có đối tượng mà chúng tôi quan tâm hay không

Bạn có thể thay đổi số đó (53) thành số khác từ tập dữ liệu CoCo nếu bạn muốn robot của mình theo dõi các đối tượng khác, 53 là quả táo. Toàn bộ danh sách nằm trong tệp category.py.

Cuối cùng, nếu không có đối tượng nào được phát hiện trong 5 giây, chúng tôi truyền ký tự "5" để robot dừng qua nối tiếp. Nếu vật thể được tìm thấy, chúng tôi tính toán nó cách tâm ảnh bao xa và hành động tương ứng (nếu gần tâm, đi thẳng (ký tự "1" trên nối tiếp), nếu ở bên trái, đi sang trái, v.v.). Bạn có thể thử với những giá trị đó để xác định điều tốt nhất cho thiết lập cụ thể của mình!

Bước 4: Kết luận

Lời kết
Lời kết

Đây là ý chính của bản demo ObjectFollowing, nếu bạn muốn biết thêm về Flask webserver Video streaming, bạn có thể xem hướng dẫn tuyệt vời này của Miguel Grinberg.

Bạn cũng có thể xem sổ ghi chép Nvidia Jetbot Object Detection tại đây.

Tôi hy vọng việc triển khai các bản trình diễn Jetbot của tôi sẽ giúp xây dựng robot của bạn bằng cách sử dụng khung Jetbot. Tôi đã không thực hiện bản demo tránh chướng ngại vật, vì tôi nghĩ rằng việc lựa chọn mô hình sẽ không mang lại kết quả tránh chướng ngại vật tốt.

Thêm tôi trên LinkedId nếu bạn có bất kỳ câu hỏi nào và đăng ký kênh YouTube của tôi để nhận thông báo về các dự án thú vị hơn liên quan đến máy học và robot.

Đề xuất: