1. Trang chủ
  2. » Luận Văn - Báo Cáo

Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh

72 198 1

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Điều Khiển Cánh Tay Robot Phân Loại Sản Phẩm Theo Màu Sắc Dùng Xử Lý Ảnh
Tác giả Phan Văn Dũng
Người hướng dẫn ThS. Nguyễn Ngọc Anh Tuấn
Trường học Trường Đại Học Công Nghiệp Thành Phố Hồ Chí Minh
Chuyên ngành Công Nghệ Điện
Thể loại Đồ Án Tốt Nghiệp
Năm xuất bản 2018
Thành phố Thành Phố Hồ Chí Minh
Định dạng
Số trang 72
Dung lượng 1,41 MB

Cấu trúc

  • 1.1 Tính cấp thiết của đề tài (13)
  • 1.2 Mục đích nghiên cứu (13)
  • 1.3 Đối tƣợng nghiên cứu và phạm vi nghiên cứu của đề tài (13)
  • 1.4 Phương pháp nghiên cứu (13)
  • Chương 2: CƠ SỞ LÝ THUYẾT XỬ LÝ ẢNH (14)
    • 2.1 Giới thiệu về xử lý ảnh (14)
    • 2.2 Hệ thống xử lý ảnh (14)
      • 2.2.1 Phần thu nhận ảnh (Image Acquisition) (15)
      • 2.2.2 Phân tích ảnh (15)
      • 2.2.3 Hệ quyết định (15)
      • 2.2.4 Lưu trữ ảnh (15)
    • 2.3 Những vấn đề cơ bản trong hệ thống xử lí ảnh (19)
      • 2.3.1 Ảnh và điểm ảnh (19)
      • 2.3.2 Độ phân giải của ảnh (19)
      • 2.3.3 Mức xám của ảnh (20)
      • 2.3.4 Quan hệ giữa các điểm ảnh (20)
      • 2.3.5 Hệ màu (21)
    • 2.4 Xử lý ảnh trong C# (25)
      • 2.4.1 Một số kỹ thuật trợ giúp xử lý ảnh (26)
      • 2.4.2 Biên và các phương pháp phát hiện biên (26)
      • 2.4.3 Biến đổi Hough tìm hình chữ nhật (27)
  • Chương 3 GIỚI THIỆU CHUNG VỀ ROBOT (30)
    • 3.1 Giới thiệu về robot công nghiệp (30)
      • 3.1.1 Quá trình phát triển của robot công nghiệp (30)
      • 3.1.2. Ứng dụng của robot công nghiệp trong quá trình sản xuất (31)
      • 3.1.3 Cấu trúc cơ bản của Robot công nghiệp (31)
        • 3.1.3.1 Kết cấu chung (31)
      • 3.1.4 Phân loại robot (36)
        • 3.1.4.1 Phân loại theo kết cấu (36)
        • 3.1.4.2 Phân loại theo điều khiển (36)
        • 3.1.4.3 Phân loại theo hệ thống truyền động (37)
        • 3.1.4.4 Phân loại theo ứng dụng (37)
      • 3.2.1 Yêu cầu về hoạt động (38)
        • 3.2.1.1. Phần cơ khí (38)
        • 3.2.1.2. Phần động lực (39)
        • 3.2.1.3. Chức năng hoạt động của robot (39)
      • 3.2.2 Phân tích hoạt động (39)
      • 3.2.3 Thiết kế về kiểu dáng (40)
      • 3.2.4. Cơ cấu chấp hành (42)
        • 3.2.4.1 Giới thiệu động cơ RC Servo (42)
        • 3.2.4.2 Động cơ sử dụng trong mô hình và thông số (43)
      • 3.2.5 Vật liệu làm mô hình (46)
      • 3.2.6 Phần gia công lắp ráp mô hình (47)
  • Chương 4 ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN CÁNH TAY ROBOT (48)
    • 4.1 Giới thiệu về ngôn ngữ C# (48)
      • 4.1.1 Ngôn ngữ lập trình C# là gì? (48)
      • 4.1.2 Các đặc trƣng của C# (48)
    • 4.2 Giới thiệu về SharpDevelop (49)
    • 4.3 Thiết kế mạch điều khiển (51)
      • 4.3.1 Bộ điều khiển (51)
        • 4.3.1.1 Giới thiệu về Aduino (51)
        • 4.3.1.2 Giới thiệu bo mạch Arduino Uno R3 SMD (51)
        • 4.3.1.3 Mạch Rơ le (54)
      • 4.3.2 Nguồn sử dụng trong mô hình (55)
    • 4.4 Một số phép biển đổi trong xử lý ảnh (0)
    • 4.5 Lưu đồ giải thuật của chương trình (58)
    • 4.6 Code chương trình điều khiển (60)
  • Chương 5: KẾT LUẬN HƯỚNG PHÁT TRIỂN ĐỀ TÀI (69)
    • 5.1. Kết quả (69)
    • 5.2 Ƣu điểm (0)
    • 5.3 Các hạn chế của cánh tay Robot (69)
    • 5.4 Hướng phát triển đề tài (69)
    • 5.5 Ý nghĩ của ứng dụng xử lý ảnh để điều khiển robot phân loại sản phẩm (69)
    • 5.6 Kiến nghị, đề xuất (70)
  • TÀI LIỆU THAM KHẢO (71)
    • Hinh 3.4 Tay máy kiểu tọa độ trụ (0)
    • Hinh 3.5 Tay máy kiểu tọa độ cầu (0)
    • Hinh 3.6 Hệ Scada (0)

Nội dung

TRƢỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH KHOA CÔNG NGHỆ ĐIỆN ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ĐIỀU KHIỂN CÁNH TAY ROBOT PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC DÙNG XỬ LÝ ẢNH PHAN VĂN DŨNG THÀNH PHỐ HỒ CHÍ MINH, NĂM 2018 TRƢỜNG ĐẠI HỌC CÔNG NGHIỆP THÀNH PHỐ HỒ CHÍ MINH KHOA CÔNG NGHỆ ĐIỆN ĐỒ ÁN TỐT NGHIỆP ĐẠI HỌC ĐIỀU KHIỂN CÁNH TAY ROBOT PHÂN LOẠI SẢN PHẨM THEO MÀU SẮC DÙNG XỬ LÝ ẢNH GVHD ThS NGUYỄN NGỌC ANH TUẤN SVTH PHAN VĂN DŨNG LỚP DHDKTD10B MSSV 14038601 THÀNH PHỐ HỒ CHÍ MINH, NĂM 2018 Đồ án tốt n.

Tính cấp thiết của đề tài

Để thúc đẩy sự phát triển nhanh chóng của nền kinh tế Việt Nam, việc áp dụng khoa học và công nghệ vào sản xuất và đời sống là vô cùng cần thiết Do đó, nâng cao trình độ hiểu biết và kỹ năng cho sinh viên là vấn đề quan trọng hàng đầu Sinh viên cần nắm vững các lĩnh vực như tự động hóa và thị giác máy tính, đặc biệt là xử lý ảnh, để đáp ứng yêu cầu của thị trường lao động.

Việc tiếp cận và xử lý ảnh tại Việt Nam hiện vẫn còn hạn chế và chưa được phổ biến rộng rãi Nhận thấy điều này, tôi đã quyết định nghiên cứu và tìm hiểu về vấn đề này với hy vọng góp phần thúc đẩy ứng dụng xử lý ảnh trở nên phổ biến hơn trong nước.

“Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh”

Là một đề tài tôi muốn nghiên cứu nhằm ứng dụng xử lý ảnh vào điều khiển robot.

Mục đích nghiên cứu

Tìm hiểu về ngôn ngữ C# để xử lý ảnh áp dụng cho việc nhận dạng màu sắc cho cánh tay robot

+ Tìm hiểu và ứng dụng công nghệ xử lý ảnh

+ Ứng dụng xử lý ảnh vào điều khiển cánh tay robot

Đối tƣợng nghiên cứu và phạm vi nghiên cứu của đề tài

+ Nghiên cứu ứng dụng xử lý ảnh cơ bản để nhận dạng màu sắc

+ Nghiên cứu ngôn ngữ C# để xử lý ảnh

+ Lập trình Arduino Uno R3 để điều khiển động cơ.

Phương pháp nghiên cứu

+Tìm hiểu và học hỏi các tài liệu liên quan đến đề tài

+ Nghiên cứu sử dụng kỹ thuật lập trình xử lý ảnh bằng ngôn ngữ C#

+ Học gia công cơ khí để làm mô hình

+ Kiểm tra và đánh giá kết quả đạt được

CƠ SỞ LÝ THUYẾT XỬ LÝ ẢNH

Giới thiệu về xử lý ảnh

Nhận dạng và xử lý ảnh hiện đang là một lĩnh vực được quan tâm đặc biệt và đã trở thành môn học chuyên ngành cho sinh viên ngành công nghệ thông tin, bao gồm cả kỹ sư và cử nhân Lĩnh vực này có nhiều ứng dụng thực tiễn quan trọng, đặc biệt trong các hệ thống tin địa lý (GIS – Geographic Information System), quân sự và y học.

Cụ thể, xử lý ảnh số có rất nhiều ứng dụng như:

- Làm nổi các ảnh trong y học

- Khôi phục lại ảnh do tác động của khí quyển trong thiên văn học

- Chuyển tải, nén ảnh khi truyền đi xa hoặc lưu trữ

- Sản xuất và kiểm tra chất lượng

- Các phương tiện đi lại tự trị

- Công cụ hướng dẫn cho người mù

- An ninh và giám sát

- Nhận dạng đối tượng, nhận dạng mặt

- Sản xuất, hiệu chỉnh Video

Hệ thống xử lý ảnh

Hệ thống xử lý ảnh bao gồm những thành phần sau:

Hình 2.1 hệ thống xử lý ảnh

Hệ thống xử lý ảnh bao gồm các bước quan trọng: thu nhận ảnh, số hóa ảnh, phân tích ảnh và đưa ra quyết định Quyết định cuối cùng sẽ tùy thuộc vào mục đích và yêu cầu của ứng dụng cụ thể liên quan đến ảnh.

2.2.1 Phần thu nhận ảnh (Image Acquisition) Ảnh có thể nhận qua camera màu hoặc đen trắng Thường ảnh nhận qua camera là ảnh tương tự (loại camera ống chuẩn CCIR với tần số 1/25, mỗi ảnh 25 dòng), cũng có loại camera đã số hoá (như loại CCD – Change Coupled Device) là loại photodiot tạo cường độ sáng tại mỗi điểm ảnh

Camera thường sử dụng là loại quét dòng, cho ra hình ảnh dạng hai chiều Chất lượng hình ảnh thu được phụ thuộc vào thiết bị ghi hình cũng như điều kiện môi trường như ánh sáng và không gian xung quanh.

2.2.2 Phân tích ảnh Ở giai đoạn này ảnh được xử lý theo nhiều công đoạn nhỏ như: cải thiện ảnh, khôi phục ảnh để làm nổi bật một số đặc tính chính của ảnh hay làm ảnh gần với trạng thái gốc

Tùy theo mục đích của ứng dụng sẽ là giai đoạn nhận dạng hay các quyết định khác

2.2.4 Lưu trữ ảnh Ảnh trên máy tính là kết quả thu nhận theo các phương pháp số hóa được nhúng trong các thiết bị kỹ thuật khác nhau Quá trình lưu ảnh nhằm 2 mục đích:

+ Giảm thời gian xử lý

Lưu trữ thông tin trong bộ nhớ ảnh hưởng lớn đến việc hiển thị, in ấn và xử lý ảnh, với ảnh được xem như tập hợp các điểm ảnh Sử dụng nhiều điểm ảnh hơn sẽ tạo ra bức ảnh đẹp, mịn và chi tiết hơn, được gọi là độ phân giải Để lưu trữ ảnh trên máy tính, có một số định dạng phổ biến như BMP, IMG, PCX và TIFF.

Trong đồ họa máy vi tính, định dạng tập tin ảnh Windows bitmap (BMP) là một trong những định dạng phổ biến nhất Các tập tin BMP thường có đuôi mở rộng là BMP hoặc DIB (Device Independent Bitmap).

Các thuộc tính chính của tập tin ảnh BMP bao gồm số bit trên mỗi điểm ảnh, được ký hiệu là n Một ảnh BMP n-bit có thể hiển thị 2^n màu sắc Giá trị n càng cao, ảnh sẽ có nhiều màu sắc và độ rõ nét càng cao Các giá trị n tiêu biểu bao gồm 1 (ảnh đen trắng), 4 (ảnh 16 màu), 8 (ảnh 256 màu) và 16.

65536 màu) và 24 (ảnh 16 triệu màu) Ảnh BMP 24-bit có chất lượng hình ảnh trung thực nhất

Chiều cao của ảnh (height), cho bởi điểm ảnh (pixel)

Chiều rộng của ảnh (width), cho bởi điểm ảnh

Cấu trúc tập tin ảnh BMP bao gồm 4 phần

Bitmap Header (14 bytes): giúp nhận dạng tập tin bitmap

Bitmap Information (40 bytes): lưu một số thông tin chi tiết giúp hiển thị ảnh

Định dạng BMP (Bitmap) lưu trữ dữ liệu hình ảnh mà không sử dụng bất kỳ thuật toán nén nào, dẫn đến kích thước tệp lớn hơn so với các định dạng nén như GIF, JPEG hay PNG Mỗi điểm ảnh trong tệp BMP được ghi trực tiếp và có thể được mô tả bằng một hoặc nhiều byte tùy thuộc vào giá trị màu sắc Mặc dù BMP được hỗ trợ rộng rãi bởi các phần mềm đồ họa trên Windows và MS-DOS, kích thước tệp lớn của nó khiến định dạng này không phù hợp cho việc trao đổi hình ảnh qua Internet Do đó, các trang web thường ưu tiên sử dụng định dạng nén như GIF, JPEG hay PNG để giảm kích thước tệp và tối ưu hóa tốc độ truyền dữ liệu.

+ Định dạng ảnh IMG: Ảnh IMG là ảnh đen trắng, phần đầu của ảnh IMG có 16 byte chứa các thông tin:

6 byte đầu: dùng để đánh dấu định dạng ảnh Giá trị của 6 byte này viết dưới dạng Hexa: 0x00010x0008 0x0001

Hai byte tiếp theo chứa độ dài của mẫu tin, thể hiện độ dài của chuỗi byte liên tiếp sẽ được lặp lại nhiều lần Số lần lặp lại này được lưu trữ trong một byte đếm, cho phép nhiều chuỗi giống nhau được lưu trong cùng một byte.

4 byte tiếp: mô tả kích cỡ pixel

2 byte tiếp: số pixel trên một dòng ảnh

Hai byte cuối của ảnh IMG cho biết số dòng ảnh có trong tệp Ảnh được nén theo từng dòng, với mỗi dòng chứa các gói dữ liệu Những dòng giống nhau sẽ được nén thành một gói duy nhất Có bốn loại gói khác nhau trong quá trình nén này.

Loại 1: Gói các dòng giống nhau Quy cách gói tin này như sau: 0x00 0x00 0xFF Count Ba byte đầu tiên cho biết số các dãy giống nhau, byte cuối cho biết số các dòng giống nhau

Loại 2: Gói các dãy giống nhau Quy cách gói tin này như sau: 0x00 Count Byte thứ hai cho biết số các dãy giống nhau được nén trong gói Độ dài của dãy ghi ở đầu tệp

Loại 3: Dãy các Pixel không giống nhau, không lặp lại và không nén được Quy cách gói tin này như sau: 0x80 Count Byte thứ hai cho biết độ dài dãy các pixel không giống nhau không nén được

Loại 4: Dãy các Pixel giống nhau Tuỳ theo các bít cao của byte đầu tiên được bật hay tắt Nếu bít cao đƣợc bật (giá trị 1) thì đây là gói nén các byte chỉ gồm bít 0, số các byte được nén được tính bởi 7 bít thấp còn lại Nếu bớt cao tắt (giá trị 0) thì đây là gói nén các byte gồm toán bít 1 Số các byte được nén được tính bởi 7 bit còn lại

Những vấn đề cơ bản trong hệ thống xử lí ảnh

Ảnh tự nhiên là ảnh liên tục về không gian và độ sáng, nhưng để xử lý bằng máy tính, ảnh cần được số hoá Số hoá ảnh là quá trình biến đổi gần đúng ảnh liên tục thành tập hợp các điểm ảnh (Pixel) tương ứng với vị trí và độ sáng Khoảng cách giữa các pixel được thiết lập sao cho mắt người không phân biệt được ranh giới giữa chúng Mỗi pixel tương ứng với một cặp tọa độ (x, y) và được định nghĩa là phần tử của ảnh số tại tọa độ đó với độ xám hoặc màu nhất định Kích thước và khoảng cách giữa các pixel được chọn để mắt người cảm nhận sự liên tục về không gian và mức xám (hoặc màu) của ảnh số gần giống với ảnh thật Mỗi phần tử trong ma trận ảnh được gọi là phần tử ảnh.

2.3.2 Độ phân giải của ảnh Độ phân giải (Resolution) của ảnh là mật độ điểm ảnh được ấn định trên một ảnh số được hiển thị Theo định nghĩa, khoảng cách giữa các điểm ảnh phải được chọn sao cho mắt người vẫn thấy được sự liên tục của ảnh Việc lựa chọn khoảng cách thích hợp tạo nên một mật độ phân bổ, đó chính là độ phân giải và được phân bố theo trục x và y trong không gian hai chiều

Độ phân giải của màn hình CGA (Color Graphic Adaptor) là 320 điểm theo chiều ngang và 200 điểm theo chiều dọc (320*200) Điều này cho thấy rằng, trên cùng một màn hình CGA 12”, hình ảnh sẽ mịn hơn so với các màn hình CGA khác.

17” độ phân giải 320*200 Lý do: cùng một mật độ (độ phân giải) nhưng diện tích màn hình rộng hơn thì độ mịn (liên tục của các điểm) kém hơn

Một điểm ảnh (pixel) được xác định bởi hai đặc trưng chính: vị trí (x, y) và độ xám Dưới đây là một số khái niệm và thuật ngữ phổ biến trong lĩnh vực xử lý ảnh.

Mức xám của điểm ảnh là cường độ sáng của nó được gán bằng giá trị số tại điểm đó

Các thang giá trị mức xám thông thường bao gồm 16, 32, 64, 128 và 256, trong đó mức 256 là phổ biến nhất do 1 byte (8 bit) có thể biểu diễn 256 mức xám từ 0 đến 255 Ảnh đen trắng chỉ có hai màu đen và trắng, với các mức xám khác nhau ở từng điểm ảnh Ảnh nhị phân chỉ sử dụng 1 bit để phân biệt 2 mức đen trắng, nghĩa là mỗi điểm ảnh chỉ có thể là 0 hoặc 1 Trong khi đó, ảnh màu được tạo ra từ ba màu cơ bản (Đỏ, Xanh lục, Xanh dương) và thường dùng 3 byte để mô tả mức màu, cho phép tạo ra hàng triệu màu sắc khác nhau.

2.3.4 Quan hệ giữa các điểm ảnh

Một ảnh số có thể được biểu diễn bằng hàm f(x, y), trong đó S là tập con các điểm ảnh Các cặp điểm ảnh có mối quan hệ với nhau được ký hiệu là p và q Dưới đây là một số khái niệm liên quan.

- Các lân cận của điểm ảnh (Image Neighbors)

Giả sử điểm ảnh p nằm tại tọa độ (x, y), nó có bốn điểm lân cận gần nhất theo chiều đứng và ngang, tương ứng với bốn hướng chính: Đông, Tây, Nam và Bắc.

*( ) ( ) ( ) ( )+ ( ) trong đó: số 1 là giá trị logic; ( )tập 4 điểm lân cận của p

Hình 2.2: Lân cận các điểm ảnh của tọa độ (x,y)

+ Các lân cận chéo: Các điểm lân cận chéo ( ) (Có thể coi lân cận chéo là 4 hướng: Đông-Nam, Đông-Bắc, Tây-Nam, Tây-Bắc)

+ Tập kết hợp: ( ) ( ) ( ) là tập hợp 8 lân cận của điểm ảnh p Nếu( )nằm ở biên (mép) ảnh; một sốđiểm sẽ nằm ngoài ảnh

- Các mối liên kết điểm ảnh

Các mối liên kết đóng vai trò quan trọng trong việc xác định giới hạn của đối tượng vật thể hoặc khu vực trong một bức ảnh Mỗi liên kết được đặc trưng bởi sự liền kề giữa các điểm và mức xám của chúng.

Giả sử V là tập các giá trị mức xám Một ảnh có các giá trị cường độ sáng từ thang mức xám từ 32 đến 64 được mô tả như sau:

RGB là không gian màu phổ biến trong đồ họa máy tính và thiết bị kỹ thuật số, dựa trên sự kết hợp của ba màu cơ bản: đỏ (R), xanh lục (G) và xanh lơ (B) để tạo ra mọi màu sắc khác.

Hình 2.3.Không gian màu RGB

Ví dụ: đỏ + lục = vàng

Nếu như một ảnh số được mã hóa bằng 24bit, nghĩa là 8bit cho kênh R, 8bit cho kênh

Mỗi kênh màu trong hệ RGB (đỏ, xanh lá, xanh dương) sử dụng 8 bit, cho phép nhận giá trị từ 0 đến 255 Sự kết hợp khác nhau của các giá trị này tạo ra nhiều màu sắc độc đáo, tổng cộng lên đến 1.66 triệu màu Chẳng hạn, màu đen được biểu diễn bằng giá trị (0, 0, 0) cho các kênh R, G, B, trong khi màu trắng có giá trị (255, 255, 255).

Màu sắc có thể được mã hóa bằng giá trị RGB, ví dụ như màu trắng (255, 255, 255), màu vàng (255, 255, 0) và màu tím đậm (64, 0, 128) Khi sử dụng 16 bit để mã hóa một kênh màu, tổng dải màu có thể lên tới 196,608 màu sắc cho cả ba kênh màu, tương ứng với 48 bit cho toàn bộ.

CMYK là không gian màu phổ biến trong ngành in ấn, sử dụng bốn màu cơ bản để pha trộn mực in Ba màu chính là C (Cyan - xanh lơ), M (Magenta - hồng xẫm) và Y (Yellow - vàng) được dùng để tạo ra các màu sắc khác nhau Sự kết hợp giữa hồng xẫm và vàng tạo ra màu đỏ, trong khi hồng xẫm và xanh lơ cho màu xanh lam Mặc dù ba màu này có thể tạo ra màu đen, nhưng màu đen không phải là đen tuyệt đối và thường có độ tương phản lớn Để tiết kiệm mực, ngành in thêm màu đen (K) vào hệ màu, với K đại diện cho màu đen do chữ B đã được dùng cho màu xanh lam.

Hệ màu CMYK hoạt động trên nguyên tắc loại bỏ dần màu trắng từ nền giấy trắng thông qua việc in các màu Cyan (C), Magenta (M), Yellow (Y) theo tỷ lệ khác nhau, từ đó tạo ra màu sắc mong muốn Để in màu đen, thay vì kết hợp cả ba màu, người ta sử dụng mực đen Điều này khác biệt với hệ RGB, nơi các màu được tạo ra bằng cách kết hợp các thành phần màu.

Hình 2.4.Không gian màu CYMK

HSV và HSL là hai không gian màu phổ biến trong chỉnh sửa ảnh, phân tích ảnh và thị giác máy tính Chúng dựa vào ba thông số chính để mô tả màu sắc: H (Hue) đại diện cho màu sắc, S (Saturation) thể hiện độ đậm đặc và sự bảo hòa, và V (Value) chỉ cường độ sáng Không gian màu này thường được hình dung dưới dạng hình trụ hoặc hình nón.

Hình 2.5 Không gian màu HSV

Trường biểu diễn màu sắc (Hue) được thể hiện qua vòng tròn từ 0 đến 360 độ, bắt đầu từ màu đỏ (red primary) và kéo dài đến màu xanh lục (green primary) trong khoảng 0-120 độ Tiếp theo, từ 120 đến 240 độ, màu sắc chuyển từ xanh lục sang xanh lơ.

Hình 2.6 hình tròn biểu diễn màu sắc (Hue)

Xử lý ảnh trong C#

Xử lý ảnh thường được lập trình bằng các ngôn ngữ thuộc họ C, vì chúng hỗ trợ con trỏ (pointer) cho phép truy cập trực tiếp vào bộ nhớ Điều này giúp tăng tốc độ xử lý ảnh so với việc truy cập gián tiếp.

- Mục đích của xử lý ảnh là:

+ Tăng cường, phục hồi, nâng cao chất lượng ảnh

- Các phép xử lý thường áp dụng trên ảnh nhị phân, hoặc ảnh mức xám

- Có 2 miền xử lý chính:

- Có 3 loại xử lý chính:

+ Xử lý trên điểm ảnh

+ Xử lý toàn cục (thường được xử lý trên miền tần số)

- Những kiến thức cơ bản liên quan:

+ Cơ bản về ảnh số

+ Cách biểu diễn ảnh số

+ Độ phân giải ảnh, màu

2.4.1 Một số kỹ thuật trợ giúp xử lý ảnh

Chất lượng hình ảnh kém có thể do nhiều nguyên nhân, bao gồm nhiễu điện từ từ máy thu và chất lượng bộ số hóa thấp Nhiễu ảnh số thể hiện sự dịch chuyển nhanh của tín hiệu trên một khoảng cách ngắn, thường liên quan đến các thành phần tần số cao trong ảnh Để xử lý nhiễu, ta có thể lọc các thành phần tần số cao, dựa vào tính dư thừa thông tin không gian, trong đó các pixel lân cận có thể chứa thông tin của ảnh gốc Tùy thuộc vào cách tổ hợp điểm ảnh với các điểm lân cận, có thể áp dụng kỹ thuật lọc tuyến tính hoặc phi tuyến Điểm ảnh bị ảnh hưởng bởi biến đổi là điểm nằm ở tâm của mặt nạ, và các kỹ thuật lọc này sẽ được trình bày chi tiết trong phần làm mịn ảnh.

2.4.2 Biên và các phương pháp phát hiện biên

Biên là yếu tố quan trọng trong việc trích xuất đặc điểm để hiểu rõ hơn về hình ảnh Đến nay, vẫn chưa có định nghĩa chính xác về biên, và các ứng dụng khác nhau thường sử dụng các độ đo khác nhau để xác định nó Một trong những phương pháp đo lường biên phổ biến là dựa vào sự thay đổi đột ngột trong cấp xám của hình ảnh.

Trong khung ảnh đen trắng, một điểm được gọi là điểm biên nếu nó là điểm đen và có ít nhất một điểm trắng bên cạnh Tập hợp các điểm biên tạo thành biên hoặc đường bao của đối tượng Dựa trên nguyên tắc này, hai phương pháp phát hiện biên cơ bản thường được sử dụng.

Phương pháp phát hiện biên trực tiếp dựa vào sự biến thiên mức xám của ảnh, sử dụng kỹ thuật lấy đạo hàm để làm nổi biên Đạo hàm bậc nhất cho phép áp dụng các kỹ thuật như Gradient, trong khi đạo hàm bậc hai sử dụng kỹ thuật Laplace Bên cạnh đó, còn có một số tiếp cận khác để phát hiện biên trong ảnh.

Phát hiện biên gián tiếp là quá trình xác định ranh giới giữa các vùng trong ảnh Kỹ thuật tìm biên và phân vùng ảnh là hai bài toán đối ngẫu, trong đó tìm biên hỗ trợ phân lớp đối tượng, và khi đã phân lớp xong, ảnh sẽ được phân vùng thành các đối tượng cụ thể, từ đó giúp phát hiện biên một cách hiệu quả.

Phương pháp phát hiện biên trực tiếp hiệu quả và ít bị ảnh hưởng bởi nhiễu, nhưng kém hiệu quả khi độ sáng biến thiên không đột ngột Ngược lại, phương pháp phát hiện biên gián tiếp mặc dù khó cài đặt nhưng lại hoạt động tốt trong những tình huống này Sự khác biệt chính giữa hai phương pháp là phương pháp gián tiếp cung cấp ảnh biên, trong khi phương pháp trực tiếp cho ra đường biên.

2.4.3 Biến đổi Hough tìm hình chữ nhật

Xét một hình chữ nhật với các đỉnh P1 = (x1, y1), P2 = (x2, y2), P3 = (x3, y3) và P4 = (x4, y4), trong đó hai cạnh P1P2 và P3P4 song song có chiều dài a, và hai cạnh P2P3 và P4P1 song song có chiều dài b Hệ tọa độ được đặt tại trung tâm của hình chữ nhật.

Hình 2.7 Hình chữ nhật có gốc tọa độ nằm ở giữa

Hough Transform (HT) là một phương pháp hiệu quả để phát hiện các hình dạng tùy ý, bao gồm cả hình chữ nhật Hình chữ nhật có năm thành phần chính: hai tọa độ trung tâm, chiều rộng, chiều cao và hướng, điều này yêu cầu bộ nhớ và khả năng tính toán cao.

Trong nghiên cứu về mô tả hình dạng trong không gian Hough, Rosenfeld và Weiss đã chỉ ra rằng một lồi đa giác được xác định duy nhất bởi các đỉnh của nó, cụ thể là các đỉnh tạo thành cạnh lồi Tuy nhiên, một thách thức khác là phát hiện hình chữ nhật trong hình ảnh có nhiều đối tượng Hình chữ nhật có các liên hệ hình học đặc trưng, cho phép việc phát hiện trực tiếp trong không gian Hough của hình chữ nhật.

Hình 2.8 Hình chữ nhật trong không gian Hough

Bốn đỉnh được dán nhãn là H 1 = (ρ 1 , θ 1 ), H 2 = (ρ 2 , θ 2 ), H 3 = (ρ 3 , θ 3 ) và

H 4 =(ρ 4 , θ 4 ), tương ứng với bốn cạnh của hình chữ nhật (P 2 P 3 , P 1 P 4 , P 3 P 4 và

P 1 P 2 , tương ứng) Có thể được nhận thấy bốn đỉnh đáp ứng cụ thể liên hệ hình học:

1 Xét theo cặp: cặp thứ nhất là các đỉnh H1 và H 2 , tại θ = α1, thứ hai là các đỉnh

2 Hai đỉnh thuộc cùng một cặp là đối xứng so với trục θ, nghĩa là ρ 1 + ρ 2 = 0 và ρ 3 + ρ 4 = 0

3 Hai cặp được phân cách bằng Δθ = 90 0 ở trên trục θ, nghĩa là | α 1 – α 0 | = 90 0

4 Chiều cao của hai đỉnh trong cùng một cặp là giống hệt nhau, và đại diện cho chiều dài của đoạn đường tương ứng, ví dụ, C (ρ 1 , θ 1 ) = C (ρ 2 , θ 2 ) = b và C (ρ 3 , θ 3 ) = C (ρ 4 , θ 4 ) = a

5 Khoảng cách theo chiều dọc (trục ρ) giữa đỉnh trong mỗi cặp được chính xác các cạnh của hình chữ nhật, tức là, ρ 1 – ρ 2 = a và ρ 3 – ρ 4 = b

Các mối liên hệ nêu trên có thể không chính xác nếu có sự xuất hiện của các cấu trúc khác trong hình ảnh, do cạnh có thể bị ảnh hưởng bởi nhiễu hoặc các công trình khác trong không gian Hough Đặc biệt, mối liên hệ 1, 2 và 3 sẽ trở nên mạnh mẽ hơn khi có sự hiện diện của các cấu trúc khác, và việc khám phá này rất quan trọng trong việc phát hiện hình chữ nhật trong hình ảnh.

Thuật toán tìm hình chữ nhật hoạt động bằng cách kiểm tra từng điểm ảnh (x, y) trong hình ảnh Đối với mỗi điểm, thuật toán sẽ tính toán Hough Transform (HT) của cạnh hình ảnh trong một khu vực xung quanh điểm đó, sau đó xác định các đỉnh liên quan của HT Cuối cùng, dựa vào các điều kiện đã được mô tả trước đó, thuật toán sẽ xác định xem có tồn tại một hình chữ nhật với tâm tại (x, y) hay không.

Hãy xem xét một điểm ảnh tại tọa độ (x 0 , y 0 ) và một khu vực lân cận xung quanh điểm này Khu vực này cần đủ lớn để bao gồm tất cả các cạnh của bất kỳ hình chữ nhật nào có thể được đặt tại (x 0 , y 0 ), nhưng cũng phải nhỏ nhất có thể để tránh việc bao gồm các cạnh từ các cấu trúc khác hoặc các cạnh liên quan đến nhiễu.

Khu vực tìm kiếm phù hợp được xác định bởi hai đường kính: Dmin và Dmax Dmin nên gần bằng kích thước nhỏ nhất của bất kỳ hình chữ nhật nào có thể xuất hiện, trong khi Dmax phải gần bằng đường chéo lớn nhất của các hình chữ nhật trong hình ảnh Việc lựa chọn các thông số này đảm bảo rằng tất cả các cạnh của hình chữ nhật sẽ nằm trong khu vực tìm kiếm, với trung tâm của khu vực phù hợp với trung tâm của hình chữ nhật.

GIỚI THIỆU CHUNG VỀ ROBOT

Giới thiệu về robot công nghiệp

3.1.1 Quá trình phát triển của robot công nghiệp

Thuật ngữ “Robor” lần đâu tiên xuất hiện vào năm 1922 trong tác phẩm

"Robot" trong tiếng Czech có nghĩa là "người làm tạp dịch" Trong tác phẩm "Rosum’s Universal Robot" của Karel Capek, nhân vật Romum và con trai ông đã chế tạo ra những cỗ máy giống con người nhằm phục vụ cho nhu cầu của con người.

Hơn 20 năm sau ước mơ viễn tưởng của Karel Capek đã bắt đầu thực hiện Ngay sau chiến tranh thế giới thứ 2, ở Mỹ đã xuất hiện những tay máy chép hình điều khiển từ xa, trong các thí nghiệm phóng xạ

Năm 1959, Devol và Engelner đã chế tạo Robot công nghiệ đầu tiên tại công ty Unimation

Tiếp theo Mỹ, các nước khác cũng bắt đầu sản xuất robot công nghiệp.Năm

1967 nhật bản mới nhập chiếc robot công nghiệp đầu tiên từ công ty AMF (American Machine and Foundry Company) của Mỹ

Kể từ những năm 70, nghiên cứu về việc cải thiện tính năng của robot đã tập trung vào việc lắp đặt các cảm biến ngoại tín hiệu nhằm nhận diện môi trường làm việc một cách hiệu quả hơn.

Năm 1967, tại trường đại học tổng hợp Stanford, một loại robot lắp ráp tự động đã được tạo ra, điều khiển bằng vi tính và sử dụng công nghệ xử lý thông tin từ các cảm biến lực và thị giác.

Năm 1976, General Motors đã phát triển thành công cánh tay robot sử dụng trên tàu Viking của NASA để thu thập mẫu đất trên sao Hỏa.

Ngày nay, ngành khoa học nghiên cứu robot đã phát triển thành một lĩnh vực rộng lớn, bao gồm các khía cạnh như cấu trúc cơ cấu động học, động lực học, lập trình quỹ đạo, cảm biến tín hiệu và điều khiển chuyển động.

3.1.2 Ứng dụng của robot công nghiệp trong quá trình sản xuất

Robot công nghiệp ngày càng được sử dụng phổ biến để thay thế sức lao động của con người, giúp cải thiện quy trình sản xuất trong các nhà máy và xí nghiệp Nhờ đó, các dây chuyền sản xuất được tối ưu hóa, nâng cao hiệu quả và tăng năng suất sản phẩm một cách đáng kể.

Mục tiêu của việc ứng dụng robot công nghiệp là nâng cao hiệu quả dây chuyền công nghệ, giảm chi phí, cải thiện chất lượng sản phẩm và tăng khả năng cạnh tranh, đồng thời cải thiện điều kiện làm việc Robot đóng vai trò quan trọng trong việc làm việc liên tục 24/7, dễ dàng chuyển đổi giữa các công việc, và có khả năng hoạt động trong môi trường khắc nghiệt như phóng xạ và nhiệt độ cao Nhờ đó, robot có thể thay thế con người trong những tình huống bất lợi hoặc thực hiện các nhiệm vụ phức tạp, giúp giảm thiểu mệt mỏi và sai sót.

Trong ngành cơ khí, robot được sử dụng nhiều trong hàn xì, cắt đột kim loại, lắp ráp vận chuyển phôi, sơn phun kim loại

Hiện nay, nhiều dây chuyền sản xuất tự động sử dụng máy CNC kết hợp với robot công nghiệp, đạt độ tự động hóa, linh hoạt và chính xác cao Các máy và robot trong hệ thống này được điều khiển bằng cùng một phần mềm, tối ưu hóa quy trình sản xuất.

Robot có khả năng làm việc hiệu quả hơn con người trong nhiều điều kiện, giúp tự động hóa quy trình, nâng cao năng suất lao động và giảm bớt sức lao động cho con người, đồng thời loại bỏ những công việc nặng nhọc và độc hại Tuy nhiên, robot vẫn có những nhược điểm, như thiếu linh hoạt trong dây chuyền tự động; nếu một robot gặp sự cố, nó có thể làm gián đoạn toàn bộ quy trình Do đó, việc giám sát của con người vẫn cần thiết trong hoạt động của robot.

3.1.3 Cấu trúc cơ bản của Robot công nghiệp

Một robot công nghiệp được hình thành từ các hệ thống như hình sau:

Hình 3.1 Các thành phần tạo nên robot công nghiệp

Tay máy (Manipulator) là một cơ cấu cơ khí bao gồm các khâu và khớp, được thiết kế để tạo thành cánh tay, thực hiện các chuyển động cơ bản Cổ tay của tay máy mang lại sự khéo léo và linh hoạt, trong khi bàn tay (End Effector) thực hiện các thao tác trực tiếp trên đối tượng.

Cơ cấu chấp hành là thành phần chính giúp tạo chuyển động cho các khâu của tay máy, sử dụng nguồn động lực từ các loại động cơ như điện, thủy lực, khí nén hoặc sự kết hợp giữa chúng.

Hệ thống cảm biến của robot bao gồm các cảm biến và thiết bị chuyển đổi tín hiệu cần thiết, giúp robot nhận biết trạng thái của các cơ cấu bên trong và môi trường xung quanh Các cảm biến nội bộ cho phép robot tự đánh giá tình trạng của chính mình, trong khi các cảm biến bên ngoài giúp nhận diện các yếu tố từ môi trường.

- Hệ thống điều khiển (Controller) hiện nay thường là máy tính để giám sát và điều khiển hoạt động của robot

- Sơ đồ kết cấu chung của robot như hình dưới

Hình 3.2 Kết cấu chung của robot

3.1.3.2 Kết cấu của tay máy

Tay máy là phần cơ sở quan trọng, quyết định khả năng làm việc của robot công nghiệp (RBCN), giúp robot thực hiện các nhiệm vụ như nâng hạ và lắp ráp Thiết kế tay máy ban đầu được lấy cảm hứng từ cấu tạo và chức năng của tay người, nhưng hiện nay, tay máy có nhiều hình dáng và kiểu dáng khác nhau, không còn gắn liền với hình dạng tay người Dù vậy, trong lĩnh vực kỹ thuật robot, các thuật ngữ như vai, cánh tay, cổ tay, bàn tay và các khớp vẫn được sử dụng phổ biến.

(Articulations), để chỉ tay máy và các bộ phận của nó

Trong thiết kế và sử dụng tay máy, người ta quan tâm đến các thông số có ảnh hướng lớn đến khả năng làm việc của chúng, như:

- Sức nâng, độ cứng vững, lực kẹp của tay,

- Tầm với hay vùng làm việc: kích thước và hình dáng vùng mà phần công tác có thể với tới;

Sự khéo léo trong robot được hiểu là khả năng định vị và định hướng phần công tác trong không gian làm việc, với 6 bậc tự do cần thiết để thực hiện điều này Trong đó, 3 bậc tự do dùng để định vị và 3 bậc tự do để định hướng Một số công việc như nâng hạ hay xếp dỡ có thể yêu cầu ít hơn 6 bậc tự do Các robot hàn và sơn thường sở hữu 6 bậc tự do, nhưng trong những trường hợp cần sự khéo léo, linh hoạt hoặc tối ưu hóa quỹ đạo, robot với số bậc tự do lớn hơn 6 sẽ được sử dụng.

ỨNG DỤNG XỬ LÝ ẢNH ĐIỀU KHIỂN CÁNH TAY ROBOT

Giới thiệu về ngôn ngữ C#

4.1.1 Ngôn ngữ lập trình C# là gì?

C# (đọc là "C thăng" hay "C sharp") là một ngôn ngữ lập trình hướng đối tượng do Microsoft phát triển, đóng vai trò quan trọng trong kế hoạch NET của công ty Tên gọi của ngôn ngữ này bao gồm ký tự thăng, thể hiện sự hiện đại và tính năng mạnh mẽ của nó trong lập trình.

Microsoft nhưng theo ECMAlà C#, chỉ bao gồm dấu số thường Microsoft phát triển C# dựa trên C++ và Java

Các đặc điểm để làm cho C# là ngôn ngữ lập trình chuyên nghiệp được sử dụng rộng rãi:

- C# là ngôn ngữ đơn giản

Ngôn ngữ C# được phát triển dựa trên nền tảng của C++ và Java, mang lại sự đơn giản cho người dùng Những ai đã quen thuộc với C, C++ hay Java sẽ nhận thấy C# có nhiều điểm tương đồng về diện mạo, cú pháp, biểu thức và toán tử Tuy nhiên, C# đã được cải tiến để trở nên dễ sử dụng hơn, với việc loại bỏ những phần dư thừa và bổ sung các cú pháp mới.

- C# là ngôn ngữ hiện đại

C# là một ngôn ngữ lập trình hiện đại, tích hợp nhiều khái niệm quan trọng như xử lý ngoại lệ, kiểu dữ liệu mở rộng và bảo mật mã nguồn Những đặc tính này là cần thiết cho bất kỳ ngôn ngữ lập trình nào và sẽ được khám phá dần qua các bài học trong series này.

- C# là một ngôn ngữ lập trình thuần hướng đối tượng

Object-oriented programming (OOP) is a programming paradigm characterized by four key principles: abstraction, encapsulation, polymorphism, and inheritance These principles enable developers to create modular and reusable code, enhancing software development efficiency and maintainability.

(inheritance) C# hỗ trợ cho chúng ta tất cả những đặc tính trên Và để hiểu rõ hơn thì chúng ta sẽ có một chương trình bày về phần này

- C# là một ngôn ngữ ít từ khóa

Ngôn ngữ C được sử dụng để mô tả thôn # với một số lượng từ khóa hạn chế, chỉ khoảng 80 từ khóa và mười mấy kiểu dữ liệu xây dựng sẵn Nhiều người nghĩ rằng ngôn ngữ có nhiều từ khóa sẽ mạnh mẽ hơn, nhưng điều này không đúng Ví dụ, ngôn ngữ C# cho thấy rằng khi học sâu về nó, chúng ta nhận ra rằng C# có khả năng thực hiện bất kỳ nhiệm vụ nào.

- Ngoài những đặc điểm trên thì còn một số ƣu điểm nổi bật của C#:

+ C# có cấu trúc khá gần gũi với các ngôn ngữ lập trình truyền thống, nên cũng khá dễ dàng tiếp cận và học nhanh với C#

+ C# có thể biên dịch trên nhiều nền tảng máy tính khác nhau

+ C# được xây dựng trên nền tảng của C++ và Java nên nó được thừa hưởng những ưu điểm của ngôn ngữ đó

+ C# là một phần của NET Framework nên được sự chống lưng khá lớn đến từ bộ phận này

+ C# có IDE Visual Studio cùng nhiều plug-in vô cùng mạnh mẽ.

Giới thiệu về SharpDevelop

SharpDevelop, hay còn gọi là #develop, là một phần mềm mã nguồn mở, cung cấp môi trường phát triển tích hợp cho nền tảng NET Giao diện của nó có nhiều nét tương đồng với các công cụ phát triển khác, giúp người dùng dễ dàng làm quen và sử dụng.

Cho đến nay có các phiên bản chính của SharpDevelop:

+ 1.1: Dùng với bộ.NET 1.1, hỗ trợ các ngôn ngữ lậptrình C#, VB.NET và Boo + 2.2: Dùng với bộ.NET 2.0, hỗ trợ các ngôn ngữ kể trên

+ 3.0 và 3.1: Dùng với một trong các bộ.NET: 2.0, 3.0, và 3.5 Hỗ trợ thêm lập trình F# và IronPython

SharpDevelop không chỉ hỗ trợ các ngôn ngữ như C#, VB.NET, Boo, F#, và IronPython mà còn bổ sung thêm IronRuby Phiên bản mới này còn giới thiệu tính năng SharpDevelop Report (SDR), giúp người dùng thao tác hiệu quả hơn trên các báo cáo.

Starting from version 4.x, SharpDevelop supports NET Framework 4.0, with version 4.2 and later offering support for NET Framework 4.5 Additionally, version 4.2 and subsequent releases include support for ASP.NET MVC 3 The latest version available is 5.1 beta.

Nhóm phát triển đã khởi động dự án SharpDevelop từ năm 2000, với phiên bản beta đầu tiên ra mắt vào ngày 15 tháng 12 năm 2000 Kể từ đó, nhiều phiên bản mới đã được phát hành, mang lại nhiều tính năng cải tiến và sửa lỗi từ các phiên bản trước.

SharpDevelop chỉ chạy trên nền Windows Trong Linux, phần mềm MonoDevelop chạy với bộ Mono thường được sử dụng

SharpDevelop thường được coi là sự thay thế cho Visual Studio NET của Microsoft và đã phát triển một nhánh hỗ trợ đa nền tảng gọi là MonoDevelop Để hoàn thiện mã, SharpDevelop sử dụng cú pháp riêng cho C# và VB.NET, được tạo ra từ mô tả ngữ pháp và phiên bản sửa đổi của trình phát sinh biên dịch Coco/R Đối với ngôn ngữ Boo, cú pháp từ trình biên dịch Boo được áp dụng, nhưng việc giải quyết các kiểu biểu thức và suy luận được thực hiện bằng mã tùy chỉnh để hỗ trợ lượng giá trễ Phiên bản SharpDevelop 1.1 cho phép nhập các dự án từ Visual Studio, trong khi SharpDevelop 2.0 có khả năng mở và chỉnh sửa trực tiếp các dự án này, cũng như dịch toàn bộ dự án giữa VB.NET và C#.

Thiết kế mạch điều khiển

4.3.1.2 Giới thiệu bo mạch Arduino Uno R3 SMD

- Một số thông tin về Arduino Uno

Hình 4.2 Board Arduino mặt trước và mặt sau

Arduino Uno là sử dụng chip Atmega328 Nó có 14 chân digital I/O, 6 chân đầu vào (input) analog, thạch anh dao động 16Mhz Một số thông số kỹ thuật như sau :

Bảng 4.1 Thông số cơ bản của Arduino Uno

Vi điều khiển ATmega328 (họ 8bit) Điện áp hoạt động 5V – DC

Tần số hoạt động 16 MHz

Dòng tiêu thụ 30mA Điện áp vào khuyên dùng 7-12V – DC Điện áp vào giới hạn 6-20V – DC

Số chân Digital I/O 14 (6 chân PWM)

Số chân Analog 6 (độ phân giải 10bit)

Dòng tối đa trên mỗi chân I/O 30 mA

Dòng ra tối đa (5V) 500 mA

Dòng ra tối đa (3.3V) 50 mA

Bộ nhớ flash 32 KB (ATmega328) với 0.5KB dùng bởi bootloader

Hình 4.3 Các linh kiện trên bo mạch Arduino Uno

Hình 4.4 Sơ đồ mạch nguyên lý

Hình 4.5 Sơ đồ mạch layout

Hình 4.6 Sơ đồ các chân mạch rơle

Module 1 Relay với opto cách ly nhỏ gọn, có opto và transistor cách ly giúp cho việc sử dụng trở nên an toàn với board mạch chính, mạch được sử dụng để đóng ngắt nguồn điện công suất cao AC hoặc DC, có thể chọn đóng khi kích mức cao hoặc mức thấp bằng Jumper

Tiếp điểm đóng ngắt bao gồm ba loại: NC (thường đóng), NO (thường mở) và COM (chân chung), được cách ly hoàn toàn với bo mạch chính Trong trạng thái bình thường, tiếp điểm NC sẽ nối với COM Khi được kích hoạt, COM sẽ chuyển sang nối với NO và ngắt kết nối với NC.

 Sử dụng điện áp nuôi DC 5V

 Relay mỗi Relay tiêu thụ dòng khoảng 80mA

 Điện thế đóng ngắt tối đa: AC250V ~ 10A hoặc DC30V ~ 10A

 Có đèn báo đóng ngắt trên mỗi Relay

 Có thể chọn mức tín hiệu kích 0 hoặc 1 qua jumper

Hình 4.7 sơ đồ nguyên lí mạch rơ le

4.3.2 Nguồn sử dụng trong mô hình

Nguồn nuôi cho động cơ servo của cánh tay robot sử dụng thiết bị có điện áp đầu vào từ 110 đến 240 V AC, với đầu ra 5V DC và dòng điện 6A.

Hình 4.8 Nguồn dùng cho động cơ servo của cánh tay

Nguồn cho động cơ băng tải là AC/DC Adaptor có ngõ vào là AC 100~240V tần số 50~60Hz, ngõ ra là 9V DC với dòng 1A

Hình 4.9 Nguồn dùng cho động cơ băng tải

- Chuyển đổi ảnh về đen trắng Để chuyển một ảnh về đen trắng ta chuyển chỉ số pixel theo công thức

299 * c.R + 587 * c.G + 114 * c.B public Bitmap DenTrang(Image anh)

Bitmap kq = new Bitmap(anh.Width, anh.Height);

Bitmap anhtam = new Bitmap(anh);

Byte rgb; for (int cot = 0; cot < anhtam.Width; cot++) for (int hang = 0; hang < anhtam.Height; hang++)

{ c = anhtam.GetPixel(cot, hang); rgb = (byte)(.299 * c.R + 587 * c.G + 114 * c.B); kq.SetPixel(cot, hang, Color.FromArgb(rgb, rgb, rgb)); } return kq;

Hình 4.10 Chuyển đổi ảnh về đen trắng

- Chuyển đổi về ảnh âm bản

+ Để chuyển đổi về ảnh âm bản ta lấy 255 trừ đi từng chỉ số (làm màu từng pixel ngược lại) public Bitmap AmBan(Image anh)

Bitmap kq = new Bitmap(anh.Width, anh.Height);

Bitmap anhtam = new Bitmap(anh);

Color c; for (int cot = 0; cot < anhtam.Width; cot++) for (int hang = 0; hang < anhtam.Height; hang++)

{ c = anhtam.GetPixel(cot, hang); kq.SetPixel(cot, hang, Color.FromArgb(255 - c.R,

Hình 4.11 Chuyển đổi về ảnh âm bản

+ Để lọc màu (cụ thể 3 màu chính là đỏ, xanh lá cây, xanh lam)

Màu đỏ sẽ tự dữ nguyên màu đỏ và đảo ngược hai màu kia (lấy 255 trừ đi chỉ số

G và B) Tương tự với xanh lá cây và xanh lam public Bitmap ChenMau(Image anh, int mau)

//1 = do; 2 = xanh Green); 3 = xanh (blue)

Bitmap kq = new Bitmap(anh.Width, anh.Height);

Bitmap anhtam = new Bitmap(anh);

Color c; int g = 0, r = 0 , b = 0; for (int cot = 0; cot < anhtam.Width; cot++) for (int hang = 0; hang < anhtam.Height; hang++)

{ c = anhtam.GetPixel(cot, hang); switch (mau)

{ case 1: r = c.R; g = c.G - 255; b = c.B - 255; break; case 2: r = c.R - 255; g = c.G; b = c.B - 255; case 3: r = c.R - 255; g = c.G - 255; b = c.B; break;

} r = Math.Max(r, 0); b = Math.Max(b, 0); g = Math.Max(g, 0); kq.SetPixel(cot, hang, Color.FromArgb(r,g,b));

4.5 Lưu đồ giải thuật của chương trình

4.6 Code chương trình điều khiển

To modify the template, navigate to Tools | Options | Coding | Edit Standard Headers This code snippet, written in C#, includes necessary namespaces such as System, System.Collections, System.Drawing, and Emgu.CV, which are essential for developing an application within the ArmController namespace The code utilizes classes for handling collections, graphical elements, serial port communication, and image processing functionalities, enabling the integration of computer vision capabilities into the application.

{ public partial class MainForm : Form

Mat frame = new Mat(); private object lockObject = new object();

The code snippet initializes a new Mat object and defines several constants for various positions, including HOME_POSITION, GRIP_POSITION, and three specific positions (POSITION_1, POSITION_2, POSITION_3) It also creates an array of these positions Additionally, it sets constants for controlling a scroller (START_SCROLLER and STOP_SCROLLER) and grip actions (OPEN_GRIP and CLOSE_GRIP) The dimensions for a selection box are defined, with WIDTH and HEIGHT set for a display resolution of 640x480 pixels Furthermore, it initializes variables for product number, detection status, completion state, and whether an action is currently being taken.

Rectangle selectBox = new Rectangle((int)(WIDTH / 2 - WIDTH * W_SELECT_BOX), (int)(HEIGHT / 2 - HEIGHT * H_SELECT_BOX + 30),

(int)(WIDTH * W_SELECT_BOX * 2), (int)(HEIGHT * H_SELECT_BOX * 2));

ScalarArray[][] ALL_COLORS = new ScalarArray[][] { new

ScalarArray[] { new ScalarArray(new MCvScalar(225 / 2, 40 * 2.55, 20 * 2.55)), new ScalarArray(new MCvScalar(290 / 2, 255, 255)) }, new ScalarArray[] { new ScalarArray(new MCvScalar(90 / 2, 40 * 2.55, 10 * 2.55)),

}, new ScalarArray[] { new ScalarArray(new MCvScalar(40 / 2, 50 * 2.55, 40 * 2.55)), new ScalarArray(new MCvScalar(70 / 2, 255, 255))

InitializeComponent(); foreach (string port in SerialPort.GetPortNames()) { arduinoPortCB.Items.Add(port);

} private void ProcessFrame(object sender, EventArgs arg)

{ camera.Retrieve(frame); //nh?n khung h?nh

CvInvoke.CvtColor(frame, hsv, ColorConversion.Bgr2Hsv); for (int i = 0; i < ALL_COLORS.Length; i++) {

CvInvoke.InRange(hsv, lowerColor, upperColor, mask); var element CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(30, 30), new Point(-1, -1));

CvInvoke.Erode(mask, mask, element, new Point(-1, -1), 1, BorderType.Reflect, default(MCvScalar));

CvInvoke.Dilate(mask, mask, element, new Point(-1, -1), 1, BorderType.Reflect, default(MCvScalar)); var contours = new VectorOfVectorOfPoint(); var hierarchy = new Mat();

CvInvoke.FindContours( mask, contours, hierarchy,

CvInvoke.DrawContours(frame, contours, -1, new

MCvScalar(255, 255, 0)); for (int j = 0; j < contours.Size; j++) { var c = contours[j]; var rect = CvInvoke.MinAreaRect(c); bao l?y biên var p = new Point(); p.X = (int)rect.Center.X; p.Y = (int)rect.Center.Y; if (selectBox.Contains(p)) { product_number = i + 1;

The code snippet utilizes CvInvoke.PutText to display the product number on the frame in a specified font and color It checks if the process is not currently taking, and if conditions are met—such as completion, detection, the auto-check box being checked, and the serial port being open—it initiates the taking process A new thread is created to execute a series of commands to an Arduino, controlling various actions such as stopping the scroller, moving to the home position, and managing the grip for the specified product number Once the sequence is completed, the taking process is marked as finished.

CvInvoke.Rectangle(frame, selectBox, new MCvScalar(255, 0, 255)); lock (lockObject) { pictureBox1.Image = frame.Bitmap;

} void ComboBox1SelectedIndexChanged(object sender, EventArgs e)

} private void port_DataReceived(object sender,

{ while (serialPort1.BytesToRead > 0) { var data = serialPort1.ReadTo(";"); print("Receive: " + data); if (data.Equals("done")) { done = true;

} else if (data.Equals("detect")) { detect = true;

} else if (data.Equals("not detect")) { detect = false;

System.Diagnostics.Debug.WriteLine(s); void GroupBox1Enter(object sender, EventArgs e)

} void OpenCameraClick(object sender, EventArgs e)

{ camera = new VideoCapture(cameraAddressTB.Text + "/video"); camera.ImageGrabbed += ProcessFrame; camera.Start();

} void ConnectCOMClick(object sender, EventArgs e)

{ done = true; if (serialPort1.IsOpen) { serialPort1.Close(); connectCOM.Text = "K?t n?i";

} else { connectCOM.Text = "Ng?t k?t n?i"; serialPort1.PortName = "" + arduinoPortCB.SelectedItem; serialPort1.Open();

} void Button3Click(object sender, EventArgs e)

} void Button1Click(object sender, EventArgs e)

} void Button2Click(object sender, EventArgs e)

} void Button4Click(object sender, EventArgs e)

} void Button5Click(object sender, EventArgs e)

} void FocusClick(object sender, EventArgs e)

WebClient().DownloadString(cameraAddressTB.Text + "/focus")).Start();

{ serialPort1.Write(s); done = false; print("Sent command: " + s);

} void Button6Click(object sender, EventArgs e)

} void Button7Click(object sender, EventArgs e)

{ sendToArduino(POSITION_3); void Button8Click(object sender, EventArgs e)

} void Button9Click(object sender, EventArgs e)

Giao diện điều khiển cánh tay robot

Hình 4.13 Giao diện điều khiển

Code chương trình điều khiển

To modify the template, navigate to Tools, then Options, followed by Coding, and select Edit Standard Headers The code utilizes various namespaces including System, System.Collections, System.Drawing, System.IO.Ports, and System.Windows.Forms, along with Emgu.CV and its related components such as CvEnum, Structure, and Util This setup is essential for developing applications within the ArmController namespace, facilitating advanced image processing and control functionalities.

{ public partial class MainForm : Form

Mat frame = new Mat(); private object lockObject = new object();

In the provided code snippet, a new Mat object is initialized, and several constant string variables are defined to represent various positions and commands, including HOME_POSITION, GRIP_POSITION, and multiple POSITION variables An array of string positions is created, which includes POSITION_1, POSITION_2, and POSITION_3 Additionally, commands for starting and stopping a scroller, as well as opening and closing a grip, are specified The dimensions for a selection box are set, along with constants for the width and height of the Mat object Variables for product number, detection status, completion status, and taking status are also declared, initializing product_number to -1 and the boolean flags to manage the state of the application.

Rectangle selectBox = new Rectangle((int)(WIDTH / 2 - WIDTH * W_SELECT_BOX), (int)(HEIGHT / 2 - HEIGHT * H_SELECT_BOX + 30),

(int)(WIDTH * W_SELECT_BOX * 2), (int)(HEIGHT * H_SELECT_BOX * 2));

ScalarArray[][] ALL_COLORS = new ScalarArray[][] { new

ScalarArray[] { new ScalarArray(new MCvScalar(225 / 2, 40 * 2.55, 20 * 2.55)), new ScalarArray(new MCvScalar(290 / 2, 255, 255)) }, new ScalarArray[] { new ScalarArray(new MCvScalar(90 / 2, 40 * 2.55, 10 * 2.55)),

}, new ScalarArray[] { new ScalarArray(new MCvScalar(40 / 2, 50 * 2.55, 40 * 2.55)), new ScalarArray(new MCvScalar(70 / 2, 255, 255))

InitializeComponent(); foreach (string port in SerialPort.GetPortNames()) { arduinoPortCB.Items.Add(port);

} private void ProcessFrame(object sender, EventArgs arg)

{ camera.Retrieve(frame); //nh?n khung h?nh

CvInvoke.CvtColor(frame, hsv, ColorConversion.Bgr2Hsv); for (int i = 0; i < ALL_COLORS.Length; i++) {

CvInvoke.InRange(hsv, lowerColor, upperColor, mask); var element CvInvoke.GetStructuringElement(ElementShape.Rectangle, new Size(30, 30), new Point(-1, -1));

CvInvoke.Erode(mask, mask, element, new Point(-1, -1), 1, BorderType.Reflect, default(MCvScalar));

CvInvoke.Dilate(mask, mask, element, new Point(-1, -1), 1, BorderType.Reflect, default(MCvScalar)); var contours = new VectorOfVectorOfPoint(); var hierarchy = new Mat();

CvInvoke.FindContours( mask, contours, hierarchy,

CvInvoke.DrawContours(frame, contours, -1, new

MCvScalar(255, 255, 0)); for (int j = 0; j < contours.Size; j++) { var c = contours[j]; var rect = CvInvoke.MinAreaRect(c); bao l?y biên var p = new Point(); p.X = (int)rect.Center.X; p.Y = (int)rect.Center.Y; if (selectBox.Contains(p)) { product_number = i + 1;

The code snippet utilizes CvInvoke.PutText to display the product number on the frame with specific font and color settings When the process is not currently taking, it checks if certain conditions are met, including the completion of a previous task, detection status, and whether the serial port is open If these conditions are satisfied, it initiates the product retrieval process, logging the action A new thread is created to execute a series of commands to an Arduino, including stopping the scroller, moving to the home position, opening and closing the grip, and finally returning to the home position before restarting the scroller, ensuring that the product is taken efficiently.

CvInvoke.Rectangle(frame, selectBox, new MCvScalar(255, 0, 255)); lock (lockObject) { pictureBox1.Image = frame.Bitmap;

} void ComboBox1SelectedIndexChanged(object sender, EventArgs e)

} private void port_DataReceived(object sender,

{ while (serialPort1.BytesToRead > 0) { var data = serialPort1.ReadTo(";"); print("Receive: " + data); if (data.Equals("done")) { done = true;

} else if (data.Equals("detect")) { detect = true;

} else if (data.Equals("not detect")) { detect = false;

System.Diagnostics.Debug.WriteLine(s); void GroupBox1Enter(object sender, EventArgs e)

} void OpenCameraClick(object sender, EventArgs e)

{ camera = new VideoCapture(cameraAddressTB.Text + "/video"); camera.ImageGrabbed += ProcessFrame; camera.Start();

} void ConnectCOMClick(object sender, EventArgs e)

{ done = true; if (serialPort1.IsOpen) { serialPort1.Close(); connectCOM.Text = "K?t n?i";

} else { connectCOM.Text = "Ng?t k?t n?i"; serialPort1.PortName = "" + arduinoPortCB.SelectedItem; serialPort1.Open();

} void Button3Click(object sender, EventArgs e)

} void Button1Click(object sender, EventArgs e)

} void Button2Click(object sender, EventArgs e)

} void Button4Click(object sender, EventArgs e)

} void Button5Click(object sender, EventArgs e)

} void FocusClick(object sender, EventArgs e)

WebClient().DownloadString(cameraAddressTB.Text + "/focus")).Start();

{ serialPort1.Write(s); done = false; print("Sent command: " + s);

} void Button6Click(object sender, EventArgs e)

} void Button7Click(object sender, EventArgs e)

{ sendToArduino(POSITION_3); void Button8Click(object sender, EventArgs e)

} void Button9Click(object sender, EventArgs e)

Giao diện điều khiển cánh tay robot

Hình 4.13 Giao diện điều khiển

Ngày đăng: 25/06/2022, 10:48

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
1. Đỗ Văn Chuyên. Ứng dụng xử lý ảnh trong điều khiển cánh tay robot công nghiệp. Luận văn thạc sĩ khoa khoa học máy tính. 2013 Khác
2. PGS. TS. Đỗ Năng Toàn, TS. Phạm Viết Bình. Xử Lý Ảnh. 2007 Khác
3. PGS.TS Nguyễn Quang Hoan. Giáo trình xử lý ảnh. Học viện Công Nghệ Bưu Chính Viễn Thông Hà Nội. 2006 Khác
4. TS.Nguyễn Mạnh Tiến. Điều khiển Robot công nghiệp. NXB Khoa học và kỹ thuật. 2007 Khác
5. Cộng đồng Arduino Viêt Nam. arduino.vn Khác
6. Lương Mạnh Bá, Nguyễn Thanh Thủy. Nhập môn xử lý ảnh số. NXB Khoa học và kỹ thuật. 2002 Khác
7. Khuyet Danh. Giáo trình ngôn ngữ lập trình C# Khác

HÌNH ẢNH LIÊN QUAN

Hình 2.1 hệ thống xử lý ảnh. - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
Hình 2.1 hệ thống xử lý ảnh (Trang 14)
Hình 2.2: Lân cận các điểm ảnh của tọa độ (x,y) - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
Hình 2.2 Lân cận các điểm ảnh của tọa độ (x,y) (Trang 21)
Hình 2.3.Không gian màu RGB - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
Hình 2.3. Không gian màu RGB (Trang 22)
Hình 2.5 Không gian màu HSV - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
Hình 2.5 Không gian màu HSV (Trang 23)
2.4.3 Biến đổi Hough tìm hình chữ nhật - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
2.4.3 Biến đổi Hough tìm hình chữ nhật (Trang 27)
Hình 2.8 Hình chữ nhật trong không gian Hough. - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
Hình 2.8 Hình chữ nhật trong không gian Hough (Trang 28)
Hình 3.1 Các thành phần tạo nên robot công nghiệp - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
Hình 3.1 Các thành phần tạo nên robot công nghiệp (Trang 32)
Hình 3.2 Kết cấu chung của robot - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
Hình 3.2 Kết cấu chung của robot (Trang 33)
SCARA (hình 3.6) được đề xuất lần đầu vào năm 1979 tại Trường đại học Yamanashi (Nhật bản) dùng cho công việc lắp ráp - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
hình 3.6 được đề xuất lần đầu vào năm 1979 tại Trường đại học Yamanashi (Nhật bản) dùng cho công việc lắp ráp (Trang 35)
Hình 3.7 Kiểu tọa độ góc - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
Hình 3.7 Kiểu tọa độ góc (Trang 36)
Hình ảnh cánh tay robot - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
nh ảnh cánh tay robot (Trang 40)
Hình 3.8 Mô hình tổng thể thực tế - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
Hình 3.8 Mô hình tổng thể thực tế (Trang 40)
Hình 3.10 Các khớp của cánh tay robot - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
Hình 3.10 Các khớp của cánh tay robot (Trang 41)
Hình 3.11 Tay gắp của robot - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
Hình 3.11 Tay gắp của robot (Trang 42)
Hình ảnh băng tải - Điều khiển cánh tay robot phân loại sản phẩm theo màu sắc dùng xử lý ảnh
nh ảnh băng tải (Trang 42)

TỪ KHÓA LIÊN QUAN

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w