Chào mọi người! Tên tôi là Anton. Và tôi muốn chia sẻ câu chuyện về những bước đầu tiên của tôi trong lĩnh vực chế tạo người máy và đặc biệt là về máy bay không người lái Raspberry Pi + ESP32 của tôi. (Mình cũng đã làm video về nó và đính kèm ở cuối bài viết)
Ở phần đầu của câu chuyện, tôi đang làm việc với tư cách là nhà phát triển web (React, Typescript, v.v.), có một số kiến thức về C ++, về kỹ năng điện tử - tôi có thể hàn dây tai nghe bị đứt. Vấn đề là là một nhà phát triển web, tôi bắt đầu cảm thấy không hài lòng vì những gì tôi làm không ảnh hưởng đến thế giới vật chất theo bất kỳ cách nào. Tất nhiên, có rất nhiều dự án chỉ sử dụng phần mềm tác động đến thế giới thực nhưng tôi quyết định thực hiện cách tiếp cận đơn giản nhất và đi sâu vào lĩnh vực người máy.
Vì vậy, tôi đọc một số cuốn sách về chủ đề này, xem một số video trên youtube, đọc một số bài báo, và mua thiết bị hàn và máy in 3D, vì máy in 3D ngày nay rất rẻ và có sẵn và có thể giúp tôi đỡ đau đầu khi chế tạo các bộ phận từ hộp đựng thực phẩm và rác tương tự.
Robot đầu tiên của tôi là nền tảng sâu bướm này:
Tôi thiết kế các bộ phận trong Máy xay sinh tố và sau đó in chúng. Tôi đã sử dụng Raspberry Pi làm bộ não của nó và một ngân hàng điện làm nguồn cung cấp. Tôi đã hàn bộ điều khiển động cơ ra khỏi rơ le và bóng bán dẫn. Trong quá trình chế tạo thứ này, tôi gặp một vấn đề, khi tôi lắp ráp mọi thứ, các động cơ hầu như không chuyển động. Hóa ra tôi đã trộn lẫn bộ thu và bộ phát của các bóng bán dẫn, và sau khi giải quyết chúng, mọi thứ bắt đầu hoạt động. Thật khó để gọi thứ này là robot vì nó không tự làm bất cứ việc gì và chỉ được điều khiển từ xa. Dù sao, tôi cảm thấy tuyệt vời khi làm được nó, tin tưởng vào bản thân và quyết định làm điều tương tự nhưng là một chiếc máy bay.
Sau một số nghiên cứu, tôi quyết định sử dụng một số bộ phận quadcopter thông thường như động cơ không chổi than, bộ điều khiển tốc độ điện tử và pin lipo có khả năng cung cấp dòng điện cao cho động cơ. Là một bộ não, tôi vẫn sử dụng Raspberry Pi như cũ. Sau khi tôi tìm ra cách giao diện Raspberry Pi với ESC, tôi bắt đầu thiết kế một khung để chứa tất cả các phần. Tôi đã làm điều đó chỉ dựa vào trực giác với hy vọng rằng các yêu cầu đối với khung hình không quá khắt khe vì tôi đã thấy những chiếc máy bay không người lái có hình dạng kỳ lạ như vậy mà vẫn có thể bay.
Tôi cũng đã mua một bảng kết hợp con quay hồi chuyển, gia tốc kế, khí áp kế và từ kế trên xe buýt i2c. Trước khi tôi tìm hiểu bộ điều khiển PID là gì, cách tiếp cận trực quan đầu tiên của tôi tương tự như cách thành phần P của nó hoạt động - chỉ cần tăng hoặc giảm tốc độ động cơ tương ứng với góc mà máy bay không người lái phân kỳ khỏi mặt phẳng nằm ngang.
Ban đầu, tôi nghĩ rằng nó sẽ không phải là một nhiệm vụ quá khó khăn nhưng sau tất cả những lần thử thất bại, tôi không biết phải làm thế nào để thực hiện điều này một cách đúng đắn bởi vì có rất nhiều thứ có thể không hoạt động đúng cách. Và trái với việc tạo ra thứ gì đó chỉ dành cho phần mềm, mỗi lần chạy đều có thể dẫn đến hư hỏng vật lý và lần thử tiếp theo chỉ có thể thực hiện được sau khi các bộ phận bị hư hỏng được thay thế. Ngoài ra, không dễ để kiểm tra điều này trong một căn hộ thuê nhỏ. Nếu tôi có một nhà để xe lớn, nhà kho hoặc thứ gì đó tương tự như thế này, tôi có thể đã xây dựng để hạn chế chuyển động của máy bay không người lái.
Thay vào đó, tôi phải ứng biến và sử dụng dây giày và đôi tay của mình, điều này đôi khi dẫn đến chấn thương nhỏ nhưng khó chịu.
Tại một số thời điểm, tôi nghĩ rằng việc điều khiển máy bay không người lái bằng chuột và bàn phím là không thuận tiện và quyết định tạo một ứng dụng điều khiển, nơi tôi có thể thay đổi các thông số, theo dõi các chỉ số cảm biến và dần dần điều khiển máy bay không người lái với giao diện người dùng tương tự.
Ban đầu, vì một số lý do, tôi tập trung vào kiểm soát độ cao ngang chỉ để nhận ra rằng tôi không thể kiểm tra nó một cách an toàn và điều tôi cần hơn là kiểm soát độ cao tự động. Suy nghĩ đầu tiên của tôi là sử dụng các chỉ số phong vũ biểu nhưng chúng không đủ chính xác để kiểm soát chiều cao trong nhà (hoặc có thể tôi đã sử dụng chúng sai cách) vì vậy tôi đã mua một cảm biến siêu âm ở một cửa hàng linh kiện điện tử địa phương. Trên thực tế, nó có một giao diện kỳ lạ khiến một trong các chân quay cao trong quá trình đo và bạn phải đếm thời gian để suy ra khoảng cách. Khi Raspberry Pi tương đối nhàn rỗi, nó hoạt động tốt nhưng dưới tải tính toán, nó chỉ bỏ lỡ thời gian và các kết quả đọc là rác. Vì vậy, tôi đã phải thêm một bộ điều khiển AVR bổ sung vào dự án chỉ để đo các thời gian này và kết quả đầu ra ở dạng kỹ thuật số thuận tiện trên giao diện SPI.
Tôi cũng đã mua hai dây cáp phanh xe đạp và hướng dẫn in cho máy bay không người lái để hạn chế chuyển động lên xuống của nó để tôi có thể tập trung vào việc kiểm soát độ cao mà không cần nghĩ đến việc kiểm soát các bậc tự do khác.
Và nó gần như đã hoạt động trừ trường hợp khi các cánh quạt đang hoạt động, tạo ra sự nhiễu loạn làm nhiễu các kết quả đọc của cảm biến siêu âm ở độ cao trên 40cm. Cuối cùng, khi tôi phát hiện ra nó, tôi đã phải thay thế cảm biến siêu âm bằng cảm biến laser.
Tại thời điểm đó, tôi đã có điều khiển độ cao nhưng vẫn không thể đạt được mức cân bằng ngang ổn định, mặc dù tôi đã triển khai điều khiển PID cho nó. Tôi đoán một số lý do cho nó và tôi không chắc cái nào trong số đó góp phần gây ra vấn đề nhiều nhất. Nhưng chúng ở đây:
Ở đâu đó trong quá trình phát triển, tôi cảm thấy thất vọng với số lượng dây giữa các mô-đun và cách chúng được đặt. Vì vậy, tôi quyết định đầu tư một chút thời gian vào kỹ năng tạo PCB tùy chỉnh. Tôi đã nghĩ về điều đó trong một thời gian dài nhưng đã nản lòng vì phải mua các dụng cụ đắt tiền và đối phó với hóa chất.
Trên thực tế, nó hóa ra dễ dàng hơn tôi nghĩ, tôi đã xem một số hướng dẫn trên KiCAD để tạo thiết kế PCB của mình. Tôi đã mua một chiếc máy in laser đã qua sử dụng với giá 40 đô la, cũng mua một chiếc bàn ủi thông thường không có lỗ với giá 5 đô la, và dụng cụ đắt tiền nhất là một chiếc máy ép khoan với giá 75 đô la. Hóa chất hóa ra không quá nguy hiểm, chúng sẽ không làm tan da nếu bạn chạm vào.
Vì vậy, tôi đã thực hiện PCB này trong lần thử thứ tư. Phần khó nhất thực sự là đắp mặt nạ hàn. Những gì PCB này làm là nó kết nối các cảm biến, ESP32 và Raspberry Pi và cung cấp điện áp thích hợp đến các bộ phận khác nhau.
Các biểu đồ ưa thích hiển thị các chỉ số cảm biến hiện tại trong ứng dụng hóa ra rất khó phân tích trong khi cố gắng ngăn máy bay không người lái gặp sự cố. Vì vậy, tôi đã thêm khả năng ghi lại dữ liệu cảm biến và viết một tập lệnh python để phân tích từng khung hình với bản ghi video của chuyến bay.
Nếu tôi làm điều đó sớm hơn, tôi sẽ dành ít thời gian hơn để điều tra các vấn đề do cảm biến siêu âm bị lỗi mà tôi đã đề cập trước đây.
Tại một số thời điểm, tôi đã đạt được kiểm soát độ cao, hướng và độ ngang tương đối ổn định nhưng vẫn không tránh khỏi hiện tượng trôi ngang. Và nếu ai đó biết có thể thoát khỏi tình trạng trôi ngang chỉ bằng cách sử dụng cảm biến IMU, vui lòng cho tôi biết trong phần bình luận.
Tôi đã thực hiện một số nghiên cứu và phát hiện ra rằng một số máy bay không người lái sử dụng GPS để giữ vị trí và tôi đã cố gắng thực hiện kỹ thuật tương tự. Nhưng vấn đề là nó chỉ hoạt động bên ngoài, còn bên ngoài thì tôi cũng không thể đạt được kết quả khả quan nào. Thời tiết vào mùa đó rất khủng khiếp với gió, mưa và tuyết, vì vậy tôi đã không thực hiện nhiều lần, bảo đảm bằng GPS và thử một cách tiếp cận tầm nhìn máy tính.
Tôi đã đặt một máy ảnh ở dưới cùng của máy bay không người lái và cố gắng giữ dấu màu xanh lam này trên sàn bằng cách sử dụng thư viện OpenCV. Sau vài lần thử và chỉnh sửa đây là kết quả:
https://www.youtube.com/watch?v=poqQmvoBlP8
Giờ đây, nó có thể di chuột tại một điểm mà không cần điều khiển thủ công và không có bất kỳ chuỗi nào. Đây là mục tiêu trung gian mà cuối cùng tôi đã đạt được, vì vậy tôi quyết định ghi lại và chia sẻ sự tiến bộ của mình.
Tôi cũng đã thêm việc chuyển luồng video từ máy bay không người lái sang ứng dụng, vì vậy bây giờ tôi có thể thử nghiệm với thị giác máy tính để thử các cách tiếp cận khác nhau để giữ vị trí chung mà không có dấu hiệu đặc biệt trên sàn và tạo các tính năng khác.
Trong cấu hình hiện tại, máy bay không người lái được làm như thế này: ESP32 chịu trách nhiệm kiểm soát độ cao, hướng và điều khiển độ cao. Nó lấy dữ liệu từ cảm biến IMU và cảm biến khoảng cách laser ở phía dưới. Nó đưa ra các lệnh cho bộ điều khiển động cơ và nó cũng nhận lệnh từ raspberry pi, chính nó chịu trách nhiệm giao tiếp với ứng dụng và điều khiển vị trí bằng cách sử dụng dữ liệu từ máy ảnh.
Nếu ai đó quan tâm để xem mã
Ứng dụng android ứng dụng khách
Mã không sạch lắm, vì tôi đã thay đổi triển khai thường xuyên để cố gắng làm cho nó hoạt động bình thường. Có lẽ tôi sẽ dọn dẹp nó trong tương lai :)
Ngoài ra, tôi đã làm một video về nó:
https://www.youtube.com/watch?v=3mAFEW0YOJ0
Cảm ơn đã quan tâm! Chúc mừng!