No Description

haminhtien99 8e13d45ba2 add control GPIO 4 months ago
camera_calibration 3be179ff37 Update repository with camera position and fix issue 5 months ago
distance_estimation 8e13d45ba2 add control GPIO 4 months ago
generate_markers 98441f9b72 first commit 5 months ago
.gitignore 98441f9b72 first commit 5 months ago
README.md 8e13d45ba2 add control GPIO 4 months ago
chessboard.png 98441f9b72 first commit 5 months ago
default_config.py 1d27b00afc update spray algorithm 5 months ago
map_markers.jpg 3be179ff37 Update repository with camera position and fix issue 5 months ago
pinout-corrected.jpg 8e13d45ba2 add control GPIO 4 months ago
requirements.txt 8e13d45ba2 add control GPIO 4 months ago

README.md

LANDING_SPACE

Thuật toán hạ cánh và điều hướng drone dựa trên ArUco marker

Tải xuống git này và cài đặt các tài nguyên cần thiết

git clone https://git.vnai.xyz/haminhtien99/landing_space
cd landing_space
pip install -r requirements.txt

Cài đặt các giá trị ban đầu cho marker

Di chuyển tới file default_config.py, thay đổi các giá trị sau. Lưu ý kích thước MARKER_SIZESQUARE_SIZE đặt cùng đơn vị (tùy ý centimet, milimet), khi đó kết quả đầu ra về khoảng cách sẽ nhận được giá trị tương ứng

MARKER_SIZE=5 # kích thước các mã QR-code
set_resolution='original' # điều chỉnh độ phân giải cho camera, đặt original nếu ko thay đổi
SQUARE_SIZE = 2.1  # kích thước ô của bàn cờ

# Thiết lập các giá trị cho việc phun thuốc
ALLOWED_ANGLE_DEG = 20  # Góc lệch cho phép giữa aruco và camera
ALLOWED_XYZ_RANGE = {   # Phạm vị lệch cho phép x, y, z của aruco tag trong hệ tọa độ gắn với camera
    "x": (-10, 10),
    "y": (-10, 10),
    "z": (20, 50),
}
SPRAY_DURATION = 5      # Thời gian phun thuốc

Hiệu chuẩn camera:

Để thực hiện hiệu chuẩn, cần phải chụp ảnh bàn cờ chessboard.jpg được in trên giấy với nhiều góc độ, vị trí khác nhau

python camera_calibration/capture_images.py

  • Nhấn phím "s" để chụp ảnh, nhấn "q" để kết thúc.
  • Ảnh sẽ được lưu vào thư mục con của thư mục camera_calibration/images, tương ứng với giá trị set_resolution được đặt ban đầu.

python camera_calibration/capture_images_without_showing.py, tương tự bên trên

  • Ảnh sẽ được tự động lưu vào thư mục camera_calibration/images sau mỗi 5 giây.
  • Nhấn tổ hợp phím Ctrl + C để thoát chương trình

python camera_calibration/calibration.py

  • Thông số hiệu chuẩn của camera sẽ được lưu vào thư mục camera_calibration/calib_data.

Dữ liệu hiệu chuẩn

Dữ liệu hiệu chuẩn camera lưu tại tệp .npz. Dữ liệu này bao gồm:

  • camMatrix: Ma trận camera, chứa các tham số nội tại của camera.
  • distCoef: Các hệ số biến dạng của camera.
  • rVector: Vector xoay của từng ảnh dùng để hiệu chuẩn.
  • tVector: Vector tịnh tiến của từng ảnh hiệu chuẩn.

Tạo mã Aruco:

  • Tạo tùy ý 20 mã marker. Chạy python generate_markers/generate.py.
  • Có thể thay đổi loại marker tùy ý, trong bài toán này sử dụng loại 7x7 (aruco.DICT_7X7_50)

Ước lượng vị trí marker so với camera:

  • Chạy distance_estimation/distance_single.py
  • Cài đặt visualization = Trueđể in kết quả đầu ra kèm kết quả hình ảnh, nhấn q đẻ thoát;
  • Hoặc chạy visualization = False để in kết quả đầu ra, nhấn Ctrl + C.

Ước lượng vị trí camera:

Chuẩn bị

  • Chuẩn bị marker như trong hình mô tả map_markers.jpg.
  • Xác định chuẩn xác vị trí tương đối của các ID1, ID2, ID3, ID4 so với ID0 ở trung tâm (lấy hệ tọa độ mặt phẳng là trục x, y của marker ID0). Nên đặt các marker vùng rìa không đối xứng nhau nhằm tối ưu tính toán tọa độ trong trường hợp bị che khuất. Gắn các marker sao cho các trục x, y, z cùng hướng với nhau.

Ví dụ đặt các marker

Tính toán

python distance_estimation/camera_position.py

  • Ược lượng vị trí camera trong bản đồ tạo bởi các marker được xác định trước
  • Phương pháp này tính toán vị trí tương đối camera so với marker từ giá trị của vecto chuyển vị tVec, vì vậy yêu cầu camera luôn phải song song với mặt phẳng marker.
  • Lấy marker_0 làm gốc, tọa độ các marker khác được cài đặt trong file default_config.py
  • In ra màn hình kết quả các giá trị x, y, z, roll, pitch, yaw - lần lượt tọa độ camera trong hệ tọa độ marker_0 làm gốc, roll, pitch, yaw - góc quay camera so với mặt phẳng chứa marker
  • Đặt visualization= True để hiển thị video với tọa độ camera (x, y, z) cùng với góc quay (roll, pitch, yaw) so với marker_0. Nhấn phím q để kết thúc, thoát video
  • Nếu visualization=False, nhấn Ctrl + C để thoát.

python distance_estimation/camera_position_and_log.py Tùy chọn ước lượng vị trí camera cùng với lưu lịch sử

Tùy chọn phun thuốc trừ sâu

python distance_estimation/spray_pesticide.py

  • Thiết lập thuộc tính phù hợp với phạm vi lệch về góc, tọa độ xyz của marker so với camera, đảm bảo marker ở trung tâm, thời gian phun
  • In ra trạng thái mỗi marker
  • Khi phun, GPIO 17 được bật (kết nối với LED), phun xong sẽ tắt.

    Thông tin các I/O trên Raspberry Pi

    example