Nguyên lí hoạt động: Robot hoạt động đi theo đường line bằng sắt được lắp đặt dưới sàn nhà linh hoạt cho việc tháo lắp.
Các thành phần kết cấu của hệ thống bao gồm:
• Phân Khung trên robot: được thiết kế có khả năng tháo lắp nhanh tùy vào mục đích sử dụng của người dùng, như là vận chuyển pallet trong kho, vận chuyển thức ăn trong nhà hàng hay là vận chuyển thiết bị dụng cụ y tế trong bệnh viện và vận chuyển đồ đạc trong tòa nhà, văn phòng làm việc.
• Phần Ứng dụng phần mềm: người dùng có thể tương tác với robot thông qua các thiết bị thông minh như điện thoại, máy tính, tablet để yêu cầu robot giao các món hàng mình cần đến các địa điểm cố định được gánh mã QR.
• Phần cơ khí: Robot được thiết kế bằng sắt tấm được gia công theo phương pháp dập kim loại tăng khả năng chịu tải của robot, hệ truyềnh động đánh lái được thiết kế theo kiểu 4WS giúp bánh kính cua robot đạt nhỏ nhất tăng cường khả năng di chuyển của robot.
• Phân điện tử: Bao gồm máy tính, vi điều khiển, mạch công suất và các mạch điện tử khác dùng để đảm bảo điểu khiên được hệ thống một cách ổn định nhất.
Hệ thống được chia làm 3 mức level loạt động tương tác với nhau:
• Application level: tầng cao nhất mục đích tương tác với người sử dụng thu thập thông tin dữ liệu gửi xuống Server xử lí và điều khiển tầng thấp hơn.
• High level: tầng chứa các vi mạch điều khiển và thu thập thông tin xung quanh môi trường robot đang hoạt động và nhận tín hiệu điều khiển của tầng Application level.
• Lowlevel: Tầng thấp nhất chứa các cơ cấu chấp hành thực hiện nhiệm vụ độc lập để vận hành robot di chuyển theo sự điều khiển của tầng High level.
Khi có yêu cầu từ người sử dụng thiết bị thông minh dữ liệu sẽ được chuyển vào Database của máy tính laptop Server, máy tính sẽ xử lí thông tin rồi gửi tín hiệu tới vi điều khiển vận hành robot tới địa điểm cần tới.
Sơ đồ 3.1: Sơ đồ hoạt động.
13 3.2. Thư viện OpenCV
OpenCV là một thư viện mã nguồn mở, được phát triển lần đầu tiên bởi Intel vào năm 1999 và sau đó được hỗ trợ bởi Willow Garage và Itseez. Thư viện này được viết bằng ngôn ngữ C/C++ và cung cấp các API cho nhiều ngôn ngữ lập trình khác như Python, Java, và MATLAB.
3.2.1. Các chức năng chính của OpenCV
OpenCV cung cấp nhiều chức năng và công cụ hữu ích cho các ứng dụng xử lý ảnh và thị giác máy tính, bao gồm:
• Xử lý ảnh cơ bản: Các thao tác cơ bản như đọc/ghi ảnh, biến đổi màu sắc, lọc ảnh, và phát hiện cạnh.
• Phát hiện và nhận diện đối tượng: Các thuật toán phát hiện khuôn mặt, nhận diện khuôn mặt, phát hiện vật thể di chuyển, và theo dõi đối tượng.
• Thị giác máy tính: Các kỹ thuật như nhận diện mẫu, phân đoạn ảnh, và phát hiện điểm đặc trưng.
• Xử lý video: Các công cụ để xử lý và phân tích video, bao gồm phát hiện và theo dõi đối tượng trong video.
• Học máy: Tích hợp với các thư viện học máy như TensorFlow và PyTorch để phát triển các ứng dụng học sâu (deep learning).
3.2.2. Cấu trúc của thư viện OpenCV
Thư viện OpenCV được chia thành nhiều module khác nhau, mỗi module cung cấp các chức năng và công cụ cụ thể. Một số module quan trọng bao gồm:
• Core Module: Cung cấp các chức năng cơ bản và cấu trúc dữ liệu chính của OpenCV.
• Image Processing Module: Cung cấp các hàm số và công cụ để xử lý ảnh, như lọc ảnh, biến đổi ảnh, và phát hiện cạnh.
• Video Module: Cung cấp các công cụ để xử lý video, như phát hiện và theo dõi đối tượng trong video.
• Machine Learning Module: Cung cấp các thuật toán học máy và các công cụ để phát triển mô hình học máy.
• Object Detection Module: Cung cấp các công cụ và thuật toán để phát hiện và nhận diện đối tượng trong ảnh và video.
3.2.3. Các thuật toán phổ biến trong OpenCV
Một số thuật toán phổ biến mà OpenCV hỗ trợ bao gồm:
• Canny Edge Detection: Một thuật toán phát hiện cạnh mạnh mẽ và hiệu quả.
14
• Haar Cascades: Sử dụng cho phát hiện khuôn mặt và các đối tượng khác trong ảnh.
• Hough Transform: Dùng để phát hiện các hình dạng hình học như đường thẳng và hình tròn.
• SIFT (Scale-Invariant Feature Transform): Một thuật toán để phát hiện và mô tả các đặc trưng cục bộ trong ảnh.
• SURF (Speeded-Up Robust Features): Một thuật toán nhanh và mạnh mẽ để phát hiện các đặc trưng cục bộ.
• Deep Learning Models: Hỗ trợ các mô hình học sâu, như các mạng nơ-ron tích chập (Convolutional Neural Networks - CNNs) để nhận diện và phân loại đối tượng.
3.2.4. Ứng dụng của OpenCV
OpenCV được sử dụng rộng rãi trong nhiều lĩnh vực và ứng dụng khác nhau, bao gồm:
• Phát hiện và nhận diện khuôn mặt: Được sử dụng trong các hệ thống an ninh và giám sát.
• Thực tế tăng cường (AR): Được sử dụng trong các ứng dụng AR để theo dõi và nhận diện các đối tượng trong thế giới thực.
• Xe tự hành: Được sử dụng để phát hiện và theo dõi các đối tượng trên đường, như xe cộ và người đi bộ.
• Xử lý ảnh y tế: Được sử dụng để phân tích và chẩn đoán các hình ảnh y tế, như ảnh X-quang và ảnh MRI.
Vì vậy thư viện OpenCV là một thư viện mạnh mẽ vừa linh hoạt, vừa có nhiều công cụ và thuật toán hữu ích cho xử lý ảnh và thị giác máy.
3.3. Thư viện Pyzbar
Pyzbar là một thư viện Python dùng để giải mã các mã vạch (barcode) và mã QR (QR code). Thư viện này hỗ trợ nhiều loại mã vạch 1D và 2D, giúp các nhà phát triển dễ dàng tích hợp khả năng đọc mã vạch và mã QR vào các ứng dụng của mình. Pyzbar sử dụng ZBar, một phần mềm mã nguồn mở mạnh mẽ để quét và giải mã mã vạch.
Pyzbar được thiết kế để cung cấp một cách dễ dàng và hiệu quả để đọc và giải mã các mã vạch và mã QR từ hình ảnh hoặc video. Thư viện này rất hữu ích cho các ứng dụng cần xử lý và nhận diện mã vạch trong các lĩnh vực như quản lý hàng hóa, kiểm tra sản phẩm, và quản lý thư viện.
15 Ưu điểm chính:
• Hỗ trợ đa dạng các loại mã vạch: Pyzbar có thể đọc và giải mã nhiều loại mã vạch 1D như EAN, UPC, Code 39, Code 128 và các loại mã QR 2D và đây chính là phần mà đề tài ứng dụng.
• Tích hợp dễ dàng: Pyzbar có thể dễ dàng tích hợp vào các ứng dụng Python, sử dụng cùng với các thư viện xử lý ảnh khác như OpenCV.
• Hiệu suất cao: Pyzbar có khả năng đọc mã vạch và mã QR nhanh chóng và chính xác từ các hình ảnh có chất lượng khác nhau. Có thể ứng dụng vào các máy tính nhúng để có kích thước robot nhỏ hơn
• Đa nền tảng: Pyzbar có thể chạy trên nhiều hệ điều hành khác nhau, bao gồm Windows, macOS và Linux.
Pyzbar là một thư viện mạnh mẽ và dễ sử dụng cho việc giải mã mã vạch và mã QR trong Python. Với sự hỗ trợ của Pyzbar, bạn có thể dễ dàng tích hợp khả năng đọc mã vạch vào các ứng dụng của mình, từ đó giúp nâng cao hiệu quả quản lý và kiểm tra sản phẩm. Thư viện này cung cấp hiệu suất cao và hỗ trợ nhiều loại mã vạch, làm cho nó trở thành một lựa chọn lý tưởng cho các ứng dụng xử lý mã vạch.
3.4. Thư viện Pyserial
PySerial là một thư viện Python dùng để giao tiếp với các thiết bị nối tiếp (serial devices) thông qua cổng serial, USB-to-serial, hoặc các cổng tương tự khác. Thư viện này hỗ trợ các giao thức truyền thông nối tiếp phổ biến, cho phép các nhà phát triển Python dễ dàng đọc và ghi dữ liệu từ và đến các thiết bị ngoại vi như vi điều khiển, máy in, mô-đun GPS, và các thiết bị cảm biến.
Ưu điểm của thư viện Pyserial:
• Hỗ trợ đa nền tảng: PySerial có thể chạy trên nhiều hệ điều hành khác nhau, bao gồm Windows, macOS và Linux.
• Giao tiếp với các thiết bị nối tiếp: Hỗ trợ các cổng serial chuẩn, USB-to-serial, và các giao thức truyền thông nối tiếp khác.
• Cấu hình linh hoạt: Cho phép cấu hình các thông số giao tiếp như tốc độ baud, số bit dữ liệu, bit chẵn lẻ, và số bit dừng.
• Dễ sử dụng: Cung cấp các phương thức đơn giản để mở cổng, đọc và ghi dữ liệu, và quản lý kết nối.
PySerial là một thư viện mạnh mẽ và dễ sử dụng cho việc giao tiếp với các thiết bị nối tiếp từ Python. Với PySerial, bạn có thể dễ dàng đọc và ghi dữ liệu từ và đến các thiết bị ngoại vi, giúp phát triển các ứng dụng IoT, hệ thống nhúng, và tự động hóa một cách hiệu quả. Thư
16
viện này cung cấp sự linh hoạt và hỗ trợ đa nền tảng, làm cho nó trở thành một lựa chọn lý tưởng cho các dự án yêu cầu giao tiếp nối tiếp.
3.5. Thư viện Imutils
Thư viện Imutils là một tập hợp các hàm tiện ích đơn giản nhưng hữu ích để xử lý ảnh, được xây dựng trên nền tảng thư viện OpenCV. Thư viện này giúp đơn giản hóa và tăng tốc quá trình xử lý ảnh trong các dự án liên quan đến thị giác máy tính và xử lý ảnh.
Imutils được thiết kế để giảm thiểu sự phức tạp khi sử dụng OpenCV, cung cấp các hàm tiện ích giúp thực hiện các tác vụ xử lý ảnh thông thường một cách dễ dàng và hiệu quả hơn.
Thư viện này rất hữu ích cho các nhà phát triển và nhà nghiên cứu trong lĩnh vực thị giác máy tính, giúp họ tập trung vào các thuật toán chính thay vì các chi tiết cài đặt phức tạp.
Một số tính năng thường sử dụng:
• Xoay ảnh: Cung cấp hàm xoay ảnh theo một góc nhất định mà không làm mất phần nào của ảnh.
• Thay đổi kích thước ảnh: Dễ dàng thay đổi kích thước ảnh với tỷ lệ khung hình giữ nguyên.
• Dịch chuyển ảnh: Di chuyển ảnh theo các trục x và y.
• Cắt ảnh: Cắt một phần của ảnh theo tọa độ được chỉ định.
• Hiển thị ảnh: Hiển thị ảnh với cửa sổ có thể thay đổi kích thước.
• Xử lý video: Các tiện ích để xử lý khung hình từ video.
Imutils là một thư viện tiện ích mạnh mẽ và dễ sử dụng để xử lý ảnh trong Python, giúp đơn giản hóa và tăng tốc các tác vụ xử lý ảnh thông thường. Với các hàm tiện ích dễ dùng và tích hợp tốt với OpenCV, Imutils là lựa chọn lý tưởng cho các nhà phát triển và nhà nghiên cứu muốn nhanh chóng triển khai các giải pháp xử lý ảnh và thị giác máy tính.
3.6. Ứng dụng điều khiển
Ngày nay ngôn ngữ lập trình Python hỗ trợ nhiều loại giao diện người dùng như Tinker, Turtle, Qt, ... nhưng nổi bất nhất là Qt được tin dùng nhiều trong hệ thống nhúng, đặc biệt là ở xe hơi, bởi tính tương thích đa hệ điều hành và mã nguồn mở nếu dùng PyQt thông qua gói package của Python, đặc biệt hơn PyQt hỗ trợ chuyển mã nguồn UI ( User Interface) sang tập lệnh Python bằng gói thư viện PYUIC (Python User Interface Complie), sau khi tìm hiểu các phương pháp lập trình giao diện chúng tôi quyết định chọn PyQt làm GUI ( Graphic User Interface).
17 3.6.1. Tổng quan về phần mềm Qt Designer
Qt Designer là phần mềm hỗ trợ lập trình viên thiết lập layout và tinh chỉnh vị trí của các widget mà Qt hỗ trợ. Ngoài ra, ứng dụng còn hỗ trợ đa hệ điều hành như Windows, Ubuntu, Debian,..
Hình 3.1: Giao diện Qt Designer khi khởi động.
Khi khởi động Qt Designer sẽ có giao diện như hình phía trên, Bao gồm thanh công cụ widget box và project inspector ở 2 bên, thuận tiện cho người dùng sử dụng để tạo ra widget và truy xuất layout và thuộc tính của từng đối tượng trong khung cửa sổ của giao diện.
3.6.2. Tổng quan về package PyUIC
PyUIC là một công cụ quan trọng trong hệ sinh thái Qt dành cho những lập trình viên sử dụng ngôn ngữ lập trình Python, giúp lập trình viên chuyển đổi các tệp giao diện người dùng (UI) được tạo bằng Qt Designer (.ui) thành tập lệnh Python, qua đó lập trình viên có thể dễ dàng tích hợp giao diện của hệ sinh thái Qt vào hệ thống của mình mà không cần tinh chỉnh nhiều hệ thống cần tích hợp. Từ đó chúng tôi kết luận PyUIC là một công cụ hữu ích giúp đơn giản hóa quá trình phát triển giao diện người dùng trong các ứng dụng PyQt, tiết kiệm thời gian và công sức cho các nhà phát triển.
3.6.3. Chạy chương trình trên hệ điều hành Windows
Như đã biết hệ điều hành window để chạy các chương trình ứng dụng thì cần file execute (.exe), do đó từ chương trình Python chúng tôi phải chuyển sang dạng execute file để cho người dùng dễ dàng thực thi ứng dụng mà không cần cài đặt môi trường và chạy mã nguồn Python, qua tìm hiểu chúng tôi thì các chuyên gia Python cũng đã đau đầu từ lâu và
18
nghiên cứu cho ra package PyInstaller nhằm giúp đơn giản hóa quá trình sử dụng cho người dùng.
PyInstaller được thiết kế để hỗ trợ nhà phát triển chuyển đổi các script Python thành các tệp thực thi độc lập, giúp đơn giản hóa việc phân phối và triển khai ứng dụng Python. Nó hỗ trợ đa nền tảng, bao gồm Windows, macOS và Linux.
PyInstaller là công cụ hữu ích và mạnh mẽ giúp đơn giản hóa quá trình chuyển đổi và phân phối ứng dụng Python. Với khả năng tạo ra các tệp thực thi độc lập và hỗ trợ đa nền tảng, PyInstaller là lựa chọn lý tưởng cho các nhà phát triển Python muốn phân phối ứng dụng của mình một cách dễ dàng và hiệu quả.
Hình 3.2: logo mặc định của ứng dụng tạo ra bằng PyInstaller.
3.7. Cơ sở dữ liệu Maria Database
MariaDB là một hệ quản trị cơ sở dữ liệu quan hệ mã nguồn mở, được phát triển từ MySQL bởi cộng đồng và các nhà phát triển của MySQL. Nó được thiết kế để thay thế hoàn toàn MySQL, cung cấp các tính năng nâng cao, hiệu suất cao và bảo mật. MariaDB là một trong những lựa chọn phổ biến cho việc lưu trữ và quản lý dữ liệu trong các ứng dụng web và doanh nghiệp.
Hình 3.3: Logo của MariaDB.
MariaDB được phát triển nhằm mục đích cung cấp một hệ quản trị cơ sở dữ liệu mạnh mẽ, ổn định và bảo mật, đáp ứng được nhu cầu của các ứng dụng hiện đại. Nó được sử dụng rộng rãi trong nhiều lĩnh vực, từ các trang web nhỏ đến các hệ thống doanh nghiệp lớn.
19 Các tính năng nổi bật:
• Hiệu suất cao: MariaDB tối ưu hóa hiệu suất thông qua nhiều cải tiến về chỉ mục, bộ nhớ đệm và các thuật toán xử lý truy vấn.
• Bảo mật: Cung cấp các tính năng bảo mật nâng cao như mã hóa dữ liệu, xác thực người dùng, và quyền truy cập linh hoạt.
• Khả năng tương thích: Tương thích ngược với MySQL, cho phép các ứng dụng và cơ sở dữ liệu hiện có dễ dàng chuyển đổi sang MariaDB mà không cần thay đổi lớn.
• Cộng đồng và Hỗ trợ: Được phát triển và hỗ trợ bởi một cộng đồng lớn và năng động, đảm bảo sự phát triển liên tục và khắc phục lỗi kịp thời.
MariaDB là một lựa chọn tuyệt vời cho việc quản lý cơ sở dữ liệu quan hệ, cung cấp các tính năng mạnh mẽ, hiệu suất cao và bảo mật. Với khả năng tương thích ngược với MySQL và sự hỗ trợ từ cộng đồng lớn, MariaDB là giải pháp lý tưởng cho nhiều loại ứng dụng, từ các trang web nhỏ đến các hệ thống doanh nghiệp lớn.
3.8. Giao thức UART
UART (Universal Asynchronous Receiver-Transmitter – Bộ truyền nhận dữ liệu không đồng bộ) là một giao thức truyền thông phần cứng dùng giao tiếp nối tiếp không đồng bộ và có thể cấu hình được tốc độ.
Giao thức UART là một giao thức đơn giản và phổ biến, bao gồm hai đường truyền dữ liệu độc lập là TX (truyền) và RX (nhận). Dữ liệu được truyền và nhận qua các đường truyền này dưới dạng các khung dữ liệu (data frame) có cấu trúc chuẩn, với một bit bắt đầu (start bit), một số bit dữ liệu (data bits), một bit kiểm tra chẵn lẻ (parity bit) và một hoặc nhiều bit dừng (stop bit).
Tốc độ truyền của UART được đặt ở một số chuẩn, chẳng hạn như 9600, 19200, 38400, 57600, 115200 baud và các tốc độ khác. Tốc độ truyền này định nghĩa số lượng bit được truyền qua mỗi giây.
Hình 3.4: Kết nối giao thức UART.