5.3.1 Giới thiệu hệ thống phân loại sản phẩm
Hình 5.3 : Các bước phân loại sản phẩm
Camera được sử dụng trong hệ thống nhằm mục đính chụp và gửi ảnh về cho máy tính xử lý ảnh. Sau khi xử lý ảnh , máy tính sẽ tính toán các dữ liệu cần thiết và gửi nó xuống cho bộ điều khiển trung tâm. Dựa trên các thông tin được gửi xuống, bộ điều khiển trung tâm sẽ ra lệnh cho cơ cấu chấp hành thực thi việc phân loại sản phẩm
Hình 5.4 : Các mẫu sản phẩm cần phân loại
Sản phẩm cần phân loại trong đồ án này là các mẩu gỗ hình chữ nhật có cùng màu sắc, cùng chiều rộng, chiều cao, có kích thước chiều dài khác nhau. Vì vậy phương pháp phân loại sản phẩm bọn em sử dụng ở đây là phân loại theo hình dáng và kích thước chiều dài vật.
5.3.2 Phân tích hệ thống
Vật cần phân loại được vận chuyển nhờ băng tải, khi qua cảm biến phát hiện có vật thì băng tải sẽ dừng và tay máy Kestrel sẽ di chuyển đến vị trí chụp ảnh để chụp và đưa ảnh về máy tính để xử lý. Khi máy tính nhận ảnh từ camera sẽ xử lý ảnh nhờ phần mềm viết trên máy tính để xác định được kích thước của vật là bao nhiêu, có thỏa mãn kích thước cần phân loại. Nếu kích thước của vật thảo mãn thì phần mềm sẽ xử lý tiếp và gửi tọa độ tâm và góc lệch của vật tới PLC để điều khiển tay máy Kestrel di chuyển đến vị trí gắp vật. Ngược lại nếu kích thước của vật không thảo mãn thì máy tính sẽ gửi tín hiệu cho băng tải chạy tiêp để bỏ qua vật chờ vật tiếp theo đến để xử lý. Xong qua trình xử lý thì tọa độ tâm, góc lệch cũng như ảnh đã qua xử lý sẽ được hiển thị lên giao diện windows form.
5.3.3 OpenCV và EmguCV
a) OpenCV
OpenCV là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính (Computer Vision), xử lý ảnh (Image Processing) và máy học (Machine Learnning). Nó chứa hàng ngàn thuật toán tối ưu hoá , trong đó cung cấp một bộ công cụ phổ biến cho các ứng dụng về thị giác máy tính. OpenCV đang được sử dụng trong rất nhiều ứng dụng , từ khâu hình ảnh Street View của Google tới việc chạy các chương trình nghệ thuật tương tác , nhận diện khuôn mặt , hay Robot , xe hơi tự lái …….
Hình 5.5 : Thư viện OpenCV với ứng dụng nhận dạng khuôn mặt
OpenCV là một API được viết bằng C++ bao gồm các module chứa hàng loạt các chức năng , từ chuyển đổi màu sắc hình ảnh ở mức độ thấp tới các công cụ máy học cấp cao
b) EmguCV
EmguCV là một cross flatform .NET, một thư viện xử lý hình ảnh mạnh dành riêng cho ngôn ngữ C#. Cho phép gọi được chức năng của OpenCV là từ .NET. Tương thích ngôn ngữ như: C#, VB, VC ++, Iron Python... Wrapper có thể được biên dịch bởi Visual Studio, Xamarin Studio và Unity. Nó có thể chạy trên Windows, Linux, Mac OS X, iOS, Android và Windows Phone
Hình 5.6 : EmguCV : 1 wrapper của OpenCV
Trong đồ án này, EmguCV được nhóm chúng em viết dưới dạng file dll, sau đó đóng gói và sử dụng trong phần mềm giám sát giao diện
5.3.4 Xác định khoảng cách trong không gian 3D
Để xác định được khoảng các thức tế trong không gian 3D thông qua xử lý ảnh, người ta thường sử dụng phương pháp camera calibration. Các phương pháp calibration kinh điển dựa trên mô hình calibration đặc biệt, tức là ta biết được kích thước và vị trí đối tượng trong một hệ tọa độ nhất định. Các đặc trưng khác (chẳng hạn như góc, đường...) được tách từ ảnh của mô hình hiệu chỉnh camera.
Tuy nhiên các phương pháp này phức tạp và thường dùng cho trường hợp camera phải di chuyển nhiều vị trí để chụp và xử lý ảnh. Còn ở đồ án này camera chỉ cố định tại 1 điểm duy nhất chụp ảnh, và hơn nữa mắt của camera được đặt song song so với mặt phẳng chứa vật cho nên chúng em chỉ dùng các phương pháp hình học đơn giản để lấy được tỷ lệ của kích thước thật của vật so với kích thước trên ảnh. Nhóm đã đưa vào 1 mặt phẳng có dạng hệ tọa độ xy như hình vẽ. Mặt phẳng này được được đặt ngay trên băng tải để tiện cho việc tính toán.
Hình 5.7 : Mặt phẳng tọa độ dùng xác định tỷ lệ thực vả ảnh
Trong mặt phẳng này, kích thước của mỗi ô vuông có đơn vị là 2cm. Thông qua camera chúng em căn chỉnh sao tọa độ gốc của ảnh trùng với tọa độ gốc của hệ tọa độ Oxy mà nhóm đánh dấu trên mặt phẳng này. Dựa trên ảnh chụp lại mặt phẳng này, ta đo được 1 ô vuông này có kích thước khoảng 294 pixels. Để tăng tính chính xác của phép đo này ta đo làm nhiều lần để tính ra kích thước trung bình và sai số tuyệt đối của nó
Bảng 5.1 : Liệt kê kết quả đo kích thước ô vuông đơn vị
Lần đo Kích thước Sai số tuyệt đối mỗi lần đo
2 293 0.6
3 291 1.4
4 292 0.4
5 292 0.4
TB 292.4 0.64
Để tìm ra tọa độ của tay máy trên tọa độ ảnh, ta tiến hành đo tọa độ của tâm tay máy so với gốc tọa tọa độ trên mặt phẳng thực thì ta có bảng sau
Bảng 5.2 : Liệt kê kết quả đo tọa độ tay máy
Lần đo Theo phương
X(cm)
Sai số tuyệt đối mỗi lần đo 1 17.9 0.02 2 18 0.08 3 17.8 0.12 4 17.9 0.02 5 18 0.08 TB 17.92 0.064
Lần đo Theo phương
Y(cm)
Sai số tuyệt đối mỗi lần đo 1 8.2 0.02 2 8.1 0.08 3 8.3 0.12 4 8.1 0.08 5 8.2 0.02 TB 8.18 0.064 Hình 5.8 : Vị trí giữa camera và vật
Tuy nhiên khi chụp ảnh thì điểm xác định tâm vật cao so với mặt phẳng tọa độ thực tế 1 đoạn h= 5cm. Nếu chỉ dựa trên tọa độ này sẽ dẫn đến tọa độ bị sai, làm cho tay máy đi đến điểm X để gắp vật thay vì đến điểm V. Vì vậy ta cần chia tọa độ xy cho tỷ lệ (H-h)/H để tay máy có thể đến đúng điểm V. Với h =5cm là chiều cao của vật và H = 50 cm là khoảng cách từ mắt camera đến mặt phẳng. Như vậy ta cần chia cho tỉ lệ 9/10
Như vậy ta có công thức để suy ra tọa độ tâm của vật sau khi xử lý ảnh như sau:
Tọa độ trục X : 17.92+(x*292.4/2)*10/9 (cm) Tọa độ trục Y : 8.18+(y*292.4/2)*10/9 (cm)
Về phần xác định chiều dài của vật qua xử lý ảnh, ta cũng tiến hành đo chiều dài thực tế và chiều dài trên ảnh của vật và tính được tỉ lệ. Đối với mỗi phép đo ta lấy giá trị trung bình cộng 5 lần và sau đó chia 2 giá trị trung bình cho nhau để lấy tỉ lệ giữa kích thước ảnh và kích thước thực tế.
5.3.5 Thuật toán xử lý ảnh
Hình 5.9 : Lưu đồ xử lý ảnh của hệ thống
- Cắt bỏ phần thừa,lọc và nhị phân ảnh : Phần mềm xử lý ảnh trên máy tính sẽ cắt bỏ phần thừa nằm ngoài băng tải đồng thời lọc các thành phần nhiễu của ảnh, sau đó đưa ảnh về mức xám và nhị phân thành ảnh đen trắng
- Tìm các đường bao trong ảnh nhị phân : Dựa trên danh giới giữa 2 màu đen và trắng, sẽ xác định được các đường viền trong ảnh bao gồm cả vật, ta giữ lại các đường bao khép kín. Sau đó dùng hàm có sẵn để xác định
diện tích bên trong các đường bao đó. Cuối cùng ta lấy đường bao có diện tích gần với diện tích thật của vật
- Tính chiều dài của hình chữ nhật : Dựa trên đường bao đó ta lại dùng hàm xác định được 4 đỉnh của vật rồi dựa vào 4 đỉnh đó để tính chiều dài hoặc chiều rộng của vật.
- Chiều dài thỏa mãn điều kiện phân loại: Kiểm tra xem vật có thỏa mãn kích thước cần tìm không
- Tìm tọa độ tâm và góc lệch của hình chữ nhật : dựa trên 4 đỉnh của hình chữ nhật ta tìm được tọa độ cũng như góc lệch của nó.
- Trả về thông tin phân loại: trả về thông tin của vật theo tọa độ tâm và góc lệch hoặc thông tin báo không vật cho các hàm khác để tiếp tục tính toán hoặc ra lệnh.
Sau khi xử lý ảnh, nếu không phát hiện thấy vật hệ thống sẽ ra lệnh cho băng tải tiếp tục chạy. Trong trường hợp phát hiện vật, trả về thông tin của vật theo tọa độ tâm và góc lệch cho các hàm khác xử lý thì đồng thời ảnh sẽ hiện thị ảnh đã xử lý lên như hình dưới.
Hình 5.10 : Ảnh sau khi xử lý và hiện thị lên
5.3.6 Chương trình xử lý ảnh
a, Chương trình chụp ảnh từ camera
Đây là phần kết nối giữa máy tính với camera sử dụng thư viện Pylon. using (Camera camera = new Camera())
{
Console.WriteLine("Using
camera{0}.”,camera.CameraInfo[CameraInfoKey.M odelName]);
camera.Parameters[PLCameraInstance.MaxNumBuffer].SetValue(5);. camera.StreamGrabber.Start();
// Wait for an image and then retrieve it. A timeout of 5000 ms is used. IGrabResult grabResult =
camera.StreamGrabber.RetrieveResult(3000, TimeoutHandling.ThrowException);
byte[] buffer = grabResult.PixelData as byte[];
ImagePersistence.Save(ImageFileFormat.Bmp, "test.bmp", grabResult);
Image<Bgr, byte> tu1 = new Image<Bgr, byte>("test.bmp"); camera.StreamGrabber.Stop();
camera.Close(); }
b, Các hàm dùng để xử lý ảnh
Dưới đây là các hàm xử lý ảnh và code được sử dụng trong đồ án:
- Hàm cắt ảnh theo vị trí và kích thước: : dx và dy là vị trí bắt đầu cắt ảnh, w và h là kích thước chiều dài và chiều rộng của ảnh muốn cắt.
- myROI(dx, dy, w, h) :
- GaussianBlur: Lọc ảnh (làm mịn ảnh, làm mờ ảnh), sử dụng lý thuyết hàm Gaussian để tính toán việc chuyển đổi mỗi Pixel của hình.
- GaussianBlur(image, image, Size2d(3, 3), 2); - Convert<color type, byte>() : Chuyển đổi hệ màu
- Image<Gray, byte> cropIn = img.Convert<Gray, byte>()
- Threshold: Phân ngưỡng ảnh. Nếu pixel có giá trị lớn hơn giá trị ngưỡng thì nó được gán một giá trị (thường là 1), ngược lại nhỏ hơn giá trị ngưỡng thì được gán một giá trị khác (thường là 0).
- CvInvoke.Threshold(cropIn,cropOut,250,255,Emgu.CV.CvEnum.Threshol dType.BinaryInv);
- findContours: Xác định đường biên
- CvInvoke.FindContours(cropOut,contours,hier,Emgu.CV.CvEnum.RetrTy pe.List,Emgu.CV.CvEnum.ChainApproxMethod.ChainApproxSimple); - minAreaRect: Tìm hình chữ nhật nhỏ nhất bao quanh đường viền kể cả
dưới dạng xoay
- RotatedRect rect = CvInvoke.MinAreaRect(contours[i]);
- DrawContours: Vẽ đường viền xung quanh hình và hiển thị lên ảnh
- CvInvoke.DrawContours(img, contours, i, new MCvScalar(120, 0, 120), 15);
- CvInvoke.ArcLength(contours[i], true);
- CvInvoke.ApproxPolyDP : Hàm xấp xỉ đa giác, dùng để tìm ra 4 đỉnh của hình chữ nhật
- CvInvoke.ApproxPolyDP(contours[i], approx, 0.02 * perimeter, true);
CHƯƠNG 6 : THIẾT KẾ CHƯƠNG TRÌNH ĐIỀU KHIỂN VÀ GIÁM SÁT TAY MÁY
6.1 Mô tả công nghệ
Robot tay máy Kestrel sau khi được bảo dưỡng và cải tiến vẫn giữ được cấu trúc như cũ là một robot cầu trục gồm 4 trục X, Y, Z, R. Ba trục X, Y, Z được gắn cố định với động cơ servo bằng vít me. Trục R có khớp nối mềm nên có thể kết nối với nhiều thiết bị phục vụ cho nhiều ứng dụng khác nhau. Trong nội dung đồ án, nhóm đã lựa chọn tay gắp vật điều khiển bằng khí nén để lắp vào cuối trục R, biến tay máy thành một máy gắp nhả để chuyển vật từ băng tải này sang băng tải khác.
Hệ thống phân loại sản phẩm sẽ gồm hai băng tải song song chạy ngược chiều nhau và được đặt trong khung tay máy, vùng mà tay máy có thể di chuyển tự do. Các vật chạy trên băng tải có kích thước khác nhau. Những vật có cùng kích thước sẽ được tay máy gắp lên và cho xuống băng tải thứ hai. Tay máy có thể di chuyển theo các quỹ đạo từ đơn giản đến phức tạp do người điều khiển lập trình trên máy tính. Một quỹ đạo chuyển động được tổng hợp từ nhiều dạng quỹ đạo đơn giản xuất phát từ các chuyển động JOG của các trục X, Y, Z.
Trên hình 6.1 là một ví dụ đơn giản về một quỹ đạo chuyển động của ứng dụng gắp thả vật, dùng để minh hoạ cách thức dữ liệu điều khiển vị trí hoạt động. Trong đó :
O: vị trí xuất phát A: vị trí chụp ảnh
B: vị trí chuyển bị gắp vật (thay đổi trong quá trình làm việc) C: vị trí chuyển bị thả vật
D: vị trí gắp vật (thay đổi trong quá trình làm việc) E: vị trí thả vật
Tọa độ các vị trí này được lưu trong PLC. Bằng phương pháp động học ngược, chúng em chạy JOG cho tay máy robot đến các vị trí này và sau đó lưu lại. Bằng cách teaching điểm thì chúng em dễ dang thay đổi vị trí các điểm này trên phần mềm giao diện giám sát mà không cần dùng phần mềm của hãng. Các điểm B, D sẽ thay đổi trong từng lần nhận diện vật thì các vị trí còn lại sẽ cố định trong suốt một chu trình làm việc của hệ thống
Chu trình làm việc của hệ thống tay máy như sau:
Ban đầu tay máy ở vị trí O. Sau khi có lệnh bắt đầu làm việc thì băng tải đưa vật vào nhận dạng bắt đầu chạy. Khi cảm biến tiệm cận phát hiện vật thì băng tải dừng lại, khi đó tay máy chạy đến vị trí A để chụp ảnh. Sau khi đã có dữ liệu về vật, nếu vật không thỏa mãn điều kiện phân loại, băng tải sẽ tiếp tục chạy để loại vật này, và đưa vật khác vào. Còn nếu thỏa mãn, tay máy lần lượt chạy đến điểm B và xuống điểm D để gắp vật. Trong lúc này, trục R hay trục cổ tay máy sẽ xoay đúng theo phương của vật để gắp vật. Khi đã đến điểm D, xy lanh được đẩy khí để kẹp vật. Sau khi đã gắp vật tay máy quay lại vị trí B, sau đó lần lượt đến điểm D và E để thả vật. Trong lúc này cổ tay cũng xoay sao cho chiều dài vật cùng phương với băng tải. Sau khi hoàn thành nhiệm vụ thả vật, tay máy lại quay lại điểm A để tiếp tục chu trình làm việc của mình.
6.2 Lưu đồ thuật toán cho chương trình trong PLC
Cấu trúc chương trình PLC trong phần mềm lập trình GX Works3 được chia làm nhiều loại: Chương trình chạy lần đầu (Initial), vòng quét chính (Scan), vòng quét theo chu kì cố định (Fixed scan), ngắt (Event), chương trình chờ gọi (Standby). Chương trình vòng quét chính được chia nhỏ thành các chương trình con để có thể dễ dàng quản lý các chức năng của hệ thống cũng như dễ dàng trong việc làm việc nhóm. Sau đây là chương trình tổng quát hệ thống
Hình 6.2 : Lưu đồ chương trình PLC tổng quát
Chương trình bật biến tần servo sẵn sàng. Chương trình dùng để đưa driver AC servo vào trạng thái sẵn sàng cho hoạt động điều khiển chuyển động. Lưu đồ chương trình được thể hiện dưới hình 6
Hình 6.3 : Lưu đồ chương trình bật biến tần
Chương trình xóa lỗi của driver AC servo. Xóa các lỗi của các module RD77MS2 cũng như biến tần servo trong quá trình hoạt động gây dừng quá trình điều khiển vị trí. Lưu đồ chương trình được thể hiện dưới hình
Hình 6.4 : Lưu đồ chương trình xóa lỗi biến tần
Chương trình về HOME, được sử dụng để đưa 4 trục của tay máy về gốc tọa độ trong trường hợp muốn khởi động lại. Lưu đồ chương trình được thể hiện dưới hình
Hình 6.5 : Lưu đồ chương trình về HOME
Chương trình dừng khẩn : dùng để điều khiển bit trạng thái dừng khẩn của module RD77_2 bằng cách kiểm tra, so sánh bit trạng thái dừng khẩn của RD77_1, được điều khiển bằng nút dừng khẩn nối với các chân tín hiệu đầu vào. Lưu đồ chương trình được thể hiện ở hình
Hình 6.6 : Lưu đồ chương trình dừng khẩn cấp
Chương trình chạy JOG: Chương trình dùng để điều khiển bị trí từng trục hoặc tất cả các trục đến vị trí mong muốn. Lưu đồ chương trình được thể hiện
Hình 6.7 : Lưu đồ chương trình chạy JOG
Chương trình TEACHING điểm: Chương trình dùng để dạy điểm cho các trục bằng cách lấy giá trị vị trí hiện tại của trục đó nạp vào bộ nhớ đệm G của RD77MS2. Lưu đồ chương trình được thể hiện dưới hình
Hình 6.8 : Lưu đồ chương trình TEACHING điểm