Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 114 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
114
Dung lượng
2,39 MB
Nội dung
BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI NGUYỄN THỊ CHÂU NGHIÊNCỨU,XÂYDỰNGCƠSỞDỮLIỆU CAD/ CAM VÀỨNGDỤNGTRONGCHẾTẠOMẪU Chuyên ngành: CÔNG NGHỆ CHẾTẠO MÁY LUẬN VĂN THẠC SỸ KHOA HỌC CÔNG NGHỆ CHẾTẠO MÁY NGƯỜI HƯỚNG DẪN KHOA HỌC TS BÙI NGỌC TUYÊN Hà Nội tháng năm 2012 LỜI CAM ĐOAN Tên là: Nguyễn Thị Châu Học viên lớp: Cao học Công nghệ CTM 2009 Dưới hướng dẫn TS Bùi Ngọc Tuyên nhận nghiên cứu đề tài: “Nghiên cứu,xâydựngsởliệu CAD/ CAM ứngdụngchếtạo mẫu” Tôi xin cam đoan, luận văn trình nghiên cứu thân Nếu có sai sót xin chịu hoàn toàn trách nhiệm Hà Nội, ngày 20 tháng năm 2012 Người cam đoan Nguyễn Thị Châu MỤC LỤC TRANG LỜI CAM ĐOAN MỤC LỤC DANH MỤC CÁC HÌNH VẼ, ĐỒ THỊ MỞ ĐẦU Lý chọn đề tài Mục đích, đối tượng phạm vi nghiên cứu đề tài Ý nghĩa khoa học ý nghĩa thực tiễn đề tài 3.1 Ý nghĩa khoa học đề tài 3.2 Ý nghĩa thực tiễn đề tài .10 TỔNG QUAN .12 Phương pháp nghiên cứu .12 Nội dung cần giải đề tài 12 CHƯƠNG I: CƠSỞDỮLIỆU CAD .14 1.1.Mô hình khung dây 14 1.1.1 Đường thẳng .14 1.1.2 Đường tròn 16 1.1.3 Elip 17 1.1.4 Đường cong Hermite 19 1.1.5 Đường cong Bezier 22 1.1.6.Đường cong B- Spline 25 1.2 Mô hình bề mặt .30 1.2.1 Phương pháp biểu diễn bề mặt CAD 30 1.2.2 Biểu diễn bề mặt 31 1.3 Mô hình khối rắn 39 1.3.1 Hình học khối rắn ( Constructive Solid Geometry – CSG) 39 1.3.2 Mô hình biểu diễn B-rep 43 CHƯƠNG II: PHƯƠNG PHÁP XÂYDỰNGCƠSỞDỮLIỆU CAD .48 2.1 Kỹ thuật thuận .48 2.1.1 Quá trình thiết kế chếtạo sản phẩm 48 2.1.2 Một số phần mềm CAD CAD/CAM 49 2.1.3 Giới thiệu phần mềm ứngdụng CATIA 50 2.2 Kỹ thuật ngược .54 2.2.1.Giới thiệu tổng quan Reverse Enigeering 58 2.2.2 Sử dụng máy đo tọa độ BROWN &SHARP 544 với phần mềm PC-DMIS xâydựng mô hình CAD 60 2.2.3.Ứng dụng .63 CHƯƠNG III : THỰC NGHIỆM XÂYDỰNGCƠSỞDỮLIỆU CAD/ CAM VÀCHẾTẠOMẪU 65 3.1 Ứngdụng kỹ thuật thuận thiết kế mô hình mẫu .65 3.1.1 Trình tự thiết kế bề mặt tự CATIA 65 3.1.1.Các bước thiết kế chuột CATIA 67 3.2 Thực nghiêm xâydựng CSDL CAM CATIA 70 3.3 Thực nghiệm gia công mẫu chuột máy tính mini máy phay CNC 72 3.3.1.Cơ sở, thiết bị, dụng cụ thí nghiệm: 72 3.3.2 Cơsở vật chất: 72 3.3.3 Tiến hành gia công .74 CHƯƠNG IV:ỨNG DỤNG KỸ THUẬT NGƯỢC TRONG KIỂM TRA MẪU GIA CÔNG VÀ ĐÁNH GIÁ KẾT QUẢ 80 4.1 Nội dung phương pháp .80 4.1.1 Quy trình kỹ thuật ngược 80 4.1.2 Ứngdụng kỹ thuật ngược chếtạo 81 4.2 Thực nghiệm ứngdụng phương pháp kiểm mẫuchếtạo 83 4.2.1 Đo quét mẫu đầu quét laze Renishaw VIVID910D hãng KONICA MINOTA 83 4.2.2 Xử lý sốliệu phần mềm kiểm tra mặt tự 84 4.2.3 Điều kiện thực nghiệm kiểm tra bề mặt chuột mini 84 4.2.3 Nội dung tiến hành thực nghiệm kiểm tra bề mặt mẫu 85 4.2.4 Nhận xét đánh giá kết thực nghiệm 89 KẾT LUẬN VÀ HƯỚNG NGHIÊN CỨU TIẾP THEO .91 Kết luận .91 Kiến nghị hướng nghiên cứu .91 DANH MỤC CÁC HÌNH VẼ ĐỒ THỊ Hình 1.1 Mô hình khung dây 14 Hình 1.2 Biểu diễn đoạn thẳng 14 Hình 1.3 Xác định L 16 Hình 1.4 Biểu diễn đường tròn 17 Hình 1.5 Biểu diễn elip 17 Hình 1.6 Điểm đường cong tham số bậc ba .19 Hình 1.7 Thêm vào đoạn đường cong tham số bậc ba 19 Hình 1.8 Đường cong Bezier thỏa mãn tính chất thân lồi 23 Hình 1.9 Sự thay đổi cưa đường cong Bezier di chuyển điểm điều khiển 23 Hình 1.12 Đường cong Bezier điều khiển khu vực thiếu 25 Hình 1.13.Nội suy B- spline 26 Hình 1.14 Mặt phẳng qua điểm 31 Hình 1.16 Mặt phẳng qua điểm hướng .33 Hình 1.17.Phương trình tham số bề mặt kẻ 33 Hình 1.18 Bề mặt tròn xoay .34 Hình 1.21.Biểu diễn tham số bề mặt trụ .3 Hình 1.18 Mảnh bậc Bezier 41 Hình 1.19 Mảnh bề mặt tam giác .38 Hình 1.22 Bề mặt Bezier tam giác .39 Hình 1.23 Mô hình khối rắn sở .41 Hình 1.24 Biểu đồ Venn 42 Hình 1.25 Cây CSG .42 Hình 1.26 Mô hình biểu diễn B- rep 45 Hình 1.27 Mô hình B- rep vật thể 46 Hình 2.1.Chu trình sản phẩm 48 Hình 2.2 Môi trường vẽ phác thảo CATIA .51 Hình 2.3 Môi trường thiết kế chi tiết .52 Hình 2.4 Một số công cụ sử dụng thiết kế chi tiết .54 Hình 2.5 Một số thiết bị số hóa sử dụng kỹ thuật ngược 55 Hình 2.6 Sơ đồ thực trình số hoá lặp 57 Hình 2.7 Sơ đồ quét kiểu LINEAR CLOSE .61 Hình 2.8: Direction drrection cho Patch 62 Hình 2.9: Sơ đồ quét kiểu Patch 62 Hình 2.10: Định dạng tam giác file STL .63 Hình 3.1 Hình thành lưới bề mặt CATIA 65 Hình 3.2 Bề mặt hình thành sau thiết kế xong 66 Hình 3.3 Sửa lại lưới bề mặt để tạo bề mặt theo yêu cầu 66 Hình 3.4 Bề sửa cách sửa tọa độ điểm 67 Hình 3.5 Bề mặt tự hình thành .67 Hình 3.6 Biên dạng chuột hình thành .68 Hình 3.7 Tạo hai cạnh vát bên cạnh chuột 68 Hình 3.8 Dùng lệnh cắt, chỉnh sửa bề mặt chuột .69 Hình 3.9 Mẫu chuột đầy đủsở vừa tạo 69 Hình 3.10 Sản phẩm bề mặt chuột thiết kế CATIA V5R19 .70 Hình 3.11 Chi tiết đưa vào Module gia công 70 Hình 3.12 Tạo phôi .71 Hình 3.13 Phôi tạo, Rough stock xuất thư mục 71 Hình 3.14 Mô gia công CATIA 72 Hình 3.15 Phôi đưa vào không gian gia công CATIA 75 Hình 3.16 Phôi đưa vào gia công dạng mặt STL có độ phân giải thấp .76 Hình 3.17 Phôi đưa vào gia công dạng mặt STL có độ phân giải cao 77 Hình 4.1 Sơ đồ kỹ thuật ngược 80 Hình 4.2 Giai đoạn quét mẫu .82 Hình 4.2 Một nửa mô hình người tạo dạng lưới điểm 82 Hình 4.4 Mô hình người tạo dạng lưới điểm 82 Hình 45 Mô hình đầu người hoàn chỉnh hình thành dạng mặt NURBS 82 Hình 4.6 Mô hình mặt người gia công máy CNC 83 Hình 4.7 Bề mặt “mau1.txt” “chitiet1.txt” trước sau thực chương trình kiểm tra 85 Hình 4.8 Bề mặt “mau1.txt” “chitiet2.txt” trước sau thực chương trình kiểm .87 Hình 4.9 Bề mặt “mau1.txt” “chitiet3.txt” trước sau thực chương trình kiểm tra 88 MỞ ĐẦU Lý chọn đề tài “Nghiên cứu,xâydựngsởliệu CAD/ CAM ứngdụngchếtạo mẫu” Hệ thống CAD/ CAM/ CNC ngày sử dụng rộng rãi sản xuất công nghiệp nước ta Nắm vững cấu trúc hệ thống phát triển nhằm nâng cao hiệu kinh tế bước góp phần đại hóa ngành công nghiệp nước nhà vấn đề đặt cho tất nhà làm kỹ thuật Bề mặt sản phẩm sản xuất công nghiệp đa dạng phức tạp, để thiết kế chếtạo thuận lợi người ta sử dụng máy tính để trợ giúp trình Lĩnh vực thiết kế mô tả bề mặt gia công máy tính gọi CAMM (Computer Aided Modeling Machining), đóng vai trò quan trọng hệ CAD/ CAM/ CNC Việc nghiêncứu,xâydựngsởliệu CAD/ CAM ứngdụngchếtạomẫu nhằm giúp nhà kỹ thuật hiểu rõ trình hình thành bề mặt chi tiết thiết kế chếtạo sản phẩm thực, qua nắm bắt sai sót mắc phải trình thiết kế chếtạo nhằm mục đích tối ưu hóa sản phẩm trình tạo chúng để có sản phẩm đạt hiệu cao Vì việc Nghiêncứu,xâydựngsởliệu CAD/ CAM ứngdụngchếtạo việc cấp thiết, lý mà tác giả lựa chọn nghiên cứu đề tài Mục đích, đối tượng phạm vi nghiên cứu đề tài - Nắm vững lý thuyết sởliệu CAD/CAM - Nêu phương pháp xâydựngsởliệu CAD - Ứngdụng khai khai thác phần mềm CAD/CAM CATIA Ý nghĩa khoa học ý nghĩa thực tiễn đề tài 3.1 Ý nghĩa khoa học đề tài Ngày công nghệ CAD/CAM/CNC công nghệ tái tạo ngược ứngdụng nhiều thực tế sản xuất sản phẩm khí chất lượng cao, nhờ vào công nghệ mà sản xuất sản phẩm khí chất lượng có tính kinh tế kỹ thuật cao đem lại hiệu kinh tế to lớn ngành khí chếtạo Hiện tại, với chế mở cửa thu hút nhà đầu tư nước, đặc biệt nhà đầu tư nước đem đến cho công nghiệp nước nhà diện mạo Khi nhà đầu tư nước vào nước nhà không đem đến phương pháp quản lý đại, mà với thiết bị tối tân trợ giúp trình tạo sản phẩm cách nhanh chóng, dễ dàng xác phần mềm CAD/CAM/CAE đóng vai trò vô quan trọng khâu thiết kế, chế tạo, mô kiểm tra chất lượng sản phẩm trước ứngdụng sản xuất hàng loạt Cùng với việc thành thạo sử dụng loại phần mềm hỗ trợ thiết kế, chế tạo, mô phỏng, kiểm tra chất lượng sản phẩm trước vào sản xuất việc tìm hiểu điểm mấu chốt, cốt lõi để làm nên chất lượng chúng Qua có hiểu biết cần thiết tiến tới cải tiến nhằm phù hợp với phát triển không ngừng khoa học Không có bất biến, tri thức lại không Càng ngày kho tri thức khổng lồ thêm Vì vậy, kiến thức nhân loại ứngdụng hôm chưa dùng tốt cho ngày mai Việc nghiên cứu NURBS nằm xu Trong trình nghiêncứu, thấy hay, thấy tốt dùng để ứngdụng đạt hiệu tối ưu Nếu thời điểm thấy hướng hay tìm cách cải tiến theo hướng 99 plot3(mau(1,:),mau(2,:),mau(3,:),'b*'); plot3(diem(1,:),diem(2,:),diem(3,:),'m*'); view(3); %sai so ER = rms_error(data, diem); Thuật toán "laydiem.m" clear clc % get num A = importdata('filediem.txt'); n = length(A.data); for i = 1:n tg_x = A.textdata{i,2}; x_tg=str2num(tg_x); mt_x(i,1)=x_tg; tg_y = A.textdata{i,4}; y_tg=str2num(tg_y); mt_y(i,1)=y_tg; end nguon = [mt_x mt_y A.data]; Thuật toán " ICP.m" function [TR, TT, ER, t] = icp(q,p,varargin) % Perform the Iterative Closest Point algorithm on three dimensional point % clouds % 100 % [TR, TT] = icp(q,p) returns the rotation matrix TR and translation % vector TT that minimizes the distances from (TR * p + TT) to q % p is a 3xm matrix and q is a 3xn matrix % % [TR, TT] = icp(q,p,k) forces the algorithm to make k iterations % exactly The default is 10 iterations % % [TR, TT, ER] = icp(q,p,k) also returns the RMS of errors for k % iterations in a (k+1)x1 vector ER(0) is the initial error % % [TR, TT, ER, t] = icp(q,p,k) also returns the calculation times per % iteration in a (k+1)x1 vector t(0) is the time consumed for preprocessing % % Additional settings may be provided in a parameter list: % % Boundary % {[]} | 1x? vector % If EdgeRejection is set, a vector can be provided that indexes into % q and specifies which points of q lay on the boundary % % EdgeRejection % {false} | true % If EdgeRejection is true, point matches to edge vertices of q are % ignored Requires that boundary points of q are specified using % Boundary or that a triangulation matrix for q is provided % % Extrapolation 101 % {false} | true % If Extrapolation is true, the iteration direction will be evaluated % and extrapolated if possible using the method outlined by % Besl and McKay 1992 % % Matching % {bruteForce} | Delaunay | GLtree | kDtree % Specifies how point matching should be done % bruteForce is usually the slowest and GLtree is the fastest % Note that the GLtree option is depending on the GLtree3DFEX % implementation at Matlab Central File ID: #24607 % Note that the kDtree option is depends on the Statistics Toolbox % v 7.3 or higher % normalShooting finds the point closest to the normal line surface % intersection using kdTrees It can only be used with point to point % minimization without EdgeRejection % % Minimize % {point} | plane | lmaPoint % Defines whether point to point or point to plane minimization % should be performed point is based on the SVD approach and is % usually the fastest plane will often yield higher accuracy It % uses linearized angles and requires surface normals for all points % in q Calculation of surface normals requires substantial pre % proccessing % The option lmaPoint does point to point minimization using the non % linear least squares Levenberg Marquardt algorithm Results are 102 % generally the same as in points, but computation time may differ % % Normals % {[]} | n x matrix % A matrix of normals for the n points in q might be provided % Normals of q are used for point to plane minimization % Else normals will be found through a PCA of the nearest % neighbors % % NormalsData % {[]} | m x matrix % A matrix of normals for the m points in p might be provided % Normals of p are used for normalShooting matching % Else normals will be found through a PCA of the nearest % neighbors % % ReturnAll % {false} | true % Determines whether R and T should be returned for all iterations % or only for the last one If this option is set to true, R will be % a 3x3x(k+1) matrix and T will be a 3x1x(k+1) matrix % % Triangulation % {[]} | ? x matrix % A triangulation matrix for the points in q can be provided, % enabling EdgeRejection The elements should index into q, defining % point triples that act together as triangles 103 % % Verbose % {false} | true % Enables extrapolation output in the Command Window % % Weight % {@(match)ones(1,m)} | Function handle % For point or plane minimization, a function handle to a weighting % function can be provided The weighting function will be called % with one argument, a 1xm vector that specifies point pairs by % indexing into q The weighting function should return a 1xm vector % of weights for every point pair % % WorstRejection % {0} | scalar in ]0; 1[ % Reject a given percentage of the worst point pairs, based on their % Euclidean distance % % Martin Kjer and Jakob Wilm, DTU, 2010 % Use the inputParser class to validate input arguments inp = inputParser; inp.addRequired('q', @(x)isreal(x) && size(x,1) == 3); inp.addRequired('p', @(x)isreal(x) && size(x,1) == 3); inp.addOptional('iter', 10, @(x)x > && x < 10^5); inp.addParamValue('Boundary', [], @(x)size(x,1) == 1); 104 inp.addParamValue('EdgeRejection', false, @(x)islogical(x)); inp.addParamValue('Extrapolation', false, @(x)islogical(x)); validMatching = {'bruteForce','normalShooting','Delaunay','GLtree','kDtree'}; inp.addParamValue('Matching', 'bruteForce', @(x)any(strcmpi(x,validMatching))); validMinimize = {'point','plane','lma_point'}; inp.addParamValue('Minimize', 'point', @(x)any(strcmpi(x,validMinimize))); inp.addParamValue('Normals', [], @(x)isreal(x) && size(x,1) == 3); inp.addParamValue('NormalsData', [], @(x)isreal(x) && size(x,1) == 3); inp.addParamValue('ReturnAll', false, @(x)islogical(x)); inp.addParamValue('Triangulation', [], @(x)isreal(x) && size(x,2) == 3); inp.addParamValue('Verbose', false, @(x)islogical(x)); inp.addParamValue('Weight', @(x)ones(1,length(x)), @(x)isa(x,'function_handle')); inp.addParamValue('WorstRejection', 0, @(x)isscalar(x) && x > && x < 1); inp.parse(q,p,varargin{:}); arg = inp.Results; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%% % Allocate vector for RMS of errors in every iteration t = zeros(arg.iter+1,1); tic; % Actual implementation Np = size(p,2); Nq = size(q,2); % Transformed data point cloud pt = p; % Allocate vector for RMS of errors in every iteration 105 ER = zeros(arg.iter+1,1); % Initialize temporary transform vector and matrix T = zeros(3,1); R = eye(3,3); % Initialize total transform vector(s) and rotation matric(es) TT = zeros(3,1, arg.iter+1); TR = repmat(eye(3,3), [1,1, arg.iter+1]); % If Minimize == 'plane', normals are needed if (strcmp(arg.Minimize, 'plane') && isempty(arg.Normals)) arg.Normals = lsqnormest(q,4); end % If Matching == 'Delaunay', a triangulation is needed if strcmp(arg.Matching, 'Delaunay') DT = DelaunayTri(transpose(q)); end % If Matching == 'GLtree', a GL tree should be built if strcmp(arg.Matching, 'GLtree') GLPNTR = BuildGLTree3DFEX(transpose(q)); end % If Matching == 'kDtree', a kD tree should be built (req Stat TB >= 7.3) if strcmp(arg.Matching, 'kDtree') || strcmp(arg.Matching, 'normalShooting') kdOBJ = KDTreeSearcher(transpose(q)); end % If edge vertices should be rejected, find edge vertices if arg.EdgeRejection if isempty(arg.Boundary) bdr = find_bound(q, arg.Triangulation); 106 else bdr = arg.Boundary; end end if arg.Extrapolation % Initialize total transform vector (quaternion ; translation vec.) qq = [ones(1,arg.iter+1);zeros(6,arg.iter+1)]; % Allocate vector for direction change and change angle dq = zeros(7,arg.iter+1); theta = zeros(1,arg.iter+1); end t(1) = toc; % Go into main iteration loop for k=1:arg.iter % Do matching switch arg.Matching case 'bruteForce' [match mindist] = match_bruteForce(q,pt); case 'Delaunay' [match mindist] = match_Delaunay(q,pt,DT); case 'GLtree' [match mindist] = match_GLtree(q,pt,GLPNTR); case 'kDtree' [match mindist] = match_kDtree(q,pt,kdOBJ); end % If matches to edge vertices should be rejected 107 if arg.EdgeRejection p_idx = not(ismember(match, bdr)); q_idx = match(p_idx); mindist = mindist(p_idx); else p_idx = true(1, Np); q_idx = match; end % If worst matches should be rejected if arg.WorstRejection edge = round((1-arg.WorstRejection)*sum(p_idx)); pairs = find(p_idx); [~, idx] = sort(mindist); p_idx(pairs(idx(edge:end))) = false; q_idx = match(p_idx); mindist = mindist(p_idx); end if k == ER(k) = sqrt(sum(mindist.^2)/length(mindist)); end switch arg.Minimize case 'point' % Determine weight vector weights = arg.Weight(match); [R,T] = eq_point(q(:,q_idx),pt(:,p_idx), weights(p_idx)); case 'plane' weights = arg.Weight(match); 108 [R,T] = eq_plane(q(:,q_idx),pt(:,p_idx),arg.Normals(:,q_idx),weights(p_idx)); case 'lmaPoint' [R,T] = eq_lmaPoint(q(:,q_idx),pt(:,p_idx)); end % Add to the total transformation TR(:,:,k+1) = R*TR(:,:,k); TT(:,:,k+1) = R*TT(:,:,k)+T; % Apply last transformation pt = TR(:,:,k+1) * p + repmat(TT(:,:,k+1), 1, Np); % Root mean of objective function ER(k+1) = rms_error(q(:,q_idx), pt(:,p_idx)); % If Extrapolation, we might be able to move quicker if arg.Extrapolation qq(:,k+1) = [rmat2quat(TR(:,:,k+1));TT(:,:,k+1)]; dq(:,k+1) = qq(:,k+1) - qq(:,k); theta(k+1) = (180/pi)*acos(dot(dq(:,k),dq(:,k+1))/(norm(dq(:,k))*norm(dq(:,k+1)))); if arg.Verbose disp(['Direction change ' num2str(theta(k+1)) ' degree in iteration ' num2str(k)]); end if k>2 && theta(k+1) < 10 && theta(k) < 10 d = [ER(k+1), ER(k), ER(k-1)]; v = [0, -norm(dq(:,k+1)), -norm(dq(:,k))-norm(dq(:,k+1))]; vmax = 25 * norm(dq(:,k+1)); dv = extrapolate(v,d,vmax); if dv ~= q_mark = qq(:,k+1) + dv * dq(:,k+1)/norm(dq(:,k+1)); q_mark(1:4) = q_mark(1:4)/norm(q_mark(1:4)); 109 qq(:,k+1) = q_mark; TR(:,:,k+1) = quat2rmat(qq(1:4,k+1)); TT(:,:,k+1) = qq(5:7,k+1); % Reapply total transformation pt = TR(:,:,k+1) * p + repmat(TT(:,:,k+1), 1, Np); % Recalculate root mean of objective function % Note this is costly and only for fun! [~, mindist] = match_kDtree(q,pt,kdOBJ); ER(k+1) = sqrt(sum(mindist.^2)/length(mindist)); end end end t(k+1) = toc; end if not(arg.ReturnAll) TR = TR(:,:,end); TT = TT(:,:,end); end %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% function [match mindist] = match_bruteForce(q, p) m = size(p,2); n = size(q,2); match = zeros(1,m); mindist = zeros(1,m); for k=1:m 110 d=zeros(1,n); for t=1:3 d=d+(q(t,:)-p(t,k)).^2; end [mindist(k),match(k)]=min(d); end mindist = sqrt(mindist); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%% function [match mindist] = match_Delaunay(q, p, DT) match = transpose(nearestNeighbor(DT, transpose(p))); mindist = sqrt(sum((p-q(:,match)).^2,1)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% function [match mindist] = match_GLtree(q, p, GLPNTR) [match mindist] = NNSearch3DFEX(transpose(q), transpose(p), GLPNTR); match = transpose(match); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% function [match mindist] = match_kDtree(~, p, kdOBJ) [match mindist] = knnsearch(kdOBJ,transpose(p)); match = transpose(match); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% function [R,T] = eq_point(q,p,weights) m = size(p,2); n = size(q,2); 111 % normalize weights weights = weights / sum(weights); % find data centroid and deviations from centroid q_bar = q * transpose(weights); q_mark = q - repmat(q_bar, 1, n); % Apply weights q_mark = q_mark * repmat(weights, 3, 1); % find data centroid and deviations from centroid p_bar = p * transpose(weights); p_mark = p - repmat(p_bar, 1, m); % Apply weights %p_mark = p_mark * repmat(weights, 3, 1); N = p_mark*transpose(q_mark); % taking points of q in matched order [U,~,V] = svd(N); % singular value decomposition R = V*transpose(U); T = q_bar - R*p_bar; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% function [R,T] = eq_plane(q,p,n,weights) n = n * repmat(weights,3,1); c = cross(p,n); cn = vertcat(c,n); C = cn*transpose(cn); b = - [sum(sum((p-q).*repmat(cn(1,:),3,1).*n)); sum(sum((p-q).*repmat(cn(2,:),3,1).*n)); sum(sum((p-q).*repmat(cn(3,:),3,1).*n)); sum(sum((p-q).*repmat(cn(4,:),3,1).*n)); 112 sum(sum((p-q).*repmat(cn(5,:),3,1).*n)); sum(sum((p-q).*repmat(cn(6,:),3,1).*n))]; X = C\b; cx = cos(X(1)); cy = cos(X(2)); cz = cos(X(3)); sx = sin(X(1)); sy = sin(X(2)); sz = sin(X(3)); R = [cy*cz cz*sx*sy-cx*sz cx*cz*sy+sx*sz; cy*sz cx*cz+sx*sy*sz cx*sy*sz-cz*sx; -sy cy*sx cx*cy]; T = X(4:6); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% function [R,T] = eq_lmaPoint(q,p) Rx = @(a)[1 0; cos(a) -sin(a); sin(a) cos(a)]; Ry = @(b)[cos(b) sin(b); 0; -sin(b) cos(b)]; Rz = @(g)[cos(g) -sin(g) 0; sin(g) cos(g) 0; 0 1]; Rot = @(x)Rx(x(1))*Ry(x(2))*Rz(x(3)); myfun = @(x,xdata)Rot(x(1:3))*xdata+repmat(x(4:6),1,length(xdata)); 113 options = optimset('Algorithm', 'levenberg-marquardt'); x = lsqcurvefit(myfun, zeros(6,1), p, q, [], [], options); R = Rot(x(1:3)); T = x(4:6); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% function [dv] = extrapolate(v,d,vmax) p1 = polyfit(v,d,1); % linear fit p2 = polyfit(v,d,2); % parabolic fit v1 = -p1(2)/p1(1); % linear zero crossing v2 = -p2(2)/(2*p2(1)); % polynomial top point if issorted([0 v2 v1 vmax]) || issorted([0 v2 vmax v1]) disp('Parabolic update!'); dv = v2; elseif issorted([0 v1 v2 vmax]) || issorted([0 v1 vmax v2]) || (v2 < && issorted([0 v1 vmax])) disp('Line based update!'); dv = v1; elseif v1 > vmax && v2 > vmax disp('Maximum update!'); dv = vmax; else disp('No extrapolation!'); dv = 0; end ... 60 2.2.3 .Ứng dụng .63 CHƯƠNG III : THỰC NGHIỆM XÂY DỰNG CƠ SỞ DỮ LIỆU CAD/ CAM VÀ CHẾ TẠO MẪU 65 3.1 Ứng dụng kỹ thuật thuận thiết kế mô hình mẫu .65 3.1.1... việc nghiên cứu cách đầy đủ sở liệu để hình thành bề mặt ứng dụng CAD/CAM vào thiết kế, chế tạo sản phẩm hạn chế mang tính riêng rẽ Có đề tài sâu vào nghiên cứu ứng dụng CAD/CAM thiết kế chế tạo, ... kế chế tạo nhằm mục đích tối ưu hóa sản phẩm trình tạo chúng để có sản phẩm đạt hiệu cao Vì việc Nghiên cứu, xây dựng sở liệu CAD/ CAM ứng dụng chế tạo việc cấp thiết, lý mà tác giả lựa chọn nghiên