5. Phƣơng pháp nghiên cứu
4.2.2 Đánh giá kết quả thí nghiệm
Hệ thống làm việc tƣơng đối hiệu quả, ổn định tại môi trƣờng ánh sáng xác định. Mạch thu phát sóng RF có thể hoạt động tốt ở khoảng cách 10m.
Ƣu điểm:
- Hệ thống đƣợc thiết kế và hoàn thiện đầy đủ
- Hệ thống mạch truyền thông thu - phát RF hoạt động ổn định, tốc độ thu – phát nhanh với khoảng cách trên 10m trong điều kiện bình thƣờng.
- Giao diện chƣơng trình xử lý ảnh đơn giản, trực quan, dễ sử dụng.
- Kết nối giữa chƣơng trình xử lý ảnh và hệ thống thu – phát sóng RF ổn định.
- Tốc độ xử lý ảnh tốt và đáp ứng đƣợc yêu cầu của đề tài.
- Bộ thu phát RF nhỏ gọn và nguồn điện cấp cho bộ RF, băng tải đƣợc thiết kế hợp lý, đảm bảo không gian làm việc và độ an toàn cao.
Nhƣợc điểm:
- Chƣơng trình xử lý ảnh chƣa đƣợc tối ƣu ở mức cao nhất, còn chịu ảnh hƣởng của nhiễu nhƣ ánh sáng.
- Tốc độ xử lý ảnh, nhận biết đối tƣợng về hình dạng, màu sắc chƣa nhanh. - Cần cải thiện giao diện xử lý ảnh và tối ƣu hơn thuật toán nhận biết đối tƣợng của chƣơng trình.
Cách khắc phục:
- Sử dụng ánh sáng cố định sao cho lƣợng ánh sáng trong khu vực làm việc
không bị ảnh hƣởng bởi điều kiện thời tiết hay môi trƣờng bên ngoài. - Tối ƣu hóa chƣơng trình xử lý ảnh.
73
KẾT LUẬN
Đề tài chứng minh đƣợc sự khả thi trong việc thiết kế, chế tạo bộ xử lý ảnh cho robot công nghiệp nói riêng và thiết bị công nghiệp nói chung dựa trên các thuật toán xử lý ảnh sẵn có mã nguồn mở của Open CV. Đề tài cũng chứng minh đƣợc khả năng hoàn toàn làm chủ về mặt công nghệ thiết kế và chế tạo sản phẩm này, với chất lƣợng có thể chấp nhận đƣợc, giá thành rẻ.
Việc sử dụng các hàm xử lý ảnh của Open CV để nhận dạng biên dạng của sản phẩm rất khả thi, mức độ chính xác cao. Việc nhận dạng màu sắc dựa theo ngƣỡng của màu của các hàm Open CV còn có nhiều hạn chế. Với các sản phẩm cần độ chính xác cao cần phải can thiệp sâu vào các hàm nhận diện màu này.
Chất lƣợng của bộ xử lý ảnh không chỉ phụ thuộc vào các hàm xử lý ảnh mà còn phụ thuộc nhiều vào thiết bị của bộ xử lý ảnh. Cần có nghiên cứu sâu hơn nữa về vấn đề này để đƣa ra các đánh giá chính xác mang tính định lƣợng.
74
PHỤ LỤC Code chƣơng tr nh
1. Code điều khiển mạch phát sóng RF.
// * code_phat.c #include <avr/io.h> #include <avr/delay.h> #include <avr/interrupt.h> #include "uartd.h" #include "nrf24l01/nrf24l01.h" int main(void) { uint8_t Data[NRF24L01_PAYLOAD];
uint8_t addrtx0[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP0; DDRC=0x3F; PORTC=0x3F; UBRRH=0; //f = 7.3728 MHz, baud 9600 UBRRL=47; SetupSerial(); nrf24l01_init(); _delay_ms(100); sei(); TxStr("starting as tx...\r\n"); nrf24l01_settxaddr(addrtx0); while(1) {
Data[0]=RxChar(); Data[1]=RxChar(); //nhan du lieu tu may tinh for(int i=2; i<sizeof(Data); i++) Data[i] = 0;
for(int i = 0; i<2; i++) TxChar(Data[i]); TxStr(" \n"); TxStr("sending...");
75
uint8_t writeret = nrf24l01_write(Data); if(writeret){ TxStr("ok\r\n"); } else TxStr("failed\r\n"); } }
2. Code điều khiển mạch thu sóng RF.
/* * code_nhan.c */ #include <avr/io.h> //#include <avr/delay.h> #include <avr/interrupt.h> #include "nrf24l01/nrf24l01.h" #include "uartd.h"
#define set1(port,bit) (port) |= (1<<(bit)) //set bit len 1
#define set0(port,bit) (port) &= ~(1<<(bit)) //set bit xuong 0 void init_595()
{
set0(PORTC,0); // trang thai off 74HC595 set0(PORTC,1);
set0(PORTC,2); }
void xuatdata(uint8_t x, uint8_t y, uint8_t z, uint8_t t) {
76
data = ((uint32_t)t<<24) | ((uint32_t) z<<16) | ((uint16_t) y<<8) | x; for(int i=0;i<32;i++)
{
if(data & 0x80000000/*lay bit thu 32*/) set1(PORTC,1); //xu ly du lieu
else set0(PORTC,1);
set0(PORTC,0); set1(PORTC,0); //cho gui du lieu (tao xung chan 11)
data <<= 1; //dich bit de
lay bit 31=>32 }
set0(PORTC,2); set1(PORTC,2); // tao xung chan 12 595 cho phep output }
int main(void) {
uint8_t i = 0; uint8_t Data1,Data2;
uint8_t Data[NRF24L01_PAYLOAD]; //#define NRF24L01_PAYLOAD 2 (rf24l01.h)
uint8_t addrtx0[NRF24L01_ADDRSIZE] = NRF24L01_ADDRP0; /*#define NRF24L01_ADDRSIZE 5
#define NRF24L01_ADDRP0 {0xE8, 0xE8, 0xF0, 0xF0, 0xE2} //pipe 0, 5 byte address*/
unsigned char M[9]={0x00,0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80}; unsigned char L[9]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
DDRC=0x3F; //output PDC PORTC=0x3F;
UBRRH=0; //f = 7.3728 MHz, baud 9600 (COM) UBRRL=47;
77
/* kich hoat Rx va Tx vs 8bit data, 1stop, no parity (uart.h)*/ init_595(); //off 595
nrf24l01_init(); //khoi tao nrf24l01 sei();
TxStr("starting as rx...\r\n");
for(i=0; i<sizeof(Data); i++) Data[i] = 0; nrf24l01_setrxaddr(0,addrtx0);
while(1) {
uint8_t pipe = 0;
if(nrf24l01_readready(&pipe)) //if data is ready {
TxStr("Receiving data...: "); //read buffer
nrf24l01_read(Data);
for(i = 0; i<sizeof(Data);i++) TxChar(Data[i]); TxStr(" \n");
xuatdata(0x00,0x00,0x00,0xFF); }
Data1 = Data[0]-48; Data2 = Data[1]-48; if((Data1)==0) { if(Data2 < 9) xuatdata(M[Data2],0x00,0x00,L[Data2+1]); else xuatdata(0x00,M[1],0x00,0xFF); } if(Data1 == 1) { if(Data2 < 7) xuatdata(0x00,M[Data2+2],0x00,0xFF); else xuatdata(0x00,0x00,M[Data2-6],0xFF);
78 } if(Data1 == 2) { if(Data2 < 5) xuatdata(0x00,0x00,M[Data2+4],0xFF); else xuatdata(0x00,0x00,0x00,L[Data2-4]); } if(Data1 == 3) { if(Data2 < 3) xuatdata(0x00,0x00,0x00,L[Data2+6]); else xuatdata (0x00,0x00,0x00,0xFF); } }} 3. Code xử lý ảnh Nachi MC20-01
// hai báo thƣ viện C++xử lý thuật toán
#include <iostream> #include <ctype.h> #include <math.h> #include <string.h>
// hai báo thƣ viện OpenCV
#include <cv.h> #include <highgui.h> #include <opencv2/opencv.hpp> #include "opencv2/video/tracking.hpp" #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp"
//Khai báo biến chương trình
VideoCapture cap, cap1; // khai báo camera
Mat image, croppedImage ; // khai báo kho ảnh xử lý Mat image
79
vector<Vec3f> circles; // Rect selection;
int Colorid; // khai báo biến màu sắc
double areaNoise, areaNoiseBlack, areaNoiseYellow, areaNoiseRed; // khai báo vùng nhiễu các màu sắc trong chƣơng trình
vector<vector<cv::Point> > squares;
int Geometry; // khai báo biến chứa các hình thái học //Chương trình chính
public:
vector<Vec3f> Circle(Mat img) { // lƣu trữ thông số hình tròn nhận dạng đƣợc từ ảnh
Mat cimg; // khai báo biến
// Lọc nhiễu và chuyển sang ảnh xám
medianBlur(img, img, 3);
cvtColor(img, cimg, CV_BGR2GRAY); //chuyển ảnh sang ảnh xám // Eroding (làm mờ ảnh)
Mat eroded;
erode(cimg,eroded,cv::Mat());
// Delating (làm nở các phần tử của ảnh) Mat dilated; dilate(cimg,dilated,cv::Mat());
vector<Vec3f> circles; // Lƣu trữ thông số hình tròn nhận dạng đƣợc
HoughCircles(cimg, circles, CV_HOUGH_GRADIENT,1,
200, // Khoảng cách tối thiếu giữa các tâm
40, // Cài đặt ngƣỡng trong Cany detector 40
60, // Ngƣỡng xác định tâm 30
50, // Tham số xác định bán kinh nhỏ nhất
200 // Tham số xác định bán kinh lớn nhất );
80 //Trả về hình tròn cho chƣơng trình
return circles; }
// Chƣơng trình vẽ các cạnh của khối đa giác để nhận diện hình vuông và tam giác.
public:
static double angle( cv::Point pt1, cv::Point pt2, cv::Point pt0 ) {
double dx1 = pt1.x - pt0.x; double dy1 = pt1.y - pt0.y; double dx2 = pt2.x - pt0.x; double dy2 = pt2.y - pt0.y;
return (dx1*dx2 + dy1*dy2)/sqrt((dx1*dx1 + dy1*dy1)*(dx2*dx2 + dy2*dy2) + 1e-10);
}
static int FindGeometry( const Mat& image, vector<vector<cv::Point> >& squares )
{
int thresh = 900, N = 4; squares.clear();
Mat pyr, timg, gray0(image.size(), CV_8U), gray;
pyrDown(image, pyr, cv::Size(image.cols/2, image.rows/2)); pyrUp(pyr, timg, image.size());
vector<vector<cv::Point> > contours; for( int c = 0; c < 3; c++ ) { int ch[] = {c, 0}; mixChannels(&timg, 1, &gray0, 1, ch, 1); for( int l = 0; l < N; l++ ) {
81 if( l == 0 ) {
Canny(gray0, gray, 0, thresh, 5);
dilate(gray, gray, Mat(), cv::Point(-1,-1)); }
else {
gray = gray0 >= (l+1)*255/N; }
findContours(gray, contours, CV_RETR_LIST, CV_CHAIN_APPROX_SIMPLE)
vector<cv::Point> approx;
for( size_t i = 0; i < contours.size(); i++ ) {
approxPolyDP(Mat(contours[i]), approx, arcLength(Mat(contours[i]), true)*0.02, true);
if( approx.size() == 4 &&
fabs(contourArea(Mat(approx))) > 1000 && isContourConvex(Mat(approx)) )
{
squares.push_back(approx); return 1;
}
if( approx.size() == 3 && fabs(contourArea(Mat(approx))) > 1000 && isContourConvex(Mat(approx)) )
{
squares.push_back(approx); return 2;
82 } } } return 0; }
// phần kết luận tín hiệu và xuất tín hiệu ra cổng nối tiếp. Colorid = ColorResult(srcMat); if ( Colorid == 1) { textBoxMonitor->AppendText("YELLOW \n");} else if ( Colorid == 2 ) { textBoxMonitor->AppendText("BLACK\n"); } else if ( Colorid == 3 ) { textBoxMonitor->AppendText("WHITE \n");} else textBoxMonitor->AppendText("UNKNOWN \n");
circle( srcMat, cv::Point(c[0], c[1]), c[2], Scalar(0,255,0), 3, CV_AA);
circle( srcMat, cv::Point(c[0], c[1]), 2, Scalar(255,255,55), 3,
CV_AA); }
if (circles.size() > 0 && Colorid == 2) { serialPort1->Write("02"); } if (circles.size() > 0 && Colorid == 1)
{ serialPort1->Write("01"); } if (circles.size() > 0 && Colorid == 3)
{ serialPort1->Write("03"); } }
else {
83 if (Geometry == 2) { textBoxMonitor->AppendText("Tam Giac..."); Colorid = ColorResult(srcMat); if (Colorid == 1) { textBoxMonitor->AppendText("YELLOW \n"); } else textBoxMonitor->AppendText("UNKNOWN \n"); drawSquares(srcMat, squares); serialPort1->Write("04"); } else if (Geometry == 1) { textBoxMonitor->AppendText("Hinh Vuong ..."); Colorid = ColorResult(srcMat); if (Colorid == 4) { textBoxMonitor->AppendText("RED \n"); } else textBoxMonitor->AppendText("UNKNOWN \n"); drawSquares(srcMat, squares); serialPort1->Write("05"); } else textBoxMonitor->AppendText("Not Found!\n"); }
IplImage test = srcMat; DrawCvImage(&test); }
84
PHẦN BÀI TẬP THỰC HÀNH
BÀI 1: THIẾT KẾ KHÔNG GIAN LÀM VIỆC CHO ROBOT CÔNG NGHIỆP NACHI MC20-01 VỚI HỆ THỐNG XỬ LÝ ẢNH 1. Mục tiêu của bài thực hành:
Xây dựng không gian làm việc cho robot công nghiệp Nachi MC20-01 bằng phần mềm AX on Desk và Solidwork.
2. Nội dung thực hành:
2.1 Xây dựng không gian làm việc cho robot công nghiệp Nachi MC20-01 bằng phần mềm Solidwork bằng phần mềm Solidwork
Để tiến hành quá trình lập trình, mô phỏng hoạt động của robot công nghiệp Nachi MC20-01 cần phải xây dựng không gian làm việc cho robot.
Robot sẽ đƣợc lập trình, mô phỏng trên không gian ảo này. Quá trình mô phỏng hoạt động trong không gian ảo, ngƣời lập trình sẽ đánh giá đƣợc khả năng làm việc của robot, từ đó có những hiệu chỉnh khi làm việc trong thực tế. Quá trình làm việc trong không gian ảo cũng góp phần giảm thiểu những sai sót khi làm việc.
Do đó yêu cầu của việc xây dựng không gian làm việc cho robot nhƣ sau: - Phải đảm bảo chính xác về các kích thƣờng hình học.
- Phải đảm bảo chính xác về các vị trí của các đối tƣợng trong không gian.
Để xây dựng không gian làm việc cho robot, ta sử dụng phần mềm Solidwork. Từng đối tƣợng trong không gian làm việc thực tế của robot có ảnh hƣởng đến quá trình làm việc của robot đều đƣợc xây dựng đảm bảo đúng về kích thƣớc hình học. Sau đó đƣợc sắp xếp lại bằng một bản vẽ lắp và đƣợc nhập vào phần mềm AX on Desk để tiến hành lập trình mô phỏng.
85
2.1.1 Xây dựng các bàn gá
Sử dụng phần mềm Solidwork thiết kế bàn gá có các kích thƣớc nhƣ sau
2.1.2 Xây dựng các khay chứa phôi
86
2.1.3 Xây dựng hộp chứa sản phẩm
Sử dụng phần mềm Solidwork thiết kế hộp chứa sản phẩm có các kích thƣớc nhƣ sau:
2.1.4 Xây dựng băng tải
Sinh viên truy cập theo đƣờng dẫn sau để lấy băng tải: D:RobotCN/Khonggianlv/bangtai. SLDPRT
87
2.1.5 Xây dựng bệ robot
Sử dụng phần mềm Solidwork thiết kế bệ robot có các kích thƣớc nhƣ sau:
Các chi tiết khác sinh viên truy cập thƣ mục D:RobotCN/ honggianlv để lấy ra
2.2 Thiết lập bản vẽ lắp không gian làm việc của robot
Xây dựng bản vẽ lắp, lấy và sắp xếp các bộ phận đã xây dựng trên để có đƣợc không gian làm việc cho robot nhƣ sau:
88
2.3 Xây dựng không gian làm việc cho robot công nghiệp trên phần mềm AX on Desk AX on Desk
2.3.1 Thiết lập không gian làm việc
Sau khi sắp xếp trong bản vẽ lắp theo vị trí nhƣ trên, ta đƣợc không gian làm việc tƣơng ứng nhƣ sau:
89
Mở phần mềm AX on Desk, vào cửa sổ Virtual ROBOT, [file] [open] chọn file *igs tƣơng ứng
Thực hiện các lệnh dịch chuyển và xoay không gian, ta có đƣợc không gian làm việc của robot nhƣ sau:
90
2.3.2 Lựa chọn robot
Trong cửa sổ Virtual ROBOT, chọn [File] - [Mechanism Registration]
Vào C: AX_ONDESK/RobView/Mechanisms chọn file MC20-01.mec
92
BÀI 2: MÔ PHỎNG HOẠT ĐỘNG CỦA ROBOT CÔNG NGHIỆP NACHI MC20-01 VỚI HỆ THỐNG XỬ LÝ ẢNH
BẰNG PHẦN MỀM AX ON DESK