5 Nội dung nghiên cứu
2.5.3 Chuỗi phân loại tập trung (Attentional Cascade)
Phần này mô tả thuật toán để xây dựng một chuỗi các bộ phân loại nhằm tăng hiệu quả phát hiện đồng thời giảm triệt để thời gian tính toán. Chìa khóa của vấn đề là một bộ phân loại kích thước nhỏ nhưng hiệu quả có thể được xây dựng qua việc loại bỏ các khung hình phụ âm (negative sub-window) trong khi tìm kiếm trong tất cả các trường hợp dương ( chẳng hạn điều chỉnh ngưỡng của bộ phân loại để các trường hợp bị phát hiện nhầm là âm giảm về không). Các bộ phân loại đơn giản thì được sử dụng trước tiên để loại bỏ phần lớn các khung hình phụ trước khi các bộ phân lọai phức tạp được gọi.
Toàn bộ quá trình phát hiện có thể được mô tả bằng một cây quyết định suy giảm dần mà ta gọi là chuỗi phân loại (cascade). Một kết quả dương của bộ phân loại trước sẽ kích họat việc đánh giá của bộ
phân loại sau, và kết quả dương của bộ phân loại này lại kích hoạt bộ phân loại sau nữa,…Bất cứ kết quả âm của tầng phân loại nào cũng sẽ loại bỏ khung hình phụ đó.
Ví dụ như tầng đầu tiên đạt hiệu quả cao được xây dựng từ bộ phân loại hai thuộc tính ‘mạnh’ bằng cách giảm ngưỡng để hạn chế mẫu bị nhầm là âm. Việc tính toán của tầng này sẽ tốn mất 60 lệnh vi xử lý, do đó khó có thể tìm ra một bộ lọc đơn giản nào cho hiệu suất hơn.
Hình 2.17 Sơ đồ của chuỗi phát hiện (Detection Cascade)
Cấu trúc của chuỗi phát hiện phản ánh một điều là trong một ảnh đơn bất kỳ, một lượng lớn các khung hình phụ sẽ là âm. Do đó, chuỗi phát hiện cố gắng lọai bỏ càng nhiều khung hình âm ở những tầng đầu tiên càng tốt.
Do có hình dạng cây quyết định, các bộ phân loại sau sẽ được huấn luyện trên các mẫu được thông qua ở tất cả các tầng trước. Kết quả là, công việc của tầng sau sẽ khó hơn ở tầng trước. Do các mẫu được đưa đến các tầng sau thường khó nhận dạng hơn các mẫu đển hình nên ở các tầng này tỉ lệ nhận dạng nhầm là sai cao hơn.
2.5.4 Huấn luyện một chuỗi phát hiện
Quá trình huấn luyện chuỗi phát hiện liên quan đến việc dung hòa hai vấn đề. Chuỗi phát hiện với nhiều thuộc tính hơn sẽ nhận dạng chính xác hơn và tỉ lệ nhận nhầm là âm sẽ thấp hơn. Tuy nhiên, chuỗi phát hiện với nhiều thuộc tính đòi hỏi thời gian tính toán nhiều hơn. Về nguyên tắc, ta có thể định nghĩa một cấu trúc tối ưu mà trong đó : số tầng, số thuộc tính mỗi tầng và ngưỡng của mỗi tầng phải được dung hòa để tối thiểu hóa số thuộc tính. Việc tìm ra cấu trúc tối ưu này rất là khó khăn.
Trên thực tế, một cấu trúc rất đơn giản để tạo ra một bộ phân loại hiệu suất cao. Mục tiêu được chọn là giảm tối thiểu việc phân loại nhầm là dương và tối đa hiệu suất phát hiện đúng. Mỗi tầng được thêm các thuộc tính để cho đến khi tỉ lệ phân loại nhầm là dương và tỉ lệ tìm kiếm đúng đạt được và được kiểm tra lại bằng một tập mẫu kiểm chứng. Các tầng được thêm vào chuỗi phân loại cho đền khi đạt yêu cầu về tỉ lệ phát hiện nhầm là dương và phát hiện đúng.
Hình 2.18 Một phần tập mẫu các khuôn mặt nhìn thẳng dùng trong huấn luyện.
2.6 THƯ VIỆN XỬ LÝ ẢNH OPENCV CỦA INTEL : 2.6.1 Giới thiệu :
OpenCV là thư viện mở dùng cho xử lý ảnh trên máy tính (computer vision) có sẵn trên trang
http://SourceForge.net/projects/OpenCVlibrary. OpenCV được thiết kế để làm cho việc tính toán trở
nên thuận tiện hơn với các ứng dụng thời gian thực. Một trong những mục tiêu của OpenCV là cung cấp một cấu trúc thị giác máy tính dễ sử dụng cho người dùng để có thể xây dựng các ứng dụng xử lý ảnh tương đối phức tạp một cách nhanh chóng. Thư viện OpenCV chứa hơn 500 hàm có thể ứng dụng trong nhiều lĩnh vực như giám sát nhà máy, phân tích ảnh y khoa, an ninh và robotic. Do thị giác máy tính và việc học máy ( machine learning) thường đi đôi với nhau nên OpenCV cũng kèm theo thư viện học máy đầy đủ Machine Learning Library (MLL). Thư viện phụ này vào việc nhận dạng (
recognition ) và việc xếp nhóm ( clustering).
2.6.2 Các thành phần chức năng của OpenCv:
CXCORE : chứa các định nghĩa về các kiểu dữ liệu cơ sở. Ví dụ các cấu trúc dữ liệu cho ảnh, điểm và hình chữ nhật được định nghĩa trong cxtypes.h. CXCORE cũng chứa các đại số tuyến tính ( linear algebra), phương pháp thống kê ( statistic method), chức năng duy trì và điều khiển chuỗi. Một số ít các chức năng đồ họa để vẽ trên ảnh cũng đặt ở đây.
CV : chứa các thuật toán về xử lý ảnh và định kích cỡ camera, các chức năng hình họa máy tính (computational geometry function) cũng được đặt ở đây.
CVAUX : được mô tả trong tài liệu của OpenCv là chứa các mã đã lỗi thời và các mã thử nghiệm. Tuy nhiên các giao diện đơn cho phần nhận diện khuôn mặt cũng trong module này.
HIGHGUI và CVCAM được đặt trong cùng thư mục là "otherlibs" HIGHGUI : chứa các giao diện vào ra cơ bản và các khả năng cửa sổ đa nền tảng. CVCAM : chứa các giao diện cho video truy cập qua DirectX trên nền Windows 32 bits.
2.6.3 Cấu trúc ảnh IplImage
IplImage là định dạng ảnh được giới thiệu và phát triển bởi Intel. Chuẩn IplImage được sử dụng rộng rãi trong xử lý ảnh, tối ưu hóa quá trình xử lý nhờ quản lý các nhóm dữ liệu dưới dạng các Field. Quá trình xử lý được thực hiện trên các trường làm tăng khả năng linh hoạt và tốc độ xử lý dữ liệu. Định dạng IplImage được dùng rộng rãi trong các bộ thư viện xử lý ảnh như IPL ( Image Procesing Library) hay IPP ( Intergrated Performance Primitives), OpenCV, AMM,...
Cấu trúc IplImage trong OpenCV như sau:
typedef struct _IplImage {
int nSize; int ID;
int nChannels;
int alphaChannel; // OpenCV không sử dụng int depth;
char colorModel[4]; // OpenCV không sử dụng char channelSeq[4]; // OpenCV không sử dụng int dataOrder;
int origin;
int align; // OpenCV không sử dụng int width;
int height;
struct _IplImage *maskROI; // bằng NULL trong OpenCV
void *imageId; // bằng NULL trong OpenCV
struct _IplTileInfo *tileInfo; // bằng NULL trong OpenCV int imageSize;
char *imageData; int widthStep;
int BorderMode[4]; // OpenCV không sử dụng int BorderConst[4]; // OpenCV không sử dụng char *imageDataOrigin;
}
IplImage;
Các tham số:
nSize : Kích thước của ảnh
ID : Chỉ số version, luôn bằng 0
nChannels : Số kênh, các hàm của OpenCV đều hỗ trợ từ 1-4 kênh alphaChannel : OpenCV không sử dụng
depth : Chiều sâu của pixel theo bit, có các dạng sau : IPL_DEPTH_8U : unsigned 8-bit integer
IPL_DEPTH_8S : signed 8-bit integer IPL_DEPTH_16U : unsigned 16-bit interger
dataOder : 0 = IPL_DATA_ORDER_PIXEL Các kênh màu đan xen nhau, 1 = Các kênh màu tách rời
origin : Gốc tọa độ 0 = top-left origin, 1 = bottom-left origin width : Bề rộng ảnh theo pixel
height : Chiều cao ảnh theo pixel
roi Region of Interest (ROI) nếu bằng NULL thì chỉ có vùng ROI được xử lý
imageSize : Kích thước dữ liệu ảnh theo byte
imageData : Một pointer trỏ tới vùng địa chỉ ảnh
2.6.4 Các hàm dùng trong luận văn :
Thu nhận ảnh từ camera :
CvCapture* cvCaptureFromCAM(int index);
Trong đó index là chỉ số camera được sử dụng, nếu có 1 camera, index = -1 Chức năng : Thu nhận hình ảnh từ camera và trả về pointer có kiểu là CVCapture.
Giải phóng camera :
void cvReleaseCapture( CvCapture**capture);
Trong đó capture là địa chỉ của Pointer có kiểu cvCapture
Lấy hình từ camera :
IplImage* cvRetrieveFrame( CvCapture* capture); hay IplImage* cvQueryFrame( CvCapture* capture);
Đọc thuộc tính của camera
double cvGetCaptureProperty( CvCapture* capture, int property_id);
trong đó capture có kiểu CvCapture đại diện cho camera đang làm việc property_id có thể có các giá trị sau :
CV_CAP_PROP_POS_MSEC : Camera frame timestamp
CV_CAP_PROP_POS_FRAMES: 0-based index of the frame to be decoded/capture next. CV_CAP_PROP_POS_AVI_RATIO : (Dùng cho file avi)
CV_CAP_PROP_FRAME_EIDTH : Bề rộng của video stream CV_CAP_PROP_FRAME_HEIGHT: Bề cao của video stream CV_CAP_PROP_FPS : frame per second
CV_CAP_PROP_FRAME_COUNT : Số thứ tự của frame
Đặt thuộc tính cho camera
int cvSetCaptureProperty ( CvCapture* capture, int property_id, double value);
Trong đó capture có kiểu CvCapture* đại diện cho camera, property_id có các giá trị như trong phần đọc thuộc tính của camera, value là gía trị của thuộc tính.
Tạo một ảnh :
IplImage* cvCreateImage(CvSize size, int depth, int channels)
Hàm trả về một pointer trỏ đến hình ảnh có cấu trúc IplImage, trong đó : size : Kích thước ảnh
depth : Số bit biểu diễn độ sáng tại mỗi pixel channels : Số kênh
Giải phóng pointer trỏ tới ảnh:
void cvReleaseImage( IplImage** image);
Trong đó image là pointer trỏ tới hình ảnh có cấu trúc IplImage
void cvCopy( const CvArr* src, CvArr* dst, const CvArr* mask = NULL); Trong đó :
src : Ảnh nguồn dst : Ảnh đích
mask : Mặt nạ phủ lên ảnh nguồn nếu ta chỉ muốn copy một phần ảnh.
Xác định vùng ảnh cần xử lý (ROI)
void cvSetImageROI(IplImage* image, CvRect rect);
Trích một cùng ảnh ban đầu thành một vùng ảnh mới, nằm trong hình chữ nhật rect. Sau khi trích, image là pointer trỏ tới hình ảnh này.
Cân bằng histogram cho ảnh xám
Để thực hiện việc cân bằng histogram ta dùng hàm sau : CVAPI(void) cvEqualizeHist( const CvArr*scr, const CvArr* dst) Trong đó :
scr : Hình ảnh gốc ban đầu
dst : Hình ảnh sau khi cân bằng histogram
Phát hiện khuôn mặt trong ảnh
CvSeq* cvHaarDetectObjects(const CvArr* image, CvHaarClassifierCascade* cascade,
CvMemStorage* storage, double scale_factor=1.1, int min_neighbors = 3, int flags = 0,CvSize min_size = cvSize(0,0))
Trong đó:
image : Ảnh cần phát hiện
cascade : Chuỗi phân lọai Haar dùng cho tính tóan bên trong
storage : Vùng nhớ chứa các kết quả trung gian trong quá trình phân lọai
scale_factor : Tham số mà theo đó kích thước cửa sổ tìm kiếm tăng lên sau mỗi chu kì quét, mặc định là 1.1 tức tăng 10%
min_neighbors : Số nhỏ nhất các hình chữ nhật kế cận cùng phát hiện khuôn mặt. Điều này có
nghĩa khuôn mặt được phát hiện nếu có ít nhất một số hình chữ nhật có cùng kết quả dương chồng lấp lên nhau.
flags : Chế độ họat động, chỉ hỗ trợ HAAR_DO_CANNY_PRUNNING
min_size : Kích thước cửa sổ nhỏ nhất khi bắt đầu tìm kiếm, thường là 20x20 cho đối tượng là
khuôn mặt. Hàm này tìm các vùng hình chữ nhật trong hình có chứa khuôn mặt với chuỗi phân loại được huấn luyện và trả về một mảng các hình chữ nhật. Trước khi gọi hàm này ta phải load file dữ liệu trong OpenCv :
cascadefaces = (CvHaarClassifierCascade*)cvLoad(filename_face,NULL,NULL,NULL); với filename_face là đường dẫn đến file dữ liệu nằm trong phần dữ liệu của OpenCv.
Luận văn Thạc sĩ được bảo vệ tại Trường Đại học Kỹ thuật Công nghệ
TP. HCM ngày 25 tháng 01 năm 2014
Thành phần Hội đồng đánh giá Luận văn Thạc sĩ gồm:
(Ghi rõ họ, tên, học hàm, học vị của Hội đồng chấm bảo vệ Luận văn Thạc sĩ)
TT Họ và tên Chức danh hội đồng
1 PGS.TS. Nguyễn Tấn Tiến Chủ tịch
2 TS. Nguyễn Quốc Hưng Phản biện 1
3 TS. Nguyễn Hùng Phản biện 2
4 TS. Võ Hoàng Duy Ủy viên
5 TS. Ngô Cao Cường Ủy viên, thư ký
Xác nhận của Chủ tịch Hội đồng đánh giá Luận sau khi Luận văn đã được
sửa chữa (nếu có).
Chủ tịch Hội đồng đánh giá LV
NHIỆM VỤ LUẬN VĂN THẠC SĨ
Họ tên học viên: PHẠM QUỐC THIỆN Giới tính: Nam
Ngày, tháng, năm sinh: 22/2/1988 Nơi sinh:ĐỒNG NAI
Chuyên ngành: Kỹ thuật Cơ điện tử MSHV: 1241840017
I- TÊN ĐỀ TÀI:
ĐIỀU KHIỂN PHI TUYẾN HỆ AGV.
II- NHIỆM VỤ VÀ NỘI DUNG:
Nghiên cứu hệ thống AGV, mô hình hóa hệ thống AGV, thiết lập bộ điều khiển phi
tuyến trên cơ sở ổn định của Lyapunov. Chương 1: Mở đầu.
Chương 2: Tổng quan về AGV.
Chương 3: Mô hình toán học AGV.
Chương 4: Thiết kế bộ điều khiển và hệ thống đo lường.
Chương 5: Thiết kế, thi công AGV và mô phỏng hệ thống trên Matlab.
III- NGÀY GIAO NHIỆM VỤ:
IV- NGÀY HOÀN THÀNH NHIỆM VỤ:
V- CÁN BỘ HƯỚNG DẪN: TS. NGUYỄN THANH PHƯƠNG.
CÁN BỘ HƯỚNG DẪN KHOA QUẢN LÝ CHUYÊN NGÀNH
Tôi xin cam đoan đây là công trình nghiên cứu của riêng tôi. Các số liệu, kết
quả nêu trong Luận văn là trung thực và chưa từng được ai công bố trong bất kỳ
công trình nào khác.
Tôi xin cam đoan rằng mọi sự giúp đỡ cho việc thực hiện Luận văn này đã
được cảm ơn và các thông tin trích dẫn trong Luận văn đã được chỉ rõ nguồn gốc.
Học viên thực hiện Luận văn
(Ký và ghi rõ họ tên)
Sau thời gian học tập và nghiên cứu tại trường, nay tôi đã hoàn thành đề tài
tốt nghiệp cao học của mình. Để có được thành quả này, tôi đã nhận được rất nhiều
sự hỗ trợ và giúp đỡ tận tình từ thầy cô, gia đình và bạn bè.
Tôi xin chân thành cảm ơn quý Thầy cô khoa Quản Lý Khoa Học - Đào Tạo
Sau Đại Học, quý Thầy cô khoa Cơ - Điện - Điện Tử Trường Đại Học Kỹ Thuật
Công Nghệ TP.HCM đã tận tình giúp đỡ, hỗ trợ tôi trong suốt quá trình thực hiện
luận văn.
Với lòng tri ân sâu sắc, tôi muốn nói lời cám ơn đến Thầy TS. Nguyễn Thanh
Phương, người đã nhiệt tình hướng dẫn và chỉ bảo cho tôi trong suốt thời gian thực
hiện nghiên cứu này.
Tp. Hồ Chí Minh, tháng 02 năm 2014
Người thực hiện luận văn
Phạm Quốc Thiện
Trong bài báo này, một bộ điều khiển phi tuyến dựa trên phương pháp Lyapunov được đề xuất và áp dụng cho xe tự hành. Đầu tiên quỹ đạo − (G3) với đa
thức bậc 7 được thiết kế. Thứ hai, dựa vào vị trí được ước lượng của xe tự hành, bộ điều khiển này làm cho xe tự hành bám theo quỹ đạo G3 và di chuyển với vận vận
tốc không đổi. Sự ổn định của hệ thống được chứng minh bằng phương pháp
Lyapunov. Mô phỏng và kết quả thực nghiệm được trình bày để chứng minh tính
In this paper, a nonlinear controller base on Lyapunov method is proposed and
applied for wheel mobile robot (WMR). First, trajectory − (G3) with 7th
order polinom is designed for WMR. Then, based on the estimated position of the
WMR, this controller makes WMR follow trajectory G3 which is moving with
desired constant velocity. The stability of system is proved by the Lyapunov stability theory. The simulations and experimental results are shown to prove the effectiveness of the proposed controller.
Tên đề mục Trang
Lời cam đoan ... i Lời cảm ơn ... ii Tóm tắt luận văn ...iii Abstract ... iv Mục lục ... v Danh mục các từ viết tắt ... vii Danh mục các bảng biểu ...viii Danh mục các sơ đồ, hình ảnh ... ix
Chương 1: Mở đầu ... 1 1.1 Đặt vấn đề ... 1 1.2 Tính cấp thiết của đề tài ... 1 1.3 Mục tiêu đề tài ... 2 1.4 Nội dung nghiên cứu ... 2 1.5 Phương pháp luận ... 2 1.6 Phương pháp nghiên cứu ... 3 1.7 Nội dung luận văn ... 3
Chương 2: Tổng quan về AGV ... 4 2.1 Sơ lược quá trình phát triển của AGV ...4 2.2 Phân loại AGV...5 2.2.1 Tàu không người lái ...5 2.2.2 Xe nâng pallet ...6 2.2.3 Xe chở hàng ...7 2.3 Tóm tắt các công trình nghiên cứu ...8 2.4 Nhận xét và hướng tiếp cận ...32
Chương 3: Mô hình toán học của AGV ... 33 3.1 Cấu trúc AGV ... 33
3.3 Xây dựng quỹ đạo đường đi cho AGV ... 36
Chương 4: Thiết kế bộ điều khiển và hệ thống đo lường ... 39 4.1 Cơ sở lý thuyết ... 39 4.1.1 Giới thiệu phương pháp Lyapunov ...39 4.1.2 Điểm cân bằng của hệ phi tuyến ...39 4.1.3 Ổn định tại điểm cân bằng ...41 4.1.3.1 Định nghĩa ...41 4.1.3.2 Ổn định và ổn định tiệm cận Lyapunov ...41 4.1.4 Phương pháp tuyến tính hóa Lyapunov ...42 4.1.5 Phương pháp trực tiếp Lyapunov ...44 4.1.5.1 Định lý ổn định Lyapunov ...44
4.1.5.2 Định lý không ổn định Lyapunov ...45 4.2 Thiết kế bộ điều khiển ... 47 4.3 Hệ thống đo lường ... 48
Chương 5: Thiết kế thi công AGV và mô phỏng ... 51
5.1 Thiết kế mô hình ... 51