Ứng dụng học sâu vào điều khiển robot Robotino

MỤC LỤC

Cơ Sở Lý Thuyết

- Việc đường line xuất hiện trong đề tài chỉ là một cách thể hiện đường đi của Robotino, nhấn mạnh rằng mục tiêu của đề tài không phải là tạo ra Robot dò line. - Đề tài không chú trọng vào tốc độ, do Server (Model) và Robotino đang giao tiếp thông qua API nên sẽ bị ảnh hưởng bởi giới hạn của tốc độ internet.

CƠ SỞ LÝ THUYẾT

  • GIỚI THIỆU VỀ ROBOTINO
    • DEEP LEARNING
      • GIỚI THIỆU VỀ API 1. Khái niệm
        • GIỚI THIỆU VỀ NGROK 1. Khái niệm
          • CÁC PHƯƠNG PHÁP VÀ THUẬT TOÁN ĐƯỢC SỬ DỤNG 1. Phương pháp Maxpooling

            Webinterface là một phần rất quan trọng trong luận văn này, mặc dù không truy cập trực tiếp vào Webinterface để điều khiển Robotino, nhưng nhóm phải thông qua Webinterface để kết nối đến Robotino cũng như lấy các dữ liệu của cảm biến và camera để xử lý dữ liệu, ra lệnh cho Robotino di chuyển,. Về mặt ứng dụng, tuy là tập hợp con của AI và Machine Learning, nhưng về độ phủ trong đời sống, Deep Learning tỏ ra không hề thua kém trong các lĩnh vực như Y tế (phát hiện tế bào ung thư), Captionbot tạo chú thích cho hình ảnh, âm nhạc, Object Detected (phát hiện đối tượng),.

            Hình 2-4. Bố trí các cảm biến GP2Y0A41SK0F ở đến của Robotino
            Hình 2-4. Bố trí các cảm biến GP2Y0A41SK0F ở đến của Robotino

            TÍNH TOÁN VÀ THIẾT KẾ

            THIẾT KẾ HỆ THỐNG

            • Sơ đồ khối hệ thống phần cứng Robotino
              • Thiết kế phần cứng 1. Lắp đặt camera

                Trong quá trình Robotino tự hành, khối camera sẽ thu thập được dữ liệu hình ảnh trực tiếp từ môi trường, lúc này các thuật toán xử lý hình ảnh và Model đã được huấn luyện từ trước được áp dụng để phân tích và trích xuất các thông tin quan trọng. Về cơ bản, khối này có chức năng xử lý dữ liệu cảm biến và ảnh RGBD nhận từ khối trung gian, sau đó đi qua Model đã được đào tạo để Model đưa ra quyết định về hướng đi, sau đó các mệnh lệnh về hướng đi sẽ lại được Model gửi cho khối xử lý trung tâm thông qua Communication Protocol. Ở đây đề tài sẽ viết một chương trình điều khiển Robotino di chuyển một cách thủ công theo chỉ dẫn của người điều khiển, sau đó ghi lại ảnh, giá trị cảm biến và hướng đi một cách liên tiếp rồi lưu lại để tạo thành các tệp dữ liệu dùng cho việc đào tạo.

                Đối với thu thập dữ liệu từ cảm biến, chương trình sẽ sử dụng lệnh GET/data/distancesensorarray để đọc giá trị từ 9 cảm biến hồng ngoại và đồng thời chương trình sử dụng lệnh GET/cam0 để kết nối với camera gắn trên Robotino, kết hợp với thư viện OpenCV để xử lỷ ảnh sẽ giúp phần mềm chụp được 1 hình ảnh từ video trên camera ngay lúc nhấn nút từ bàn phím, sau đó hình ảnh đó sẽ được chuyển đổi qua dạng chuỗi để có thể phục vụ cho việc ghi dữ liệu vào tập .csv. Tập đào tạo và tập thẩm định chứa tổng cộng khoảng 80% số lượng dữ liệu và được sử dụng để đào tạo Model cũng như tìm kiếm và xác nhận xem Model nào tốt nhất trong lúc đào tạo, tập kiểm định chứa khoảng 20% số lượng dữ liệu và được sử dụng để kiểm tra độ thông minh của Model sau khi đào tạo hoàn tất. Đối với thuật toán Optimizer, nhóm sử dụng thuật toán SGD - Stochastic Gradient Descent bởi vì đây là một thuật toán phù hợp với một mô hình phức tạp (sử dụng nhiều kiểu dữ liệu ngừ vào), mặc dự tốc độ đào tạo sẽ bị kộo dài do đặc tớnh của thuật toán SGD, nhưng nó lại mang đến độ tin cậy và chính xác cao.

                Hình 3-5. Sơ đồ khối quá trình thu thập dữ liệu
                Hình 3-5. Sơ đồ khối quá trình thu thập dữ liệu

                THI CÔNG HỆ THỐNG

                TẠO ĐƯỜNG HẦM NGROK CHO ROBOTINO

                  +Nhập Domain (tương ứng với URL sẽ sử dụng) vào ô Domain và nhập mô tả vào ô Description (không bắt buộc) trong hộp thoại New Domain, sau đó nhấn Continue để hoàn thành tạo Subdomain. Đầu tiên, nhìn vào Hình 4-6, khi ta quan sát được đường đi nằm trong tầm nhìn của camera và giá trị của các cảm biến đều bình thường ở mức 0.41 (tức là không có vật. cản nằm trong phạm vi hoạt động của cảm biến) thì sẽ điều khiển Robotino thẳng. Thay vì chờ đến khi Robotino không còn quan sát được đường đi, ta phải chủ động thực hiện hành động xoay và di chuyển trước để đảm bảo hình ảnh của đường đi luôn nằm trong tầm quan sát của camera và cũng đảm bảo sau này Model sẽ hoạt động theo logic của con người.

                  Sau khi Robotino đã xoay phải và cảm biến 1 và 2 về trạng thái bình thường, lúc này cảm biến 3 hoặc 4 sẽ bắt đầu nhận tín hiệu từ vật cản, Robotino di chuyển thẳng cho đến khi cảm biến 3 và 4 không bị ảnh hưởng từ vật cản nữa. Khi đó, Robotino sẽ dừng lại và tiến hành một hành động xoay trái cho đến khi cảm biến 3 hoặc 4 lại nhận được tín hiệu từ vật cản thì Robotino sẽ tiếp tục di chuyển thẳng cho đến khi vượt qua được vật cản. Lúc này, khi đã vượt qua được vật cản thành công, cảm biến 3 và 4 cũng không còn nhận được tín hiệu từ vật cản thì Robotino sẽ thực hiện hành động xoay trái và quay trở lại di chuyển theo đường đi ban đầu.

                  Hình 4-4. Thông tin chi tiết về subdomain vừa tạo
                  Hình 4-4. Thông tin chi tiết về subdomain vừa tạo

                  LẬP TRÌNH HỆ THỐNG - CÁC BƯỚC XÂY DỰNG MODEL 1. Tiền xử lý ảnh

                    Sau khi đã tạo được Class CustomDataset, ta sẽ tiến hành sử dụng bằng cách gọi ra và khai báo các đối tượng tệp dữ liệu tương ứng (“train”/“val”/“verification”) với đường dẫn, kiểu transform và phase để phục vụ cho việc đưa vào Data Loader và load vào huấn luyện Model. Shuffle = True được sử dụng để trộn các mẫu dữ liệu, đảm bảo rằng các mẫu được lấy ra ngẫu nhiên và giảm thiểu sự ảnh hưởng của thứ tự của các mẫu đến quá trình huấn luyện, giúp mô hình học được các mẫu đa dạng hơn và tránh tình trạng overfitting. Đề tài sử dụng thuật toỏn Cross Entropy cho hàm Loss với tham số ngừ vào là weight, tham số này phải có số là dạng tensor và phải có số lượng phần tử giá trị bằng với số class ngừ ra của Model (ở đõy chỳng ta cú 3 class: đi thẳng, rẽ trỏi, rẽ phải).

                    Đi kèm với thuật toán Optimizer là Optimizer scheduler, scheduler dùng để giảm đi các learning rate sau một số lượng epoch nhất định (ví dụ: tương ứng với parameter step_size = 1, có nghĩa là sau 1 epoch, lr ban đầu sẽ được nhân với gamma. +Thiết lập Dataset, bên trong Dataset sẽ gồm có các tập dữ liệu dùng cho việc đào tạo, thẩm định và kiểm định, bên cạnh đó còn có cấu trúc của các tập dữ liệu để chương trình có thể thực hiện trích xuất các dữ liệu bao gồm dữ liệu từ cảm biến, dữ liệu ảnh và hướng đi của Robotino tương ứng để thực hiện quá trình đào tạo/thẩm định. Sau khi đã đào tạo được Model và nhận được Model hoàn chỉnh, có các kết quả học tập tốt, thông minh và có thể sử dụng được, chúng ta sẽ tiến hành triển khai nó để sử dụng trong thực tế, và phần này sẽ là cách mà chúng ta đưa Model đã được đào tạo vào sử dụng trên Robotino.

                    Hình 4-11. Quá trình tiền xử lý ảnh
                    Hình 4-11. Quá trình tiền xử lý ảnh

                    TÀI LIỆU HƯỚNG DẪN SỬ DỤNG VÀ THAO TÁC 1. Hướng dẫn sử dụng chương trình đào tạo Model

                      Terminal của Visual Studio Code khi chạy chương trình Sau khi thấy Terminal của chương trình hiện “Press S to Start!”, chúng ta sẽ nhấn phím S trên bàn phím và lúc này Robotino sẽ hoạt động.

                      KẾT QUẢ - NHẬN XÉT – ĐÁNH GIÁ

                      KẾT QUẢ

                      • Testing

                        Do là một kiểu dữ liệu đặt biệt do chính bản thân nhóm tự thu thập, không dựa dẫm vào tập ImageNet cho nên kết quả đào tạo sẽ không thể cho ra những con số tối ưu nhất và đẹp mắt, ít nhất là trong khoảng thời gian nghiên cứu ngắn ngủi cho khóa luận. Nhìn vào Bảng 5.1, chúng ta có thể thấy qua từng epoch, giá trị Loss sẽ dần giảm xuống ở cả phase đào tạo lẫn xác nhận, còn giá trị Acc sẽ tăng dần, nhưng đến epoch thứ 26 trở đi, có thể thấy Model không còn học được thêm gì và có thể đã chạm đến điểm cực tiểu của hàm Loss cho nên các giá trị Loss lẫn Acc lúc này không còn thay đổi nữa. Kết luận: Sau khi hoàn thành Testcase 01, có thể thấy Robotino đi thẳng và rẽ cua rất chuẩn, như cách một con người thực hiện, không xảy ra bất kỳ sai sót nào, Robotino không bị lêch khỏi đường đi và khả năng nhận diện được khúc cua là 100%.

                        Kết luận: Sau khi hoàn thành Testcase 02, nhóm rất tự hào bởi vì gần như Robotino đi thẳng và rẽ cua rất chuẩn, như cách một con người thực hiện, không xảy ra bất kỳ sai sót nào, Robotino không bị lêch khỏi đường đi và khả năng nhận diện được khúc cua là 100%. Đánh giá chính xác khả năng nhận Sử dụng 2 vật cản là các tủ chuyên diện vật cản, di chuyển né tránh vật cản và dụng (có kích thước khoảng 45x50cm) quay trở lại đường đi của Model vào đường đi, loại vật cản này đã được thu thập dữ liệu trong quá trình thu thập dữ liệu để đào tạo Model. Kết luận: Dựa vào kết quả Testcase 07 ở Bảng 5.17, ta thấy Model không thể đáp ứng được yêu cầu với kết quả 0 lần trở về được đường đi, có thể thấy hiện tại Model đang ưu tiên hơn cho dữ liệu từ cảm biến dẫn đến không thể xử lý được trường hợp này, mấu chốt nằm ở logic của người thu dữ liệu đang dựa vào dữ liệu cảm biến nhiều hơn trong những lần né vật cản.

                        Hình 5-1. Giá trị Train Loss và Validate Loss
                        Hình 5-1. Giá trị Train Loss và Validate Loss

                        NHẬN XÉT VÀ ĐÁNH GIÁ

                        Bên cạnh đó, nếu điều chỉnh thời gian delay xuống chỉ còn 0.1, sẽ liên tục xảy ra hiện tượng nghẽn mạng, do việc truyền nhận các lệnh API xảy ra với tần số lớn.