26
Hình 3.12 Lưu đồ điều khiển hoạt động cánh tay 2 cắt dứa
3.5 Chương trình điều khiển viết cho PLC cánh tay 1
3.5.1 Chương trình điều khiển viết bằng ngôn ngữ Ladder
Chương trình điều khiển viết cho chương trình chính bằng dưới dạng Lader trên phần mềm GX- Deverlop được thể hiện chi tiết tại phụ lục kèm theo.
27
3.5.2 Chương trình điều khiển viết bằng SFC
Chương trình điều khiển được viết dạng Lader trên phần mềm GX- Deverlop được thể hiện chi tiết tại phụ lục kèm theo.
3.6 Chương trình điều khiển viết cho PLC cánh tay 2
3.6.1 Chương trình điều khiển viết bằng ngôn ngữ Ladder
Chương trình điều khiển viết cho chương trình chính bằng dưới dạng Lader trên phần mềm GX- Deverlop được thể hiện chi tiết tại phụ lục kèm theo.
3.6.2 Chương trình điều khiển viết bằng SFC
Chương trình điều khiển được viết dạng Lader trên phần mềm GX- Deverlop được thể hiện chi tiết tại phụ lục kèm theo.
3.7 Xây dựng phần mềm giao diện cho cấp điều khiển giám sát Robot thu
hoạch dứa
Trong phần trước chúng ta đã xây dựng cấu trúc hệ thống giám sát và điều khiển cho Robot thu hoạch dứa, bắt đầu từ mục 4.8 chúng ta đã xây dựng chương trình phần mềm điều khiển và giám sát dữ liệu cho 2 PLC FX2N-128MT. Để có thể giám sát được quá trình thu hoạch, các dữ liệu phải được trao đổi thường xuyên giữa PLC và máy tính theo cấu trúc truyền thông RS-485. Để thực hiện được việc truyền dữ liệu, chương này chúng ta sẽ tiến hành xây dựng cấu trúc truyền thông giữa máy tính (PC) và PLC và giao diện hiển thị của hệ thống giám sát. Chúng ta sử dụng ngôn ngữ lập trình Python cùng các thư viện hỗ trợ như Tkinter và Pyserial để tiến hành xây dựng cấu trúc truyền dữ liệu, các bước xây dựng hệ thống giám sát gồm:
3.7.1 Lưu đồ điều khiển cho cấp giám sát
Cấp giám sát sẽ có 2 nhiệm vụ chính:
- Phát hiện quả dứa từ hình ảnh của Camera và gửi tọa độ chính xác đến PLC ( Thực hiện trong chương trình chính)
- Cập nhật và hiển thị giao diện HMI cho người giám sát Chu trình hoạt động của cấp giám sát:
Khi bật phần mềm HMI dành cho Robot thu hoạch dứa, giao diện HMI sẽ được hiển thị bao gồm: nửa màn hình bên trái hiển thị hình ảnh thực tế từ Camera, nửa màn hình bên phải sẽ hiển thị các quả dứa được phát hiện sau khi chạy chương trình chính. Để khởi động chương trình chính, người giám sát sẽ bấm nút “BẮT ĐẦU”. Trong chương trình chính, máy tính sẽ thiết lập kết nối với PLC, xây dựng mô hình nhận diện dứa, thực hiện các bước chụp ảnh, nhận diện dứa, gửi tọa độ dứa xuống PLC theo 1 trình tự nhất định sẽđược nói rõ hơn trong mục 3.8.1.
Từ chu trình hoạt động trên ta có lưu đồ thuật toán cho cấp giám sát của Robot thu hoạch dứa như sau:
28
Hình 3.13 Lưu đồ điều khiển cho cấp giám sát
3.7.2 Xây dựng giao diện HMI
a) Lưu đồ điều khiển giao diện HMI
Chu trình hoạt động của giao diện HMI: Cứ 0.005 s, giao diện HMI sẽ cập nhật hình ảnh ở khung hình bên trái bằng 1 khung ảnh lấy về từ Camera. Trong quá trình này, chương trình sẽ kiểm tra nếu như chương trình chính đã chụp ảnh và nhận diện được các quả dứa thì hình ảnh có các quả dứa đã được khoanh vuông sẽđược đưa vào khung hình bên phải.
Từ chu trình hoạt động trên, ta có lưu đồ thuật toán cho giao diện HMI như sau:
29
Hình 3.14 Lưu đồ điều khiển giao diện HMI
b) Cài đặt các thư viện giao diện HMI liên quan
Để xây dựng giao diện giám sát HMI ( Human Machine Interface) trên nền tảng Python có rất nhiều các thư viện hỗ trợ như Tkinter, Kivy, PyQT, wxPython...vv. Nhóm nghiên cứu đã quyết định sử dụng thư viện Tkinter vì các tính năng thân thiện, dễ sử dụng với người dùng, hỗ trợ nhiều các chức năng phức tạp như vẽ biểu đồ, thiết kế hình họa...vv.
Tkinter là một gói trong Python có chứa module TK hỗ trợ cho việc lập trình GUI. TK ban đầu được viết cho ngôn ngữTcl. Sau đó Tkinter được viết ra để sử dụng Tk bằng trình thông dịch Tcl trên nền Python.
Đểcài đặt thư viện Tkinter trên hệ điều hành LINUX, người dùng sẽ mở cửa sổ Command và nhập câu lệnh sau:
30
c) Thiết lập các nút nhấn và màn hình hiển thị
Thiết lập 1 cửa sổ giao diện HMI sử dụng thư viện Tkinter gồm các bước sau:
Khai báo thư viện ta sử dụng câu lệnh: Import tkinter
Khởi tạo1 cửa sổ chính cần có 2 phương thức sau:
Tk (screenName=None, baseName=None, className=’Tk’, useTk=1) Câu lệnh m = tkinter.Tk() sẽ tạo ra 1 cửa sổ và m chính là tên của cửa sổđó
Mainloop()
Phương thức này được sử dụng khi cửa sổ của bạn đã có đầy đủ các thành phần và sẵn sàng chạy. Mainloop() là 1 vòng lặp vô hạn để chạy cửa sổ đó, nó sẽ chờ các sự kiện có thể xảy ra trong quá trình hoạt động đến khi cửa sổđó được đóng lại.
Câu lệnh m.mainloop()
Khởi tạo các thành phần trong cửa sổ chính:
Các thành phần cơ bản trong thư viện Tkinter bao gồm:Button (nút nhấn ), Canvas (tấm nền), Entry(nhập số liệu), Label(nhãn dán)…
w = Button(master, option = value) w = Entry(master, option = value) w = Label(master, option = value)
Master chính là phần chứa các thành phần này, Master có thể là cửa sổ chính hoặc 1 tấm nền (Canvas)…vv
Mỗi thành phần cơ bản trên đều có các thông số và thuộc tính có thể can thiệp được như vịtrí, kích thước.
31
3.8 Xây dựng chương trình chính
3.8.1 Lưu đồ điều khiển chương trình chính
Chu trình hoạt động của chương trình chính: Máy tính sẽ khởi tạo truyền thông giữa máy tính và 2 PLC, xây dựng mô hình từ các file xử lý ảnh đã được huấn luyện từ trước. Tiếp theo, máy tính sẽ đợi nhận được tín hiệu chụp ảnh được gửi lên từ PLC ( đảm bảo Robot thu hoạch dứa đã vào đúng vị trí và sẵn sàng cho việc thu hoạch). Sau khi nhận được tín hiệu này, máy tính sẽ chụp ảnh từCamera đưa vào xử lý. Từcác mô hình đã xây dựng từtrước, các thuật toán sẽ tự động nhận diện và phát hiện các quả dứa trong bức ảnh đó. Tọa độ các quả dứa trên ảnh sau đó sẽ được quy đổi thành tọa độ quả dứa so với vị trí của Camera và tọa độ của quả dứa so với vị trí gốc của 2 cánh tay máy. Tuy nhiên, máy tính sẽchưa gửi ngay tọa độ này xuống PLC mà sẽ chờ đợi tín hiệu báo sẵn sàng cắt được gửi lên từ PLC. Việc này đảm bảo rằng vị trí quả dứa thứ 2 sẽ chỉ được gửi khi quả dứa thứ nhất đã được thu hoạch xong. Việc gửi tọa độ này sẽ diễn ra cho tới khi tất cả các tọa độđã được gửi đi. Quá trình chụp ảnh và làm lại các bước trên sẽ được thực hiện một lần nữa(một cách tự động) để đảm bảo có thể thu hoạch được các quả dứa đã bị che khuất bởi khóm dứa ở trước nó. Sau khi thực hiện xong 2 lần, Máy tính lại quay lại chờ tín hiệu chụp ảnh được gửi xuống để thu hoạch luống dứa tiếp theo.
Từ chu trình hoạt động nêu trên, lưu đồ điều khiển của chương trình chính như sau:
32
Hình 3.15 Lưu đồ điều khiển chương trình chính
3.8.2 Lưu đồ điều khiển quả trình truyền thông trong chương trình
chính
Để khởi động truyền thông, ta cần phải import thư viện PySerial. Thư viện này là một gói hỗ trợ dành cho các giao thức truyền thông sử dụng cổng truyền thông nối tiếp, PySerial được viết dành cho ngôn ngữ lập trình Python và được hỗ trợ trên các nền tảng Window, OS, Linux...vv
Pyserial cần phải được cài đặt trên Python 2.7 hoặc các phiên bản Python mới hơn, ở đây chúng tôi sử dụng phiên bản Python 3.8. Để cài đặt thư viện Pyserial trên hệđiều hành Linux, cần phải vào cửa sổ Command và thực hiện câu lệnh
pip install pyserial
a) Thiết lập Port và thiết bị
Câu lệnh được sử dụng để mở 2 cổng truyền thông như sau: plc1 = PLC_IO("PLC 1", '/dev/ttyUSB0')
33 Trong đó plc1 là cổng truyền thông giữa máy tính là PLC1 được kết nối tại cổng USB “ttyUSB0”, tương tự plc2 là cổng truyền thông giữa máy tính và PLC2 kết nối tại cổng “ttyUSB1”. ttyUSB0, ttyUSB1lần lượt là tên gọi của các cổng USB cho máy tính sử dụng hệđiều hành LINUX.
Cổng kết nối Com Port (truyền thông RS-485), cổng truyền thông đã được chọn ở trên, 8 Bit dữ liệu, 1 dừng (Stop Bit), số bít chẵn lẻ (Party Bit) được chọn là 1, tốc độ truyền thông 9600 Baud, thời gian Timeout là 100s. Để khai báo các thông số sau, ta sử dụng câu lệnh:
Plc_1 = Serial(serialPort, 9600, timeout=100)
b) Lưu đồ giao tiếp giữa PC và PLC
Hình 3.16 Lưu đồ điều khiển quả trình truyền thông trong chương trình chính
Sau khi khởi tạo xong các cổng truyền thông, máy tính sẽ thiết lập 2 luồng xử lý riêng biệt. Luồng 1 sử dụng cho việc gửi dữ liệu từ máy tính lên PLC, luồng thứ 2 sẽđược sử dụng cho việc nhận dữ liệu từ PLC xuống máy tính. Việc sử dụng 2 luồng riêng biệt như vậy sẽ tránh được việc xung đột giữa 2 tác vụ
34 nhận và gửi, đảm bảo máy tính sẽ nhận được chính xác các dữ liệu được gửi lên từ PLC.
Tọa độ của quả dứa được gửi từ máy tính xuống PLC sẽkhông được gửi tất cả tại 1 thời điểm mà sẽđược gửi lần lượt. Sau khi gửi tọa độ quả dứa thứ i, máy tính sẽ chờ đợi đến khi cánh tay Robot thực hiện xong việc thu hoạch quả dứa đấy. Lúc này, PLC sẽ gửi tín hiệu sẵn sàng cắt quả tiếp theo lên máy tính, máy tính sẽ gửi tọa độ quả thứ i+1 tại thời điểm này. Sau khi đã gửi hết tọa độ các quả dứa phát hiện được, máy tính sẽ gửi tín hiệu kết thúc đến PLC báo đã sẵn sàng cho lần thu hoạch luống dứa tiếp theo.
3.8.3 Chương trình viết trên ngôn ngữ python
Chương trình điều khiển giám sát trên ngôn ngữpython được thể hiện chi tiết tại phụ lục kèm thèo.
3.9 Lựa chọn các thiết bị cấp trường
3.9.1 Động cơ Stepper 86HSE 12N B32
Hình 3.17 Động cơ Stepper 86HSE 12N B32
Đặc điểm:
• Tốc độ servo bước 0-1000 vòng / phút (chạy không tải 3000 vòng/phút)
• Mô-men xoắn đầu ra 12N.m.
• Chiều dài thân máy 180mm.
• Chiều dài trục 32mm.
• Bán kính trục 14mm ( rãnh 5mm).
• 4 dây pha gán theo nhãn động cơ.
3.9.2 Driver HBS86H
Đối với hệ thống của chúng ta yêu cầu điều khiển động cơ với tốc độ cao và độ tin cậy lớn nhưng giá thành phải không quá lớn thì giải pháp hệ truyền động Servo là không khả thi. Thay thếvào đó dòng sản phẩm HBS cung cấp một giải pháp giải quyết vấn đề trên bằng sử dụng hệ thống tích hợp động cơ bước hai pha kết hợp encoder và một bộ mã hóa số tốc độ cao. Hệ thống trên được sản xuất và tích hợp trên Driver HBS 86H của hãng Leadshine đến từ Trung Quốc sản xuất có những đặc điểm tương tự hệ thống Servo nhưng giá thành lại rẻ hơn rất nhiều.
35
Hình 3.18 Driver HBS86H
Đặc điểm:
• Không mất bước, độ tin cậy rất cao
• Đảm bảo mô men khi khởi động và khi hoạt động.
• Rung động nhỏ, di chuyển êm ái ngay ở tốc độ thấp.
• Điều khiển tăng tốc và giảm tốc bằng thuật toán tích hợp bên trong driver.
• Cho phép người dùng cài đặt chếđộđiều khiển vi bước.
• Kết hợp được với encoder tốc độcao 1000 đến 2500 Hz.
• Các hiện tượng quá dòng, quá áp và sai lệch vị trí đều được báo lại dưới dạng lỗi bảo vệ.
• Đèn xanh trên thiết bị có nghĩa là hệ thống đang chạy ổn định còn đèn đỏcó nghĩa là hệ thống đang gặp lỗi bảo vệ hoặc đang offline.
Bảng 3.3 Bảng thông số kỹ thuật của Driver HBS86H B32
Thông số Giá trị
Điện áp đầu vào 30-100 VDC Dòng điện đầu ra 6A 20KHz PWM Tần số phát xung 200KHz
Các chếđộ bảo vệ Dòng điện vượt quá 12A. Quá điện áp 130V
36 Khối lượng Sấp xỉ 580g
Điều kiện môi trường Tránh bụi, sương đầu và khí ăn mòn Nhiệt độ làm việc Tối đa 70 ℃
Nhiệt độ bảo quản -20℃ ~ +65℃ Độẩm 40 ~ 90%RH
Các chếđộ làm mát Làm mát tự nhiên hoặc
37 Nguyên lý hoạt động:
Hình 3.19 Sơ đồ đấu dây Driver với PLC và động cơ.
Driver HBS86 có 4 cổng kết nối, thứ nhất là cổng kết nối cho tín hiệu điều khiển, thứ hai kết nối cho tín hiệu phản hồi từ encoder, thứ ba kết nối tín hiệu cảnh báo với stator và cuối cùng là kết nối với động cơ stepper hai pha. Nguyên lý điều kiển rất đơn giản: Driver đóng vai trò là một bộđiều khiển vòng kín với 3 vòng điều khiển dòng điện, tốc độ và vị trí nhận giá trị đặt là tần số và số xung được cấp qua PORT giao tiếp với PLC.
38
CHƯƠNG 4.PHƯƠNG PHÁP PHÂN TÍCH ẢNH VÀ NHẬN DIỆN QUẢ
DỨA
4.1 Mục tiêu và nhiệm vụ của chương
Ởđây chúng ta sẽ có ba nhiệm vụđó là :
Nhiệm vụ 1: Nhận diện hình dạng trái dứa
Nhiệm vụ 2: Nhận diện dứa chin, dứa xanh
Nhiệm vụ 3: Xác định tọa độ của dứa chín, dứa xanh nhận diện được theo 3 trục x,y,z.
Phân tích bài toán :
• Yêu cầu : Nhận diện quả dứa, phân biệt dứa chín, dứa xanh trên ảnh.
• Dữ liệu đầu vào: Một bức ảnh màu (RGB), định dạng jpg hoặc png.
• Dữ liệu đầu ra: Một danh sách các bộ 5 số, mỗi bộ chứa thông tin của 1 quả dứa:
Toạđộ và kích thước của quả dứa:
Mỗi quả dứa được bao bởi một hình chữ nhật có các cạnh song song với các cạnh của ảnh. Có nhiều cách khác nhau để biểu diễn hình chữ nhật này, tuy nhiên, cách nào cũng cần tối thiểu 4 tham số.
Ởđây, ta dùng 4 tham số:
- Hoành độ tâm hình chữ nhật - Tung độ tâm hình chữ nhật
- Một nửa chiều rộng hình chữ nhật - Một nửa chiều cao hình chữ nhật
4.2 Giải quyết bài toán
4.2.1 Phươngpháp Machine Learning (học máy)
Machine Learning là một phương pháp để cung cấp cho máy tính khảnăng giải quyết vấn đề mà không cần lập trình cụ thể.
Bài toán với đặc trưng cụ thể: Bài toán tìm số lớn nhất trong một dãy số cho trước, ta có thể chỉ ra phương pháp cụ thể để máy tính thực hiện điều này, đó là duyệt lần lượt tất cả các sốtrong dãy, luôn lưu lại giá trị lớn nhất trong các giá trị đã duyệt qua, và cập nhật giá trị này mỗi khi gặp một số lớn hơn. Giải thuật kết thúc khi đã duyệt toàn bộ các số trong dãy. Có thể thấy, với bài toán vừa nêu, con người có thể chỉ rõ ra các đặt trưng của vấn đề, nhờ đó mà có thể chỉ cho máy tính cách giải quyết cụ thể.
Bài toán không có đặc trưng cụ thể: Bài toán nhận diện quả dứa (Phần xử lý ảnh mà đồ án kì trước đã làm). Với bài toán này máy tính khó có thể phân biệt được quả dứa trong một bức ảnh vì nhiều lý do: trong một ruộng dứa sẽ có cả quả xanh và quả chín, không có màu sắc đặc trưng, màu của quả dứa, lá dứa, và vương miện tương đồng nhau.
39
Hình 4.1 Màu sắc của quả dứa rất đa dạng
Hình 4.2 Màu sắc của quả dứa, lá dứa, vương miện tương đồng nhau
Bài toán phân loại trên không có đặc trưng cụ thể vì vậy cần một phương pháp để dạy cho máy tính hiểu được đâu là quả dứa trong ảnh.
Phương pháp nhận diện mà các bạn kì trước đã làm là dùng thuật toán Haar Cascade. Khi đó sẽđẩy 2 bộ dữ liệu bao gồm một tập dữ liệu có chứa ảnh quả dứa và một tập dữ liệu là không chứa ảnh quả dứa để huấn luyện và nhận diện quả dứa.