Mục lục:

Xe tự hành: 7 bước (có hình ảnh)
Xe tự hành: 7 bước (có hình ảnh)

Video: Xe tự hành: 7 bước (có hình ảnh)

Video: Xe tự hành: 7 bước (có hình ảnh)
Video: Xe tự lái - Triển vọng công nghệ của tương lai | VTV24 2024, Tháng mười một
Anonim
Xe tự hành
Xe tự hành
Xe tự hành
Xe tự hành

Dự án này là một robot điều hướng tự động cố gắng đạt được vị trí mục tiêu trong khi tránh các chướng ngại vật trên đường đi. Robot sẽ được trang bị một cảm biến LiDAR sẽ được sử dụng để phát hiện các vật thể trong môi trường xung quanh nó. Khi các đối tượng được phát hiện và robot di chuyển xung quanh, bản đồ thời gian thực sẽ được cập nhật. Bản đồ sẽ được sử dụng để lưu vị trí của các chướng ngại vật đã được xác định. Bằng cách này, rô bốt sẽ không thử lại đường dẫn không thành công đến vị trí mục tiêu. Thay vào đó, nó sẽ thử những con đường không có chướng ngại vật hoặc những con đường chưa được kiểm tra xem có chướng ngại vật hay không.

Robot sẽ di chuyển bằng hai bánh xe điều khiển động cơ DC và hai bánh xe đẩy. Các động cơ sẽ được gắn vào đáy của một bệ hình tròn. Các động cơ sẽ được điều khiển bởi hai trình điều khiển động cơ. Các trình điều khiển động cơ sẽ nhận các lệnh PWM từ Bộ xử lý Zynq. Các bộ mã hóa trên mỗi động cơ đều được sử dụng để theo dõi vị trí và hướng của xe. Toàn bộ hệ thống sẽ được cấp nguồn bằng pin LiPo.

Bước 1: Lắp ráp xe

Lắp ráp xe
Lắp ráp xe
Lắp ráp xe
Lắp ráp xe
Lắp ráp xe
Lắp ráp xe
Lắp ráp xe
Lắp ráp xe

Robot được cung cấp năng lượng bởi hai động cơ gắn vào bánh xe bên và sau đó được hỗ trợ thêm bởi hai bánh xe, một ở phía trước và một ở phía sau. Nền tảng và giá đỡ động cơ được làm bằng nhôm tấm kim loại. Một trung tâm động cơ đã được mua để gắn các bánh xe vào động cơ. Tuy nhiên, cần phải thực hiện một bộ ghép trung gian tùy chỉnh vì mẫu lỗ của trục xoay khác với mẫu lỗ của bánh xe.

Động cơ được chọn là động cơ DC Port Escap 12V với bộ mã hóa tích hợp. Động cơ này có thể được mua trên ebay với giá rất hợp lý (xem Bill of Materials). Từ khóa tìm kiếm “Động cơ DC không giảm tốc 12V Escap 16 có bộ mã hóa” trên ebay để tìm động cơ. Thường có một số lượng hợp lý người bán để lựa chọn. Các thông số kỹ thuật và sơ đồ chân của động cơ được hiển thị trong sơ đồ bên dưới.

Quá trình lắp ráp robot bắt đầu với thiết kế mô hình CAD của khung xe. Mô hình dưới đây cho thấy mặt trên của biên dạng hình dạng 2D được thiết kế cho khung xe.

Người ta đề xuất rằng khung gầm được thiết kế dưới dạng 2Dprofile để có thể dễ dàng sản xuất. Chúng tôi cắt một tấm nhôm 12”X12” thành hình dạng của khung xe bằng cách sử dụng máy cắt tia nước. Nền tảng khung gầm cũng có thể được cắt bằng cưa vòng.

Bước 2: Gắn động cơ

Gắn động cơ
Gắn động cơ
Gắn động cơ
Gắn động cơ

Bước tiếp theo là thực hiện gắn động cơ. Chúng tôi đề xuất rằng các giá đỡ động cơ được làm bằng Nhôm tấm kim loại 90 độ. Sử dụng bộ phận này, động cơ có thể được gắn công xôn trên một mặt của tấm kim loại bằng cách sử dụng hai

Lỗ M2 của động cơ và mặt còn lại có thể được bắt vít vào bệ. Các lỗ phải được khoan vào giá gắn động cơ để có thể sử dụng vít để gắn động cơ vào giá gắn động cơ và giá gắn động cơ vào bệ. Giá đỡ động cơ có thể được nhìn thấy trong hình trên.

Tiếp theo, Pololu Motor Hub (xem Bill of Materials) được đặt trên trục động cơ và được siết chặt bằng vít định vị được cung cấp và cờ lê Allen. Mẫu lỗ của trung tâm động cơ Pololu không khớp với mẫu lỗ của bánh xe VEX, do đó phải thực hiện một bộ ghép trung gian tùy chỉnh. Có ý kiến cho rằng tấm kim loại nhôm vụn được sử dụng để làm nền khung xe được sử dụng để làm bộ ghép nối. Mẫu lỗ và kích thước của cặp đôi này được thể hiện trong hình bên dưới. Đường kính và hình dạng bên ngoài (không cần phải là hình tròn) của bộ ghép nhôm tùy chỉnh không quan trọng miễn là tất cả các lỗ đều khớp trên bộ phận.

Bước 3: Tạo thiết kế khối Vivado

Tạo thiết kế khối Vivado
Tạo thiết kế khối Vivado
Tạo thiết kế khối Vivado
Tạo thiết kế khối Vivado

- Bắt đầu bằng cách tạo một dự án Vivado mới và chọn Zybo Zynq 7000 Z010 làm thiết bị mục tiêu.

- Tiếp theo nhấp vào tạo thiết kế khối mới và thêm IP Zynq. Nhấp đúp vào IP Zynq và nhập cài đặt XPS được cung cấp cho Zynq. Sau đó, bật UART0 với MIO 10..11 trong tab Cấu hình MIO và cũng đảm bảo rằng Bộ hẹn giờ 0 và bộ hẹn giờ Cơ quan giám sát được bật.

- Thêm hai GPIOS AXI vào thiết kế khối. Đối với GPIO 0, hãy bật kênh đôi và đặt cả hai thành tất cả các đầu ra. Đặt độ rộng GPIO cho kênh 1 đến 4 bit và cho kênh 2 đến 12 bit, các kênh này sẽ được sử dụng để đặt hướng động cơ và gửi số lượng tích tắc mà bộ mã hóa đo được tới bộ xử lý. Đối với GPIO 1, chỉ đặt một kênh cho tất cả các đầu vào có độ rộng kênh là 4 bit. Điều này sẽ được sử dụng để nhận dữ liệu từ bộ mã hóa. Đặt tất cả các cổng GPIO ở bên ngoài.

- Tiếp theo Thêm hai bộ hẹn giờ AXI. Đặt các cổng pwm0 trên cả hai bộ hẹn giờ ở bên ngoài. Đây sẽ là các pwms điều khiển tốc độ quay của động cơ.

- Cuối cùng Chạy tự động hóa khối và tự động hóa kết nối. Xác minh rằng thiết kế khối bạn có phù hợp với thiết kế được cung cấp.

Bước 4: Giao tiếp với LiDAR

LiDAR này sử dụng giao thức SCIP 2.0 để giao tiếp thông qua UART, tệp đính kèm mô tả toàn bộ giao thức.

Để giao tiếp với LiDAR, chúng tôi sẽ sử dụng UART0. LiDAR trả về 682 điểm dữ liệu, mỗi điểm đại diện cho khoảng cách đến một đối tượng ở góc đó. LiDAR quét ngược chiều kim đồng hồ từ -30 độ đến 210 độ với bước 0,351 độ.

- Tất cả giao tiếp với LiDAR được thực hiện bằng các ký tự ASCI, hãy tham khảo giao thức SCIP để biết định dạng được sử dụng. Chúng tôi bắt đầu bằng cách gửi lệnh QT để bật LiDAR. Sau đó, chúng tôi gửi lệnh GS nhiều lần yêu cầu 18 điểm dữ liệu cùng một lúc đến ft trong UARTS 64 byte FIFO. Dữ liệu trả về từ LiDAR sau đó được phân tích cú pháp và lưu trữ vào mảng SCANdata toàn cục.

- Mỗi điểm dữ liệu được lưu trữ là 2 byte dữ liệu được mã hóa. Truyền dữ liệu này vào bộ giải mã sẽ trả về một khoảng cách tính bằng milimét.

Trong tệp main_av.c, bạn sẽ tìm thấy các chức năng sau để giao tiếp với LiDAR

sendLIDARcmd (lệnh)

- Điều này sẽ gửi chuỗi đầu vào đến LiDAR thông qua UART0

recvLIDARdata ()

- Điều này sẽ nhận dữ liệu sau khi một lệnh đã được gửi đến LiDAR và lưu trữ dữ liệu trong bộ đệm RECBuffer

requestDistanceData ()

- Chức năng này sẽ gửi một loạt lệnh để lấy tất cả 682 điểm dữ liệu. Sau mỗi tập hợp 18 điểm dữ liệu được nhận, parseLIDARinput () được gọi để phân tích cú pháp dữ liệu và lưu trữ từng bước các điểm dữ liệu trong SCANdata.

Bước 5: Tạo lưới có chướng ngại vật

Tạo lưới có chướng ngại vật
Tạo lưới có chướng ngại vật
Tạo lưới có chướng ngại vật
Tạo lưới có chướng ngại vật

GRID được lưu trữ là một mảng 2D với mỗi giá trị chỉ mục đại diện cho một vị trí. Dữ liệu được lưu trữ trong mỗi chỉ mục lần lượt là 0 hoặc 1, Không có chướng ngại vật và chướng ngại vật. Khoảng cách bình phương tính bằng milimét mà mỗi chỉ số đại diện có thể được thay đổi với định nghĩa GRID_SCALE trong tệp xe.h. Kích thước của mảng 2D cũng có thể thay đổi để cho phép xe quét một khu vực lớn hơn bằng cách sửa đổi định nghĩa GRID_SIZE.

Sau khi một tập hợp dữ liệu khoảng cách mới được quét từ LiDAR updateGrid () được gọi. Thao tác này sẽ lặp lại qua mọi điểm dữ liệu được lưu trữ trong mảng SCANdata để xác định chỉ mục nào trong lưới có chướng ngại vật. Sử dụng hướng hiện tại của xe, chúng tôi có thể xác định góc tương ứng với mỗi điểm dữ liệu. Để xác định nơi có chướng ngại vật, bạn chỉ cần nhân khoảng cách tương ứng với cos / sin của góc. Việc thêm hai giá trị này vào vị trí x và y hiện tại của xe sẽ trả về chỉ số trong lưới chướng ngại vật. Chia khoảng cách được trả về bởi thao tác này cho GRID_SCALE sẽ cho phép chúng tôi thay đổi khoảng cách bình phương của mọi chỉ mục.

Những hình ảnh trên cho thấy môi trường hiện tại của xe và Grid kết quả.

Bước 6: Giao tiếp với động cơ

Để giao tiếp với động cơ, chúng tôi bắt đầu bằng cách khởi tạo GPIO để điều khiển hướng động cơ quay. Sau đó, ghi trực tiếp vào địa chỉ cơ sở của PWM trong Bộ hẹn giờ AXI cho phép chúng tôi thiết lập những thứ như chu kỳ và chu kỳ nhiệm vụ trực tiếp điều khiển tốc độ quay của động cơ bằng.

Bước 7: Lập kế hoạch đường dẫn

Sẽ được thực hiện trong thời gian sắp tới.

Sử dụng lưới và chức năng động cơ được mô tả trước đây, rất dễ dàng thực hiện các thuật toán như A *. Khi xe di chuyển, nó sẽ tiếp tục quét khu vực xung quanh và xác định xem con đường mà nó đang đi có còn hợp lệ hay không

Đề xuất: