Visual Studio là một môi trường phát triển tích hợp (IDE), là một trong những công cụ lập trình và thiết kế Website nổi tiếng nhất hiện nay được phát triển bởi Microsoft vào năm 1997. Nó có khả năng biên tập, sửa lỗi và thiết kế được nhiều ngôn ngữ lập trình khác nhau như C, C++, VB, C#, Python, Ruby, Javascript, CSS,… với khả năng linh hoạt trong việc tích hợp thư viện lập trình và các API của các bên liên quan.
Hình 2. 43 Giao diện phần mềm Visual Studio
Để có thể lập trình điều khiển Robot trên phần mềm Visual Studio sử dụng ngôn ngữ lập trình Python ta cần có thư viện bao gồm các hàm và câu lệnh điều khiển được cung cấp bởi nhà sản xuất Dobot. Một số câu lệnh chính được sử dụng như:
Hàm điều khiển Chức năng
SetPTPCmd Thực thi lệnh dịch chuyển theo chế độ Point to Point (điểm tới điểm)
SetEndEffectorSuctionCup Thiết lập cơ cấu chấp hành là đầu hút khí nén
SetWAITCmd Lưu chỉ số của lệnh cuối cùng
30
Khoa ĐT CLC – ĐHSPKT TP.HCM
ConnectDobot Kết nối Dobot Magician với máy tính
SetHOMEParams Thiết lập các thông số tại vị trí Home
SetPTPCoordinateParams Thiết lập các thông số tọa độ
SetPTPCommonParams Thiết lập các thông số chung khi chạy ở chế độ Point to Point (điểm tới điểm)
SetPTPJumpParams Thiết lập các thông số khi Dobot hoạt động theo chế độ chuyển động JUMP
SetHOMECmd Thiết lập lệnh di chuyển về vị trí Home
SetQueuedCmdStartExec Chạy các lệnh đã được đưa vào hàng chờ
SetQueuedCmdClear Xóa toàn bộ lệnh trong hàng chờ
SetEMotor Điều khiển động cơ băng chuyền
DisconnectDobot Ngắt kết nối Dobot với máy tính
31
Khoa ĐT CLC – ĐHSPKT TP.HCM
CHƯƠNG 3. TÍNH TOÁN THIẾT KẾ 3.1 Yêu cầu thiết kế
Hình 3. 1 Sơ đồ bố trí thiết bị phần cứng
Thiết kế tối ưu cho hệ thống phân loại sản phẩm dựa trên màu sắc có thể hoạt động ổn định lẫn tiết kiệm chi phí đầu tư ban đầu bao gồm có 5 cụm chính như sau:
Băng tải: vận chuyển các khối vật thể
Bơm khí: nén và xả khí để có thể gắp thả vật thể kích thước 25 x 25mm Cánh tay Robot: xếp các vật thể từ trên băng chuyền vào kho chứa
Kho chứa: chứa các khối vật thể, kích thước 4*3*4 (hàng * cột * độ cao – 4 hàng tương ứng với 4 màu sắc, mỗi hàng màu xếp 3 viên và từ 3 viên này ta xếp lên 4 viên nữa).
Giá đỡ Camera: dùng để gắn Camera chiếu xuống mặt băng chuyền.
3.2 Yêu cầu điều khiển
Trong quá trình hệ thống hoạt động, ta cần phải đảm bảo tốc độ băng chuyền ở mức tối ưu nhất để vừa đảm bảo năng suất làm việc, vừa đảm bảo tính chính xác khi phân loại màu sắc vì nếu cho băng chuyền hoạt động quá nhanh, Camera sẽ không thể bắt kịp và phân tích được từng khung hình của các khối vật thể khi chúng đi vào vùng quan sát của nó, gây ra tình trạng phân loại sai màu sắc, còn nếu băng chuyền hoạt động quá chậm thì sẽ không đảm bảo năng suất hệ thống.
Vật thể dù có được đặt như thế nào trên băng chuyền thì sau khi qua xử lý, chúng phải được cánh tay Robot xoay theo đúng hướng ta mong muốn trước khi được xếp vào kho, trong đề tài này ta sẽ xếp các vật thể vuông góc với kho. Ngoài ra, các vật thể có thể xếp chồng lên nhau theo từng khối màu, kích thước 1*3*4 viên (hàng * cột * độ cao). Sau khi gắp thả một vật thể, bộ điều khiển sẽ xóa ô nhớ tại vị trí đó đi và điều khiển cánh tay Robot tới vị trí kế tiếp tránh trường hợp xếp trùng vật thể tại cùng 1 vị trí.
32 Khoa ĐT CLC – ĐHSPKT TP.HCM 3.3 Linh kiện phần cứng 3.3.1 Camera Hình 3. 2 Webcam Logitech C920 Nhà sản xuất Logitech Độ phân giải - Video: FullHD 1080p/30fps, HD 720p/30fps - Photo: 3 MP Góc quay 780 Công nghệ - Auto low-light correction - Auto noise elimination - Auto Focus
Giao tiếp USB 2.0
Bảng 3. 1 Thông số kỹ thuật Camera
3.3.2 Băng tải
Hình 3. 3 Băng tải
Khối lượng tải 500g
Chiều dài băng tải 600mm
Tốc độ tối đa 120mm/s
Gia tốc tối đa 1100𝑚𝑚/𝑠2
Khối lượng 4.2kg
Kích thước 700mm x 215mm x 60mm
33
Khoa ĐT CLC – ĐHSPKT TP.HCM
3.3.3 Cánh tay Dobot Magician
Hình 3. 4 Quy cách thiết kế Dobot Magician
Dobot Magician là một cánh tay Robot đa chức năng với 4 bậc tự do (Base, Rear Arm, Fore Arm, End-effector) mô tả như hình 3.4, được phát triển để phục vụ trong môi trường giáo dục, hỗ trợ cho việc giảng dạy thực tế hơn. Nó có thể được lập trình trên nhiều dạng ngôn ngữ khác nhau (Java, C#, Python, Qt, VB, blockly graphic,…) hay phục vụ trong hệ thống nhúng kết hợp với STM32, Arduino, iOS, Android. Với nhiều cơ cấu chấp hành đa dạng, Dobot Magician có thể được tùy biến là máy in 3D, máy khắc laser, máy viết – vẽ chữ, máy gắp vật thể,… Ngoài ra, nó cũng được hỗ trợ phát triển bằng nhiều giao diện I/O khác nhau, điều này giúp cho khả năng sáng tạo của người dùng là không giới hạn.
34
Khoa ĐT CLC – ĐHSPKT TP.HCM Hệ tọa độ Đề-các: các tọa độ được xác định bởi trục đế.
Tọa độ gốc là tâm của 3 động cơ (Base, Rear Arm, Fore Arm).
Hướng của trục X vuông góc với đế về phía trước, hướng của trục Y vuông góc với đế về phía bên trái và hướng của trục Z là hướng thẳng đứng lên trên dựa vào quy tắc bàn tay phải.
Trục R là tâm của động cơ Servo so với tọa độ gốc của cánh tay Robot trong đó chiều dương của nó ngược chiều kim đồng hồ. Trục R chỉ tồn tại khi cơ cấu chấp hành là động cơ Servo được lắp đặt.
Hình 3. 6 Hệ tọa độ khớp xoay
Hệ tọa độ khớp xoay: các tọa độ được xác định bởi các khớp chuyển động. Nếu cơ cấu chấp hành không được lắp ráp vào hệ thống thì Dobot Magician chỉ chứa 3 khớp: J1, J2 và J3 (tất cả đều là các khớp xoay). Chiều dương của những khớp này ngược chiều kim đồng hồ.
Nếu động cơ Servo được lắp đặt ở cơ cấu chấp hành (Suction Cup Kit, Gripper Kit) thì lúc này Dobot Magician sẽ chứa 4 khớp: J1, J2, J3 và J4 (tất cả đều là các khớp xoay). Chiều dương của các khớp này ngược chiều kim đồng hồ.
35
Khoa ĐT CLC – ĐHSPKT TP.HCM
Hình 3. 7 Thông số kích thước Hình 3. 8 Tầm hoạt động (1)
Số bậc tự do 4
Khối lượng tải 500g
Tầm hoạt động 320mm
Độ lặp vị trí 0.2mm
Giao tiếp truyền thông USB/Wifi/Bluetooth
Nguồn cung cấp 100 - 240V, 50/60Hz
Nguồn đầu vào 12V/7A DC
Công suất tối đa 60W
Tầm nhiệt -100𝐶 ÷ 600𝐶
Khối lượng 3.4kg
Kích thước đế 158mm x 158mm
36
Khoa ĐT CLC – ĐHSPKT TP.HCM
Hình 3. 9 Tầm hoạt động (2) Hình 3. 10 Tầm hoạt động (3)
Trục Tầm hoạt động Tốc độ
Khớp xoay chân đế (Base) −900 ÷ 900 3200/𝑠 Khớp xoay tay đòn 1 (Rear Arm) 00 ÷ 850 3200/𝑠 Khớp xoay tay đòn 2 (Fore Arm) −100 ÷ 950 3200/𝑠 Khớp xoay cơ cấu chấp hành (Servo) 900 ÷ −900 4800/𝑠
Bảng 3. 4 Thông số các góc khớp
Phần mềm điều khiển DobotStudio, Repetier, GrblController3.6
SDK (Bộ phát triển phần mềm) Communication Protocool, Dobot Program Library
Giao tiếp Input/Output mở rộng 1. I/O x 10 (có thể cấu hình ngõ vào Analog hoặc ngõ ra PWM)
2. Nguồn điều khiển 12V x 4
3. Giao tiếp truyền thông (UART, Reset, Stop, 12V, 5V)
4. Stepper x 2
Bảng 3. 5 Ứng dụng
37
Khoa ĐT CLC – ĐHSPKT TP.HCM 3.3.4 Bộ bơm khí nén và đầu hút
Hình 3. 11 Bộ bơm khí nén và đầu hút
Phạm vi tác dụng của đầu hút 27.5mm
Loại điều khiển Khí nén
Lực tác dụng 8N
Nguồn cung cấp cho bộ hút 12V
38
Khoa ĐT CLC – ĐHSPKT TP.HCM
3.4 Sơ đồ kết nối phần cứng
Các thiết bị phần cứng được lắp ráp là dạng Module đi cùng với nhau do khoa Điện – Điện tử cung cấp nên nhóm chỉ có nhiệm vụ kết nối chúng lại thành một hệ thống hoàn chỉnh thông qua các giao thức có sẵn dựa trên sơ đồ kết nối phần cứng như trong hình 3.12. Tín hiệu từ Camera sẽ được nhận vào máy tính thông qua cổng kết nối USB. Tương tự, cánh tay Dobot Magician và máy tính cũng sẽ giao tiếp tín hiệu với nhau thông qua cổng USB. Từ các chân kết nối ở phần đế của cánh tay Robot, ta kết nối chúng đến các cơ cấu chấp hành tương ứng dựa trên tài liệu hướng dẫn của nhà sản xuất được mô tả như trong hình 3.13 và hình 3.14
Hình 3. 12 Sơ đồ kết nối phần cứng
Hình 3. 13 Các giao thức kết nối ở chân đế của Dobot Magician
- GP1: điều khiển bơm khí, cảm biến màu sắc, cảm biến hồng ngoại - GP2: tương tự như GP1, các chức năng do người dùng tự định nghĩa - Stepper1: điều khiển động cơ băng tải, động cơ đùn nhựa (chế độ in 3D)
- Stepper2: tương tự như Stepper1, các chức năng do người dùng tự định nghĩa
- SW1: nguồn cấp cho bơm khí, nguồn ra 12V
- SW2: nguồn ra 12V
- USB: giao thức kết nối với máy tính
- Reset: reset lại hệ thống, khi reset đèn báo sẽ chuyển sang màu vàng, sau 5 giây nếu đèn chuyển sang màu xanh lá thì cánh tay đã được reset thành công.
39
Khoa ĐT CLC – ĐHSPKT TP.HCM
- Key: nếu bấm nhanh sẽ chạy chương trình ngoại tuyến, nếu bấm giữ trong 2 giây
Robot sẽ tiến hành lấy vị trí Home
- Communication Interface: giao tiếp UART, kết nối Bluetooth, Wifi
- Power: nguồn cấp đầu vào
Hình 3. 14 Các giao thức kết nối trên cánh tay
- GP3: điều khiển tín hiệu động cơ Servo ở cơ cấu chấp hành cuối
- GP4: điều khiểntín hiệu tự động cân bằng
- GP5: điều khiểntín hiệu đầu laser
- SW3: điều khiển tín hiệu đầu nung nhựa (chế độ in 3D)
- SW4: quạt gió (chế độ in 3D), nguồn cấp đầu laser
40
Khoa ĐT CLC – ĐHSPKT TP.HCM
CHƯƠNG 4. THI CÔNG HỆ THỐNG 4.1 Lắp ráp phần cứng
Hình 4. 1 Lắp đặt Camera Hình 4. 2 Các chân kết nối ở đế Robot
Hình 4. 3 Lắp đặt đầu hút Hình 4. 4 Kết nối dây tín hiệu cho bộ hút
41
Khoa ĐT CLC – ĐHSPKT TP.HCM
4.2 Lập trình điều khiển
4.2.1 Thuật toán xử lý ảnh
Hình 4. 7 Thuật toán xử lý ảnh
Dựa vào thuật toán đã đề ra, ta thiết lập nên hai luồng xử lý cho hệ thống. Luồng 1 xử lý ảnh bao gồm các thuật toán nhận diện biên Canny; lấy đường thẳng HoughLine; nhận diện vật thể hình vuông; nhận diện vị trí & hướng vật thể trên băng chuyền; và phân biệt màu sắc vật thể. Luồng 2 điều khiển cánh tay Robot gắp thả vật thể vào kho chứa.
Ở luồng điều khiển 1, ảnh màu nhận được từ Camera sẽ được truyền vào hàm Detector, hàm này sẽ phát hiện vật thể theo từng khung ảnh, xử lý tín hiệu và trả ra một danh sách các vật thể hình vuông mà nó phát hiện được gọi là List of rects (danh sách các hình vuông) với cấu trúc dạng [rect1,
42
Khoa ĐT CLC – ĐHSPKT TP.HCM
Với từng thành phần con, cấu trúc sẽ có dạng rect = [[x, y], hướng, màu], trong đó: [x, y] (theo pixel) là tọa độ khối vật thể trên ảnh được lưu theo dạng danh sách. Hướng là góc của vật so với trục Ox do ta quy ước, tính theo đơn vị độ, giới hạn trong khoảng (−900, 900). Như trong hình 4.9, ta có thể thấy vật thể hợp với trục Ox góc 0 độ, trong hình 4.10 vật thể hợp với trục Ox góc θ độ.
Hình 4. 9 Vật thể lệch góc 0 độ Hình 4. 10 Vật thể lệch góc θ độ
Màu được xác định theo quy tắc Red = 0, Green = 1, Blue = 2, Yellow = 3 Sau khi có được danh sách các hình vuông, ta biết được hệ tọa độ các vật thể trong ảnh. Từ đây, sẽ trả ngược kết quả về hàm Main để tiếp tục xử lý luồng điều khiển hai. Ở luồng điều khiển thứ hai, ngõ vào là danh sách các hình vuông được lấy từ luồng điều khiển thứ nhất, hàm Main sẽ lấy từng phần tử của danh sách này tức rect1, rect2,… để điều khiển vị trí cánh tay Robot. Tuy nhiên, để làm được điều này ta cần phải quay trở lại hàm Detector, hàm này sẽ phát hiện hình vuông theo từng khung hình. Giả sử trong một giây ta chạy được một khung hình, sau khung hình thứ nhất camera thu được [rect1, rect2], sau khung hình thứ hai camera thu được [rect3, rect4].
Hình 4. 11 Vị trí vật thể trong hai khung hình
Trên thực tế, ta có thể thấy hình vuông 1 và hình vuông 3 cùng là một hình vuông, hình vuông 2 và hình vuông 4 cùng là một hình vuông khi băng chuyền hoạt động. Tuy nhiên với máy móc, chúng lại hiểu hai hình vuông ở hai khung hình là khác nhau, vì vậy ta cần phải gom chúng lại thành một. Dựa vào hình 4.11, có thể thấy X1 < X3,
0 0
43
Khoa ĐT CLC – ĐHSPKT TP.HCM
lý do là vì X1 ở gần gốc tọa độ 0 hơn. Ta thiết lập giá trị Δ = 10 pixel là giới hạn nhỏ nhất giữa hai hình vuông, giá trị Δ này sẽ phụ thuộc vào tốc độ của băng chuyền và tốc độ lấy ảnh của Camera, từ đây ta có được điều kiện ràng buộc là: X3 – X1 ≤ Δ. Nếu điều kiện này thỏa mãn, ta kết luận được hình vuông 3 và hình vuông 4 trong khung hình thứ hai chính là hình vuông 1 và hình vuông 2 trong khung hình thứ nhất, ngược lại nếu điều kiện không thỏa thì chúng không phải cùng là một hình vuông. Sau khi xác định được các hình vuông trong từng khung hình là cùng một hình, ta lưu chúng vào một danh sách các vật thể List of Objects = [object1, object2,…]. Các vật thể (object) con có cấu trúc tương tự như hình vuông (rect) con. Ta có: object = [[x,y], hướng, màu], trong đó:
[x, y] (theo pixel) là tọa độ của vật thể trên ảnh được lưu theo dạng danh sách. Hướng là góc của vật thể so với trục Ox, được xác định theo đơn vị là độ, giới hạn trong khoảng (−900, 900).
Màu sắc xác định theo quy tắc Red = 0, Green = 1, Blue = 2, Yellow = 3. Để Robot xác định được đúng vị trí vật thể trên băng chuyền, ta cần phải chuyển đổi hệ tọa độ của vật trên ảnh sang hệ tọa độ của Robot với tỷ lệ đo được trên thực tế là 25mm tương ứng 30 pixel (25mm là độ dài cạnh vật thể). Sau khi quy đổi, ta có được một danh sách các vật thể đã được xác định [vật thể gần Robot nhất, vật thể gần Robot thứ hai, vật thể gần Robot thứ ba,...].
Ngoài ra, ta cần phải xác định thêm khoảng cách từ tâm Camera đến tâm của Robot (hình chiếu của chúng trên băng chuyền) và vận tốc băng chuyền (cấp xung vào để tìm được tốc độ động cơ). Khi đã có đầy đủ những dữ kiện, ta sẽ tính được chính xác thời gian vật đi từ hình chiếu tâm Camera đến hình chiếu tâm Robot trên băng chuyền, lúc đó băng chuyền sẽ dừng lại và Robot sẽ gắp vật thể xếp vào kho. Gắp đến đâu ta lần lượt xóa các biến vật thể đã xác định đến đó theo thứ tự vật thể gần Robot nhất, vật thể gần Robot thứ hai, vật thể gần Robot thứ ba,… liên tục như vậy cho đến khi kho được chứa đầy.
Cuối cùng, ta thiết lập một cấu trúc lưu vào biến “kích cỡ của kho” là một danh sách gồm ba phần tử size = [size x, size y, size z] tương ứng [1, 3, 4], với bốn màu kích thước sẽ là [4, 3, 4] (bốn hàng tương ứng với bốn màu, ba cột tương ứng mỗi màu sẽ có ba vật thể và mỗi màu trên mỗi cột sẽ xếp lên bốn vật thể).
Giả sử, cánh tay Robot đã xếp một vật thể vào vị trí đầu tiên, làm sao để nó biết được vật thể tiếp theo sẽ được xếp vào vị trí nào? Giải quyết điều này, ta tiếp tục tạo ra một biến để lưu được vị trí trống của từng màu có cấu trúc [x, y, z] với giá trị x