Nghiên cứu thiết kế, chế tạo các robot thông minh phục vụ cho các ứng dụng quan trọng - Nhóm sản phẩm ROBOT RE

MỤC LỤC I. Giới thiệu chung 3 II. Tổng quan về kỹ thuật tái hiện ngược và những vấn đề cơ bản về mô phỏng các đường cong, mặt cong không gian 7 2.1. Giới thiệu chung về kỹ thuật tái hiện ng-ợc 7 2.1.1. Quá trình thiết kế 7 2.1.2. Quá trình “sản xuất ng-ợc” 8 2.1.3. Quá trình kỹ thuật tái hiện ng-ợc 8 2.1.4. ứng dụng kỹ thuật tái hiện ng-ợc 9 2.1.5. Các loại đầu dò số hóa 10 2.1.6. Các máy đo phục vụ kỹ thuật tái hiện ng-ợc 11 2.2. Ph-ơng pháp mô tả đ-ờng cong trên máy tính 14 2.2.1. Các phép nội suy và xấp xỉ đ-ờng cong 14 2.3. Ph-ơng pháp mô tả các mặt cong trên máy tính 31 2.3.1. Giới thiệu chung về mặt cong 31 2.3.2. Các mặt cong tự do 32 2.4. Đặt vấn đề về nội dung nghiên cứu 37 III. Nghiên cứu thiết kế, chế tạo Robot RE 38 3.1. Nghiên cứu thiết kế, chế tạo Robot RE 38 3.1.1. Giới thiệu chung 38 3.1.2. Động học Robot RE-01 42 3.1.3. Ch-ơng trình tính toán động học Robot RE-02 43 3.1.4. Hệ ph-ơng trình động học của robot RE-01 44 3.1.5. Ph-ơng án chế thử Robot RE-01 55 3.2. Thiết kế Robot RE - 02 56 3.2.1. Phân tích kết cấu 56 3.2.2. Thiết kế cơ cấu dạng pantograph 57 3.2.3. Tính toán cơ cấu tay máy pantograph 58 3.3. Tính toán về độ chính xác của robot RE - 02 73 3.3.1. Tổng quan về sai số phép đo dùng cơ cấu tay đo 73 3.3.2. Tính toán sai số của robot RE 74 IV. Nghiên cứu, thiết kế, chế tạo Robot RE-03 hoạt động theo tọa độ trụ 81 4.1. Giới thiệu chung 81 4.2. Các môđun hợp thành Robot RE-03 82 V. Xây dựng các ch-ơng trình phần mềm tái hiện bề mặt cong không gian 100 5.1. Cơ sở thuật toán xây dựng các đ-ờng cong và mặt cong không gian 100 5.1.1. Các thuật toán xây dựng đ-ờng cong 100 5.1.2. Ph-ơng pháp xác định điểm tựa và l-u trữ dữ liệu của đ-ờng cong 104 5.1.3. Một số ví dụ tái hiện đ-ờng cong 105 5.1.4. Một số kết quả tái hiện đ-ờng cong đ-ợc thực hiện bằng robot RE 107 5.2. Cơ sở thuật toán xây dựng mặt cong không gian 109 5.3. Thuật toán quả bóng rơi 123 5.4. Xây dựng ch-ơng trình máy tính 127 5.5. Ch-ơng trình phần mềm tái hiện các bề mặt cong phức tạp 133 VI. Kết luận 143 Tài liệu tham khảo 145

pdf153 trang | Chia sẻ: banmai | Lượt xem: 1695 | Lượt tải: 0download
Bạn đang xem trước 20 trang tài liệu Nghiên cứu thiết kế, chế tạo các robot thông minh phục vụ cho các ứng dụng quan trọng - Nhóm sản phẩm ROBOT RE, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ng n÷a ®ã lµ sai sè do gia c«ng chÕ t¹o. C¬ cÊu cµng phøc t¹p th× ®é chÝnh x¸c gia c«ng cµng thÊp, nhÊt lµ trong ®iÒu kiÖn kinh tÕ vµ kü thuËt cña n−íc ta. Víi c¬ cÊu b×nh hµnh pantograph ta thÊy xuÊt hiÖn nh÷ng nguyªn nh©n g©y nªn sai sè nh−: - Sai sè c¸c kÝch th−íc ®éng häc vÝ dô nh− sai sè vÒ kÝch th−íc c¸c c¹nh h×nh b×nh hµnh. - Sai sè vÒ kho¶ng dÞch chuyÓn cña c¸c con tr−ît E, C trong ®ã bao gåm sai sè bé truyÒn b¸nh r¨ng – thanh r¨ng (con tr−ît). Sau ®©y ta ®i tÝnh to¸n c¸c sai sè cña robot RE. 3.3.2.3- TÝnh to¸n sai sè. C¬ cÊu thay thÕ. Víi nguyªn nh©n g©y nªn sai sè thø nhÊt ®· nªu, ®ã lµ sai sè vÒ kÝch th−íc ®éng häc cña c¬ cÊu b×nh hµnh. §Ó thuËn tiÖn cho viÖc tÝnh sai sè vÒ c¬ cÊu nµy ta cã thÓ thay thÕ b»ng mét c¬ cÊu hë t−¬ng ®−¬ng. Nguyªn t¾c thay thÕ t−¬ng ®−¬ng cã thÓ ®−îc hiÓu lµ: c¬ cÊu thay thÕ cã miÒn lµm viÖc t−¬ng ®−¬ng víi miÒn lµm viÖc cña c¬ cÊu ®−îc thay thÕ. Trªn nguyªn t¾c 76 ®ã ë ®©y ta sÏ thay thÕ c¬ cÊu b×nh hµnh b»ng mét c¬ cÊu hë cã 3 tay quay (h×nh 3.15) vµ ®i xÐt sai sè cña c¬ cÊu thay thÕ nµy. Sai sè cña mét tay quay (h×nh 3..3.17) XÐt mét tay quay víi chiÒu dµi l ë vÞ trÝ cã gãc quay ϕ. NÕu sai sè gãc quay lµ ∆ϕ th× sai sè cña ®Çu tay quay lµ mét ®¹i l−îng ∆l ≈ l. ∆ϕ ChiÕu sai sè lªn trôc x ta cã: ∆x = l.cos(ϕ + ∆ϕ) – l.cosϕ = l(cos(ϕ + ∆ϕ) – cosϕ) ≈ l. sinϕ. ∆ϕ (3.46) Chia hai vÕ cho ∆ϕ ta cã: ∆x/∆ϕ = l.sinϕ hay x’ϕ = l.sinϕ ChiÕu sai sè lªn trôc y ta cã: ∆y = l.sin(ϕ + ∆ϕ) – l.sinϕ = l(sin(ϕ + ∆ϕ) – sinϕ) ≈ l. cosϕ. ∆ϕ (3.47) Chia hai vÕ cho ∆ϕ ta cã: ∆y/∆ϕ = l.cosϕ hay y’ϕ = l.cosϕ H×nh 3.3.17 HoÆc ta cã thÓ viÕt l¹i nh− sau: ϕϕ ∆∂ ∂=∆ xx ; ϕϕ ∆∂ ∂=∆ yy (3.48) Sai sè do mçi tay quay g©y nªn cã gi¸ trÞ kh«ng ®æi l. ∆ϕ. Khi tæ hîp x y ϕ ∆ϕl A O 77 nhiÒu tay quay, v× mçi tay quay ë c¸c vÞ trÝ kh¸c nhau nªn sai sè chiÕu lªn c¸c ph−¬ng kh¸c nhau vµ tæ hîp c¸c sai sè phô thuéc vÞ trÝ c¸c tay quay, tøc lµ phô thuéc vµo gãc gi÷a c¸c tay quay víi c¸c trôc. Sai sè cña hÖ hai tay quay. XÐt hai tay quay trong mÆt ph¼ng víi chiÒu dµi l1 , l2 t−¬ng øng cã vÞ trÝ ϕ1 , ϕ2 (h×nh 3.3.18) H×nh 3.3.18 C¸c h×nh chiÕu cña ®iÓm cuèi trªn c¸c trôc lµ: x = l1cosϕ1 + l2cosϕ2 (3.49) y = l1sinϕ1 + l2sinϕ2 (3.50) 2 2 1 1 ϕϕϕϕ ∆∂ ∂+∆∂ ∂=∆ xxx (3.51) 2 2 1 1 ϕϕϕϕ ∆∂ ∂+∆∂ ∂=∆ yyy (3.52) ∆x = -l1 sinϕ1∆ϕ1 - l2 sinϕ2∆ϕ2 (3.53) ∆y = l1 cosϕ1∆ϕ1 - l2 cosϕ2∆ϕ2 (3.54) Sai sè cña c¬ cÊu lµ: 22 yx ∆+∆=∆ (3.55) y x l 1 l 2 ϕ1 ϕ2 O A B 78 Trong biÓu thøc trªn ta thÊy l1 , l2 , ∆ϕ1 , ∆ϕ2 lµ nh÷ng ®¹i l−îng ®· biÕt tr−íc. Khi ϕ1 , ϕ2 thay ®æi th× ∆x , ∆y thay ®æi. Sai sè lín nhÊt t¹i c¸c ®iÓm øng víi vÞ trÝ ϕ1 = ϕ2 , tøc lµ c¸c tay quay cïng n»m trªn mét ®−êng th¼ng. Sai sè cña hÖ ba tay quay. XÐt tr−êng hîp ba tay quay l1 , l2 , l3 t−¬ng øng cã vÞ trÝ ϕ1 , ϕ2 , ϕ3 (h×nh 3.15) H×nh 3.3.19 x = l1cosϕ1 + l2cosϕ2+ l3cosϕ3 (3.56) y = l1sinϕ1 + l2sinϕ2+ l3sinϕ3 (3.57) 3 3 2 2 1 1 ϕϕϕϕϕϕ ∆∂ ∂+∆∂ ∂+∆∂ ∂=∆ xxxx (3.58) 3 3 2 2 1 1 ϕϕϕϕϕϕ ∆∂ ∂+∆∂ ∂+∆∂ ∂=∆ yyyy (3.59) ∆x = -l1 sinϕ1∆ϕ1 - l2 sinϕ2∆ϕ2 - l3sinϕ3∆ϕ3 (3.60) ∆y = l1 cosϕ1∆ϕ1 - l2 cosϕ2∆ϕ2 + l3cosϕ3∆ϕ3 (3.61) Sai sè cña c¬ cÊu lµ: 22 yx ∆+∆=∆ (3.62) ϕ1 l 1 x ϕ2 2 l y ϕ3 l3 O A B C 79 Sai sè lín nhÊt t¹i c¸c ®iÓm øng víi vÞ trÝ ϕ1 = ϕ2 = ϕ3 , tøc lµ c¸c tay quay cïng n»m trªn mét ®−êng th¼ng. ∆ = l1 ∆ϕ1 + l2 ∆ϕ2 + l3 ∆ϕ3 (3.63) Sai sè cña c¬ cÊu pantograph XÐt c¬ cÊu pantograph (h×nh 3.16) víi hai con tr−ît E, C theo c¸c ph−¬ng y vµ z. HÖ sè khuyÕch ®¹i cña c¬ cÊu lÇn l−ît lµ KY vµ KZ , KZ = 1+KY. Gäi sai sè dÞch chuyÓn cña hai con tr−ît lµ ∆E , ∆C . Ta tÝnh sai sè cña ®iÓm cuèi M : ∆M H×nh 3.3.20 Tr−êng hîp chØ riªng con tr−ît E di chuyÓn, khi ®ã ®iÓm M sÏ di chuyÓn theo ph−¬ng y vµ gäi sai sè cña M lµ ∆Y , ta cã quan hÖ gi÷a kho¶ng dÞch chuyÓn cña ®iÓm cuèi M (SMY) vµ kho¶ng tr−ît cña E (SE) nh− sau: SM + ∆Y = KY(SE + ∆E) Nh− vËy ∆Y = KY ∆E Tr−êng hîp chØ riªng con tr−ît C di chuyÓn, khi ®ã ®iÓm M sÏ di chuyÓn theo ph−¬ng z vµ gäi sai sè cña M lµ ∆Z , ta cã quan hÖ gi÷a kho¶ng dÞch chuyÓn cña ®iÓm cuèi M (SMZ) vµ kho¶ng tr−ît cña C (SC) nh− sau: SMZ + ∆Z = KZ(SC + ∆C) (3.65) Nh− vËy ∆Z = KZ ∆C = (1+KY )∆C E Sc S E C y z M 80 NÕu ®ång thêi c¶ hai con tr−ît ®Òu di chuyÓn th× sai sè theo mçi ph−¬ng vÉn lµ ∆Y , ∆Z ®−îc tÝnh nh− trªn, do vËy sai sè tæng cña M sÏ lµ: 22 ZYM ∆+∆=∆ (3.66) 81 IV. Nghiªn cøu, thiÕt kÕ, l¾p r¸p Robot re – 03 ho¹t ®éng theo täa ®é trô 4.1. Giíi thiÖu chung Môc tiªu NhiÖm vô 3 cña §Ò tµi lµ vËn dông c¸c ph−¬ng ph¸p cña robotics (khoa häc c«ng nghÖ robot) ®Ó nghiªn cøu vÒ CMM (m¸y ®o täa ®é) hoÆc PCMM (m¸y ®o täa ®é x¸ch tay). Con ®−êng ph¸t triÓn c¸c thiÕt bÞ nµy kh«ng chØ lµ biÖn ph¸p n©ng cao ®é chÝnh x¸c chÕ t¹o mµ cßn ®Æc biÖt quan t©m ®Õn ph−¬ng ph¸p suy luËn, xö lý, bï trõ b»ng c¸c phÇn mÒm kÌm theo. Néi dung nghiªn cøu ë c¸c phÇn trªn ®©y chøng tá r»ng c¶ hai con ®−êng nãi trªn ®Òu cã vai trß quan träng, ®Æc biÖt lµ con ®−êng thø nhÊt. Sù ch−a thµnh ®¹t cña c¶ 2 ph−¬ng ¸n Robot RE-01 vµ Robot RE-02 lµ bµi häc rót ra tõ thùc tÕ, r»ng chÕ t¹o c¸c thiÕt bÞ liªn quan ®Õn ®o l−êng ph¶i cã c¶ mét “hËu ph−¬ng” c«ng nghiÖp hïng m¹nh. Ph−¬ng ¸n thø 3, Robot RE-03 ra ®êi xuÊt ph¸t tõ ý thøc muèn kh¾c phôc c¸c khã kh¨n trªn, nh−ng l¹i lµ mét ®Ò xuÊt míi. ThËt vËy, Robot RE- 03 ho¹t ®éng theo täa ®é trô Z = Z (r, ϕ) víi 3 m«®un thiÕt bÞ: M«®un t¹o gãc quay ϕ; M«®un t¹o ®é di chuyÓn r h−íng t©m quay; M«®un t¹o ®é di chuyÓn theo trôc Z. C¶ 3 m«®un nµy cã thÓ chän lùa tõ c¸c thiÕt bÞ ®o l−êng chuÈn hãa do c¸c h·ng cã th−¬ng hiÖu næi tiÕng s¶n xuÊt víi ®é chÝnh x¸c vµ tin cËy cao. C¸c m¸y ®o täa ®é CMM hoÆc PCMM ®Òu ch−a cã lo¹i nµo ho¹t ®éng theo täa ®é trô c¶, trong lóc cã nhiÒu bÒ mÆt cong nÕu ®−îc ghi ®o theo täa ®é trôc th× rÊt thuËn tiÖn vµ gi¶m thiÓu ®−îc sè ®iÓm ®o. ¦u ®iÓm næi tréi cña viÖc t¹o dùng Robot RE-03 lµ gi¸ thµnh thÊp xuèng rÊt nhiÒu lÇn so víi viÖc nhËp ngo¹i c¸c lo¹i thiÕt bÞ CMM hoÆc PCMM. 82 §Ò tµi ®· t¹o ra ®−îc 1 mÉu m¸y ®o theo täa ®é trô mang tªn Robot RE-03, mÆc dÇu kh«ng ph¶i víi môc ®Ých ®Ó ®o l−êng, mµ lµ thiÕt bÞ sè hãa (Digitizing Systems) ®Ó t¸i hiÖn c¸c bÒ mÆt cong, nh−ng cã ®é chÝnh x¸c vµ ®é tin cËy cao v× phô thuéc chñ yÕu vµo 3 m«®un thiÕt bÞ chuÈn hãa nhËp ngo¹i. Ngoµi 3 m«®un thiÕt bÞ chñ yÕu nãi trªn Robot RE-03 cßn cã bé phËn thiÕt bÞ ®iÖn tö ®Ó thu nhËn, chuyÓn ®æi c¸c tÝn hiÖu ®o tõ c¸c m«®un nãi trªn thµnh c¸c sè liÖu ®Çu vµo cña ch−¬ng tr×nh phÇn mÒm, xö lý c¸c sè liÖu nhËn ®−îc tõ c¸c ®iÓm ®o, råi t¸i hiÖn ra bÒ mÆt cong ®ang ®−îc kh¶o s¸t. Víi nh÷ng giao diÖn t−¬ng øng ®−îc thiÕt lËp Robot RE-03 hßan toµn cã thÓ sö dông c¸c ch−¬ng tr×nh phÇn mÒm t¸i hiÖn c¸c bÒ mÆt cong kh«ng gian do §Ò tµi tù x©y dùng vµ dïng chung cho nhiÒu thiÕt bÞ CMM vµ PCMM kh¸c. V× thÕ d−íi ®©y chØ giíi thiÖu nh÷ng phÇn dµnh riªng cho Robot RE- 03 . Ch−¬ng tr×nh phÇn mÒm t¸i hiÖn mÆt cong vµ nh÷ng bé phËn cã chung trong c¸c thiÕt bÞ CMM hoÆc PCMM kh¸c ®· ®−îc tr×nh bµy ë c¸c môc trªn. 4.2. C¸c m«®un hîp thµnh Robot RE-03 4.2.1. M«®un quay ϕ 83 H×nh 3.4.1. B¶n vÏ M«®un t¹o gãc quay ϕ T? l?:S? lu?ng: B?n v? s?: ROBOT RE-03 V?t li?u: thép CT5 Đ? tài KC - 03 - 08 Trung tâm NCKT T? d?ng hóa Tru?ng Đ?i h?c Bách Khoa Hà N?i Ký Ngày T.V.H.SON H? và tên Nguy?n Van Minh Nguy?n Thi?n Phúc Thi?t k? Tr. nhi?m Ki?m tra Duy?t Ø250 Modun góc quay 84 H×nh 3. 4.2. ¶nh chôp M«®un quay ϕ 85 B¶ng th«ng sè kü thuËt cña M«®un quay ϕ §−êng kÝnh m©m quay: 250 mm V¹ch chia ®é: 360' víi ®é ph©n d¶i 1' Dung sai: 0,05 mm Tèc ®é quay: 3'30 s mét vßng quay §éng c¬: 24VDC, 20W 88 H×nh 3.4.3. ¶nh chôp m«®un dÞch chuyÓn theo trôc z Th«ng sè kü thuËt ®Çu ®o: Linear Gauge LGE-1025 (Mitutoyo) D¶i do: 25mm §é ph©n d¶i: 5µm §é chÝnh x¸c lÆp l¹i: 20µm Lùc ®Çu ®o: - khi ®i xuèng: 4,6 N - khi ®i ngang: 4,3N - Khi ®i lªn: 4,0 N Ph−¬ng ph¸p x¸c ®Þnh vÞ trÝ ®o: Bé gi¶i m· tuyÕn tÝnh t¨ng dÇn biÕn tô tÜnh Tèc ®é ®¸p øng ®o: - TÜnh: 1,4 m/gi©y - §éng: 17,5 m/gi©y TÝn hiÖu ra: LÖch pha 900, Kho¶ng c¸ch s−ên tÝn hiÖu ra t−¬ng ®−¬ng 20µm KÝch th−íc ®Çu tiÕp ®iÓm ®o: φ 3 mm, mÆt cÇu, b»ng carbit æ ®ì: æ bi cÇu ChiÒu dµi c¸p tÝn hiÖu ra: 2 mÐt NhiÖt ®é m«i tr−êng lµm viÖc: 0 - 400C 90 H×nh 3.3.4. ¶nh chôp m«®un dÞch chuyÓn theo trô Z Th«ng sè kü thuËt th−íc ®o cao hiÖn sè: Series 192-655 (Mitutoyo) HiÓn thÞ sè: LCD D¶i do: 0 - 600 mm §é ph©n d¶i: 0,01 m §é chÝnh x¸c: ± 0,04 Chøc n¨ng: ®Æt ®iÓm 0, cã c«ng t¾c chuyÓn ®æi chÕ ®é ®o tuyÖt ®èi-t−¬ng ®èi D÷ liÖu ra: SPC Nguån ®iÖn: 3 pin 1,5V Tèc ®é ®¸p øng lín nhÊt: kho¶ng 500 mm/gi©y B¸o ®éng: nguån pin yÕu NhiÖt ®é m«i tr−êng lµm viÖc: 0 - 400C Träng l−îng: 9,5 kg 91 4.2.4. Hép ®iÒu khiÓn vµ giao diÖn víi m¸y tÝnh S¬ ®å hÖ thèng ®iÒu khiÓn cña Robot RE Bé ®Öm c«ng suÊt Bé ®Öm RS 232 Bµn phÝm ®iÒu khiÓn §Çu ®o Bé khuÕch ®¹i c«ng suÊt KĐ ®Öm Encoder do gãc Nguån cung cÊp 24MHz Quay tr¸i Quay ph¶i Đo dßng P3.0 P3.1 P1 P3.2 P3.4 B é V X L A T 89C 52 P0 XTAL1 XTAL2 P2. P2. P2. P3.3 P3.5 §éng c¬ quay m©m cÆp out +5v out +24v - 24V + HiÓn thÞ gi¸ trÞ ®o H×nh 3.4.5. S¬ ®å hÖ thèng ®iÒu khiÓn cña Robot RE 92 H×nh 3.4.6. ¶nh chôp hép ®iÒu khiÓn B¶ng th«ng sè kü thuËt Th«ng sè kü thuËt bé gi¶i m∙: Rotary Encorder Incremental E6B2-CWZ6C (OMRON - 06802) §é ph©n d¶i: 1000 xung/vßng D©y mµu vµng 24VDC D©y mµu xanh: 0V D©y mµu n©u: GND D©y mµu ®en: OUT A D©y mµu tr¾ng: OUT B D©y mµu da cam: OUT Z 95 4.2.5. L¾p r¸p, vËn hµnh Robot RE-03 H×nh 3.4.8. Dïng Robot RE-03 ®Ó t¸i hiÖn bÒ mÆt “phom” dµy H×nh 3.4.9. C¸c kÕt qu¶ t¸i hiÖn bÒ mÆt “phom” dµy 96 H×nh 3.9.10. Dïng Robot RE-03 ®Ó t¸i hiÖn bÒ mÆt t−îng “con c¸ heo” H×nh 3.9.11. T¸i hiÖn bÒ mÆt t−îng “con c¸ heo” 97 H×nh 3.9.12. Dïng Robot RE-03 ®Ó t¸i hiÖn bÒ mÆt lä hoa kh«ng ®èi xøng H×nh 3.9.13. KÕt qu¶ t¸i hiÖn bÒ mÆt lä hoa kh«ng ®èi xøng 98 V. XÂY DỰNG CÁC CHƯƠNG TRÌNH PHẦN MỀM TÁI HIỆN BỀ MẶT CONG KHÔNG GIAN 5.1. C¬ së thuËt to¸n x©y dùng c¸c ®−êng cong vµ mÆt cong kh«ng gian 5.1.1. Các thuật toán xây dựng đường cong 1. Giải thuật xây dựng đường cong Hermite Procedure Hermite_Curve() # §©y lµ gi¶i thuËt x©y dùng ®−êng cong Hermite # M4x4 lµ ma trËn Hermite # G4x1 lµ ma trËn hÖ sè h×nh häc # t1x4 ma trËn c¸c tham sè # P ®iÓm tÝnh to¸n trªn ®−êng cong begin Khëi t¹o ma trËn M ®äc c¸c hÖ sè h×nh häc Herrmite; to¹ ®é ®iÓm cuèi vµ c¸c vÐct¬ tiÕp tuyÕn t¹i c¸c ®iÓm cuèi for t = 0 to 1 insteps of 0.05 do khëi t¹o ma trËn [t] víi c¸c gi¸ trÞ hiÖn thêi P = t*M*G # PhÐp nh©n ma trËn chuÈn if P(t) lµ ®iÓm b¾t ®Çu then Move_to(P) else Draw_to(P) next t return 99 end. 2.Gi¶i thuËt x©y dùng ®−êng cong Bezier. Procedure Bezier_Curve() # §©y lµ gi¶i thuËt x©y dùng ®−êng cong bezier # n+1 sè l−îng c¸c ®iÓm ®iÒu khiÓn # Pi ®iÓm ®iÒu khiÓn thø i cã c¸c to¹ ®é lµ x, y, z lµ (Pix, Piy, Piz) begin for i = 0 to n do ®äc ®iÓm ®iÒu khiÓn Pi next i for t = 0.0 to 1.0 insteps of 0.05 do x = y = z = 0.0 for i = 0 to n do B = Blend (i, n, t) x = x + Pix*B y = y + Piy*B z = z + Piz*B next i if (x, y, z) lµ ®iÓm b¾t ®Çu then Move_to (x, y, z) else Draw_to (x, y, z) endif next t return end function blend (i, n, t) 100 begin blend= giaithua (n)/giaithua (i)*giaithua (n-i) blend=blend*(t)i * ((1-t)n-1) return (blend) end 3. Ch−¬ng tr×nh con x©y dùng ®−êng cong néi suy spline bËc 3. function p =fun3d(pp,step); %chuong trinh nay se su dung phuong phap noi suy duong cong %spline bac 3 tu nhien (phuong trinh 1.19) de thiet lap duong cong %di qua cac vecto diem 3 chieu if step>0 & step<1 & (mod(1,step)==0) [r,c]=size(pp); %ma tran he so cua 1.19 v=linspace(1,1,r-1); triu=diag(v,1); tril=diag(v,-1); trim=4*eye(r); trim(1,1)=2; trim(r,r)=2; mt=triu+tril+trim; %ma tran nghich dao cua m4t mt_1=inv(mt); %ma tran ve phai cua 1.19 for i=2:(r-1) g(i,:)=3*(pp(i+1,:)-pp(i-1,:)); 101 end g(1,:)=3*(pp(2,:)-pp(1,:)); g(r,:)=3*(pp(r,:)-pp(r-1,:)); %ma tran cac vector tiep tuyen p' tai cac diem tua pt=mt_1*g; size(pt); %ma tran tham so t(0->1) voi buoc step %n la so diem noi suy trong 1 phan doan t=0:step:1; n=round(1/step)+1; %ma tran he so M(const) trong (1.8) m=[2 -2 1 1 -3 3 -2 -1 0 0 1 0 1 0 0 0 ]; %gk la ma tran G trong (1.8) for k=1:(r-1) gk=[pp(k,:); pp(k+1,:); pt(k,:); pt(k+1,:)]; for i=1:n ti=[t(i)*t(i)*t(i) t(i)*t(i) t(i) 1]; p(n*(k-1)+i,:)=ti*m*gk; end end %p la ma tran cac diem noi suy size(p); 102 else helpdlg('Hay nhap lai gia tri buoc (0<step<1 & mod(1,step)==0)','Thong bao'); end 5.1.2. Phương pháp xác định điểm tựa và lưu trữ dữ liệu của đường cong Để lấy toạ độ các điểm nội suy của một đường cong không gian trước tiên ta phải vạch ra đường cong đó (các điểm nội suy đó ta gọi là điểm tựa). Trên đường cong này sẽ đánh dấu các điểm tựa, chúng không cần phải cách đều nhau mà mật độ các điểm được đánh dấu sẽ tuỳ thuộc vào độ cong của từng phân đoạn trên đường cong đó. Tất nhiên mật độ càng lớn thì chất lượng phép nội suy càng cao, nhưng nó sẽ đòi hỏi tài nguyên lưu trữ lớn và thời gian xử lý dữ liệu trong chương trình. Vấn đề đặt ra là tối ưu hoá điểm tựa này, nghĩa là xác định số điểm tựa nhỏ nhất có thể nhưng vẫn đảm bảo được chất lượng của phép nội suy. Các phân đoạn có bán kính cong nhỏ thì cần số điểm chia mau hơn và ngược lại với phân đoạn có bán kính cong lớn số điểm chia sẽ thưa. Sau khi đánh dấu các điểm tựa ta sẽ tiến hành đánh số các điểm đo theo một trật tự nhất định nhằm tránh nhầm lẫn trong quá trình đo đạc sau này. Xuấ phát từ điểm đầu tiên của đường cong ta đánh số 1 và lần lượt là các số tự nhiên tiếp theo cho các điểm kế tiếp đến điểm cuối cùng của đường cong là n. Nếu đường cong khép kín thì điểm cuối cùng n sẽ trùng với điểm đầu tiên 1. Quá trình đo toạ độ các điểm tựa bằng robot RE sẽ được thực hiện lần lượt từ 1 đến n. Toạ độ của một điểm tựa thứ I trong không gian 3 chiều có ba thành phần xi, yi, zi và chúng sẽ được lưu trữ trong hàng thứ I của ma trận dữ liệu nội duy của đường cong. Như vậy ma trận dữ liệu các điểm tựa của một đường cong sẽ là một ma trận n hàng 3 cột, n là số điểm tựa, còn 3 là số chiều trong hệ toạ độ Oxyz của một điểm tựa. Để thuận tiện cho việc quản lý và lưu trữ, ma trận các điểm tựa của đường cong sẽ được ghi vào file dạng text. Chương trình nội đường cong sẽ đọc dữ liệu các điểm tựa từ file dữ liệu sau đó tính toán ra các toạ độ nội suy trung gian giữa các điểm tựa và vẽ ra đường cong nội suy. Kết quả ma 103 trận nội suy của đường cong cũng được xuất ra file dạng text để làm dữ liệu cho các chương trình gia công số hoá. Hình 3.5.1 Sau đây là một số hình ảnh của chương trình máy tính thể hiện giải thuật nội suy đường cong spline bậc 3 được xây dựng bằng ngôn ngữ MATLAB. 5.1.3 Một số ví dụ tái hiện đường cong 1. Ví dụ - Nhập vào file dữ liệu các điểm tựa có tên d1.txt với nội dung như sau: 11 456 104 125 428 298 254 496 483 385 806 500 481 1070 357 578 1294 240 651 1436 305 742 1571 479 821 1735 567 915 1989 531 1014 2187 454 1145 Dòng đầu tiên chứa một số (11) là số điểm tựa của đường cong nội suy. Các dòng còn lại là toạ độ của các điểm tựa đó. - Nhập bước nội suy (là một số thực s (0 < s < 1 & 1 : s)), bước này có giá trị càng nhỏ thì phép nội suy càng chính xác (ví dụ ở đây ta nhập bước nội suy = 0.1). Tuy nhiên giá trị của bước sẽ tỷ lệ nghịch với thời gian 104 tính toán của máy cũng như kích thước của file kết quả. Với giá trị bước bằng s thì số điểm nội suy giữa 2 điểm tựa kề nhau sẽ là 1/s. Hình 3.5.2 105 - Sau khi nội suy ta sẽ thu được một ma trận các điểm liên tiếp và rất gần nhau (tuỳ thuộc vào bước nội suy) thuộc đường cong. Nối các điểm này lại ta sẽ được một đường cong nội suy gần đúng với đường cong thuật. Ta có thể lưu trữ ma trận này bằng cách ghi vào file và mô phỏng thông qua các đồ thị hình chiếu như trên. 5.1.4. Một số kết quả tái hiện đường cong được thực hiện bằng robot RE. Như đã biết robot RE sẽ được kết nối với máy tính thông qua một hệ thống mạch điện tử và một chương trình phần mềm để đọc tín hiệu xung do các encoder phát ra trong quá trình làm việc. Sau đó các xung này sẽ được chuyển đổi thành giá trị góc quay và khoảng trượt của các khớp động trong cơ cấu. Thông qua các công thức đã được thiết lập và tính toán ở chương 2 cuối cùng ta sẽ thu được toạ độ (X, Y, Z) của đầu dò robot khi làm việc. Sau đây là giao diện kết nối máy tính của robot RE được viết bằng ngôn ngữ Visual C++. Vị trí đầu dò của robot trước khi được khởi động để làm việc còn được gọi là “vị trí không” hay “điểm không” có toạ độ là (X,Y,Z) = (0, 0, 0) tương ứng với 4 encoder ở vị trí 0 và số xung phát ra bằng 0. Thời điểm khởi động máy để làm việc được xác định bằng việc nhắp chuột vào nút “Bat dau”. Trong quá trình làm việc đầu dò sẽ được di chuyển đến các vị trí cần xác định toạ độ. Tại mỗi vị trí đó toạ độ của chúng sẽ được ghi lại vào một file mặc định trong chương trình bằng cách tác động đóng mạch một công tắc gắn trên khâu đầu dò. Các điểm đo được ghi lần lượt vào file và số điểm sẽ hiển thị trên màn hình giao diện. Sau đây là kết quả đo các điểm tựa của một đường cong. File dữ liệu có tên d3.txt với nội dung như sau: Nhập file vào chương trình ta thu được kết quả tái hiện ngược đường cong nhau sau: 106 Hình 3.5.3 107 5.2. C¬ së thuËt to¸n x©y dùng mÆt cong kh«ng gian 5.2.1. Các thuật toán xây dựng mặt cong 1. Gi¶i thuËt x©y dùng mÆt cong Hermite bËc 3 kÐp. procedure Hermite_Bicubic_Patch #s 4x1- ma trËn tham sè theo h−íng s #t 4x1- ma trËn tham sè theo h−íng t #G4x4- ma trËn l−u tr÷ c¸c ®Æc ®iÓm h×nh häc cña mÆt cong. #M4x4- Ma trËn Hermite #sT, tT, MT: c¸c ma trËn chuyÓn vÞ cña s, t vµ M t−¬ng øng. begin Read c¸c ®Æc ®iÓm h×nh häc cña « l−íi vµo ma trËn G Khëi t¹o ma trËn M TÝnh ma trËn chuyÓn vÞ cña M vµ l−u tr÷ trong MT ds=dt=0.05 MOVE_FLAG= TRUE for s=0.0 to 1.0 insteps of 0.05 do tÝnh ma trËn s MOVE_FLAG= TRUE for s=0.0 to 1.0 insteps of 0.05 do tÝnh ma trËn t P(s,t)=s*M*G*MT*tT if MOVE_FLAG is TRUE then begin Move (P(s,t)) MOVE_FLAG= FALSE end else Draw (P(s,t)) endif next t 108 next s for s=0.0 to 1.0 insteps of 0.05 do tÝnh ma trËn t MOVE_FLAG= TRUE for s=0.0 to 1.0 insteps of 0.05 do tÝnh ma trËn s P(s,t)=t*M*G*MT*sT if MOVE_ FLAG is TRUE then begin Move_to (P(s,t)) MOVE_FLAG= FALSE end else Draw (P(s,t)) endif next s next t return end 2. Gi¶i thuËt x©y dùng mÆt cong Bezier. Procedure Bezier_ SurFace #CPi,j lµ ®iÓm ®iÒu khiÓn thø (i, j) trªn mÆt cong begin for i=1 to n do for j=1 to m do read ®iÓm ®iÒu khiÓn CPi,j next j for s=0 to 1.0 insteps of 0.05 do MOVE_FLAG= TRUE for t=0 to 1.0 insteps of 0.05 do 109 ∑∑= i n j m jijmjn CPtBSBtsP ,,, *)(*)(),( if P(s,t) lµ ®iÓm b¾t ®Çu then begin Move_to (P(s,t)) MOVE_FLAG= FALSE end else Draw (P(s,t)) endif next t next s for t=0 to 1.0 insteps of 0.05 do MOVE_FLAG= TRUE for t=0 to 1.0 insteps of 0.05 do ∑∑= i n j m jijmjn CPtBSBtsP ,,, *)(*)(),( if P(s,t) lµ ®iÓm b¾t ®Çu then begin Move_to (P(s,t)) MOVE_FLAG= FALSE end else Draw (P(s,t)) endif next t next s return end 110 3. Gi¶i thuËt x©y dùng mÆt cong néi suy. C¬ së cña mÆt cong néi suy ®−îc dùa trªn phÐp néi suy ®−êng cong víi ý t−ëng bÒ mÆt lµ tËp hîp cu¶ c¸c ®−êng cong ®an xÝt nhau t¹o nªn 5.2.2. Phương pháp xác định điểm tựa và lưu trữ dữ liệu của mặt cong Cũng tương tự như đường cong, để xây dựng nên các bề mặt cong không gian từ một số hữu hạn các điểm tựa ta có thể dùng các phương pháp nội suy hoặc xấp xỉ như đã trình bày tổng quát trong chương 1. Mỗi phương pháp đều có những đặc điểm riêng của nó và ứng dụng trong từng điều kiện cụ thể thực tế đặt ra. Ở đây bài toán của ta xuất phát từ những điểm tựa đo được chính xác vì vậy sẽ lựa chọn phương pháp nội suy để tạo dựng mặt cong. Việc xác định các điểm tựa dùng cho phép nội suy cũng giống như trong trường hợp đường cong nhưng thay vì chỉ xác định các điểm theo một đường, ở đây ta sẽ xác định các điểm theo nhiều đường kế tiếp nhau bao phủ lên bề mặt nội suy. Nếu để ý theo hai hướng u, v thì các điểm tựa sẽ nằm ở nút của lưới đan bởi các đường cong theo hai hướng đó. Như vậy công việc đầu tiên của quá trình xác định toạ độ các điểm tựa là việc vạch các lưới trên bề mặt mẫu vật theo hai hướng u, v. Quy tắc chung cũng giống như đường cong, những vùng có độ cong lớn thì kẻ lưới dày, còn vùng có độ cong nhỏ thì vạch lưới thưa. Sau đó ta tiến hành đánh số các nút lưới. Vì giải thuật nội suy bề mặt dựa trên nguyên tắc nội suy các đường như đã trình bày ở trên nên việc đánh số phải tuân theo quy luật chung của đường cong. Trên một hướng (giả sử v) và cùng một đường ta đánh số lần lượt các nút tựa, hết một đường thì số lại được đánh tiếp tục ở nút đầu tiên của đường kế tiếp, cứ như vậy cho đến đường cuối cùng của hướng v (hình 5.4). Nếu số nút lưới trên một đường theo hướng u là m, và hướng v là n thì tổng số nút của cả lưới là mxn. Toạ độ các nút lưới được lưu trữ trong một ma 111 trận mxn hàng, 3 cột, mỗi một hàng là toạ độ của một nút lưới. Ma trận nút lưới này sẽ được ghi vào file dạng text. Chương trình nội suy mặt cong có thể nhận dữ liệu điểm tựa từ bàn phím hoặc đọc từ file lưu trữ. Đầu tiên chương trình sẽ nội suy các đường theo hướng v, sau đó từ kết quả nội suy này chương trình lại tiếp tục nội suy theo hướng u. Cuối cùng ta sẽ nhận được một ma trận lớn chứa toạ độ dày đặc các điểm của mặt cong. Ma trận này sẽ được ghi ra file dạng text và hiển thị bề mặt nội suy trên màn hình máy tính Hình 3.5.4. Sau đây là một số hình ảnh của chương trình máy tính thể hiện giải thuật nội suy mặt cong được xây dựng bằng ngôn ngữ MATLAB. 5.2.4. Một số ví dụ tái hiện mặt cong 1. Ví dụ 1. - Nhậpvào file dữ liệu các điểm tựa có tên sdat1.txt với nội dung như sau: 5.000 6.000 -3.000 0.000 9.000 -6.000 7.000 -6.000 -4.000 14.000 -166.000 -3.000 23.000 -497.000 112 -7.000 27.000 -653.000 3.000 0.000 9.000 1.000 7.000 -41.000 2.000 15.000 -206.000 3.000 22.000 -453.000 1.000 29.000 -811.000 12.000 -2.000 138.000 8.000 5.000 44.000 9.000 13.000 -75.000 10.000 20.000 -280.000 9.000 25.000 -519.000 17.000 0.000 289.000 14.000 6.000 166.000 15.000 14.000 43.000 16.000 21.000 -164.000 15.000 27.000 -477.000 23.000 3.000 523.000 21.000 8.000 385.000 23.000 16.000 289.000 24.000 23.000 70.000 22.000 30.000 -386.000 31.000 2.000 959.000 30.000 8.000 844.000 29.000 15.000 631.000 30.000 21.000 480.000 31.000 26.000 311.000 Dòng đầu tiên chưa hai số (5,6) là số hàng và cột của lưới điểm tựa nội suy mặt cong. Các dòng còn lại là toạ độ của các điểm tựa đó lần lượt theo thứ tự từng cột kế tiếp nhau của lưới điểm nội suy (hình 3.5.4) Sau đây là hình ảnh của mặt cong được mô phỏng sau khi nội suy và thể hiện theo hai hướng ngang và dọc. 113 Sau ®©y lµ h×nh ¶nh cña mÆt cong ®−îc m« pháng sau khi néi suy vµ ®−îc thÓ hiÖn theo hai h−íng ngang vµ däc Hình 3.5.5 114 Hình 3.5.6 2. VÝ dô 2 - NhËp vµo file d÷ liÖu c¸c ®iÓm tùa cã tªn tru2.txt víi néi dung nh− sau: 11 11 140 100 5 132.36 123.51 5 112.36 138 5 87.64 138 5 67.64 123.51 5 60 100 5 67.64 76.5 5 87.64 62 5 112.36 62 5 132.36 76.5 5 140 100 5 150 100 10 140.45 129.4 10 115 115.45 147.55 10 84.55 147.55 10 59.55 129.4 10 50 100 10 59.55 70.61 10 84.55 52.45 10 115.45 52.45 10 140.45 70.61 10 150 100 10 140 100 15 132.36 123.51 15 112.36 138 15 87.64 138 15 67.64 123.51 15 60 100 15 67.64 76.5 15 87.64 62 15 112.36 62 15 132.36 76.5 15 140 100 15 130 100 20 124.27 117.63 20 109.27 128.53 20 90.73 128.53 20 75.73 117.63 20 70 100 20 75.73 82.37 20 90.73 71.47 20 109.27 71.47 20 124.27 82.36 20 130 100 20 140 100 25 132.36 123.51 25 112.36 138 25 87.64 138 25 67.64 123.51 25 60 100 25 67.64 76.5 25 87.64 62 25 112.36 62 25 132.36 76.5 25 140 100 25 150 100 30 116 140.45 129.4 30 115.45 147.55 30 84.55 147.55 30 59.55 129.4 30 50 100 30 59.55 70.61 30 84.55 52.45 30 115.45 52.45 30 140.45 70.61 30 150 100 30 140 100 35 132.36 123.51 35 112.36 138 35 87.64 138 35 67.64 123.51 35 60 100 35 67.64 76.5 35 87.64 62 35 112.36 62 35 132.36 76.5 35 140 100 35 130 100 45 124.27 117.63 45 109.27 128.53 45 90.73 128.53 45 75.73 117.63 45 70 100 45 75.73 82.37 45 90.73 71.47 45 109.27 71.47 45 124.27 82.36 45 130 100 45 125 100 55 120.2 114.7 55 107.7 123.8 55 92.3 123.8 55 79.8 114.7 55 75 100 55 79.8 85.3 55 92.3 76.2 55 107.7 76.2 55 120.2 85.3 55 125 100 55 117 130 100 60 124.27 117.63 60 109.27 128.53 60 90.73 128.53 60 75.73 117.63 60 70 100 60 75.73 82.37 60 90.73 71.47 60 109.27 71.47 60 124.27 82.36 60 130 100 60 125 100 70 120.2 114.7 70 107.7 123.8 70 92.3 123.8 70 79.8 114.7 70 75 100 70 79.8 85.3 70 92.3 76.2 70 107.7 76.2 70 120.2 85.3 70 125 100 70 Dßng ®Çu tiªn chøa hai sè (11 , 11) lµ sè hµng vµ cét cña l−íi ®iÓm tùa néi suy mÆt cong. C¸c dßng cßn l¹i lµ to¹ ®é cña c¸c ®iÓm tùa ®ã lÇn l−ît theo thø tù tõng cét kÕ tiÕp nhau cña l−íi ®iÓm néi suy. Trong vÝ dô nµy lµ mét mÆt cong trßn xoay khÐp kÝn cã mÆt c¾t ngang lµ c¸c ®−êng trßn ®ång t©m. 118 Hình 3.5.7 Sau ®©y lµ h×nh ¶nh cña mÆt cong ®−îc m« pháng sau khi néi suy vµ thÓ hiÖn theo hai h−íng ngang vµ däc. Hình 3.5.8 119 Hình 3.5.9 3. VÝ dô 3 - NhËp vµo file d÷ liÖu c¸c ®iÓm tùa cã tªn tru3.txt Hình 3.5.10 120 Sau ®©y lµ h×nh ¶nh cña mÆt cong ®−îc m« pháng sau khi néi suy vµ thÓ hiÖn theo hai h−íng ngang vµ däc. Hình 3.5.11 121 5.3. Thuật toán quả bóng rơi và phương pháp nội suy ThuËt to¸n qu¶ bãng r¬i (Ball Fall)  Néi dung cña thuËt to¸n nh− sau: Tõ tËp ®iÓm ®o ®−îc, tiÕn hµnh phñ l−íi tam gi¸c lªn vËt thÓ. ViÖc phñ tam gi¸c lªn vËt thÓ cã nhiÒu c¸ch, vÝ dô nh− c¸ch d−íi ®©y: H×nh 3.5.12: §Þnh nghÜa tam gi¸c Delaunay vµ biÓu ®å Voronoi H×nh 3.5.13: Mèi quan hÖ gi÷a tam gi¸c Delaunay vµ biÓu ®å Voronoi 122 Tõ tËp datapoints ®o ®−îc ta tiÕn hµnh s¾p xÕp c¸c ®iÓm gÇn nhau h¬n (so víi c¸c ®iÓm kh¸c l¹i), øng víi mçi ®iÓm ta nèi tam gi¸c víi hai ®iÓm gÇn h¬n. TËp hîp c¸c tam gi¸c nµy t¹o thµnh l−íi tam gi¸c bao phñ lªn toµn vËt thÓ, ®ã chÝnh lµ quan hÖ gi÷a biÓu ®å Vronoi vµ Delaunay. ViÖc phñ tam gi¸c nh− vËy râ rµng nã cã −u ®iÓm lµ gióp ng−êi ®o tiÕt kiÖm ®−îc thêi gian ®o, xong ®«i khi g©y ra nh÷ng nhÇm lÉn rÊt khã ph¸t hiÖn khi tiÕn hµnh thuËt to¸n. §Ó tr¸nh nh÷ng nhÇm lÉn ®ã, ta nªn quy ®Þnh quy luËt lÊy ®iÓm trªn vËt thÓ nh− sau: Š Chia vËt thÓ thµnh nhiÒu líp kh¸c nhau, c¸c líp ®−îc chia ph¶i b¶o ®¶m khi ghÐp c¸c líp ®ã l¹i th× chóng ph¶i bao phñ hoµn toµn ®−îc vËt thÓ. Š Trong tõng líp ta tiÕn hµnh lÊy ®iÓm sao cho 3 ®iÓm liªn tiÕp kh«ng th¼ng hµng, nghÜa lµ chóng ph¶i t¹o thµnh mét tam gi¸c. Sau khi cã tËp datapoints ®o ®−îc b»ng c¸ch trªn ta chiÕu toµn bé vËt thÓ xuèng 3 mÆt ph¼ng to¹ ®é xoy, yoz vµ zox. Trªn tõng mÆt ph¼ng, cø ba ®Ønh cña tam gi¸c hoµn toµn x¸c ®Þnh mét mÆt ph¼ng d¹ng: (D): Ax + By + Cz + D = 0. Gi¶ sö chiÕu toµn bé vËt thÓ võa dùng xuèng mÆt ph¼ng (xOy): 123 H×nh 3.5.14: S¬ ®å thuËt to¸n Ball Fall. KÎ ®−êng th¼ng yj // Ox, (j = 1, …, m). øng víi mçi yj ta chia ®o¹n [x1, xn] thµnh n phÇn, b−íc chia lµ dentalx, tõ ®ã ta thu ®−îc ®iÓm M(i,j) tr−ît trªn ®−êng th¼ng yj. §Õn ®©y chóng ta x¸c ®Þnh xem M(i,j) thuéc tam gi¸c nµo, c¨n cø vµo ®ã ta sÏ x¸c ®Þnh ®−îc thµnh phÇn cao ®é zk, (k=1, …, p) b»ng c¸ch thay to¹ ®é xi, yj vµo ph−¬ng tr×nh (D). Mét c¸ch t−¬ng tù, ta còng tiÕn hµnh trªn hai mÆt ph¼ng to¹ ®é cßn l¹i. TËp hîp M(i,j,k), víi m, n, p ®ñ lín ta thu ®−îc vËt thÓ (V) ®· mÞn ho¸ vµ chÝnh x¸c ho¸.  Mét sè chó ý: Š C¸c líp ®iÓm ®−îc lÊy nªn cã phÇn giao nhau, ®Ó vËt thª thu ®−îc chÝnh x¸c h¬n. Š §Ó tr¸nh nhÇm lÉn : kh«ng biÕt ®iÓm ®−îc chiÕu lªn mÆt ph¼ng to¹ ®é lµ thuéc tam gi¸c nµo ta kh«ng nªn xÐt nhiÒu líp liÒn mét lóc hoÆc nhiÒu tam gi¸c liÒn mét lóc, mµ nªn xÐt tõng tam gi¸c trong tõng líp mét. 124 Š Khi ®−îc chiÕu lªn c¸c mÆt ph¼ng to¹ ®é, ba ®iÓm liªn tiÕp ch−a ch¾c ®· t¹o thµnh mét tam gi¸c h×nh häc, nghÜa lµ kh«ng ®¸p øng ®−îc yªu cÇu cña thuËt to¸n (ph¶i lµ tam gi¸c), khi ®ã cÇn t¨ng ®é chÝnh x¸c cña sè hiÓn thÞ (dïng lÖnh Format ®Ó t¨ng kh¶ n¨ng biÓu diÔn c¸c ch÷ sè cã nghÜa). 5.31. ThuËt to¸n nèi ®iÓm néi suy (Interpolate)  Néi dung cña thuËt to¸n Ta tiÕn hµnh c¾t vËt thÓ (V) bëi c¸c mÆt ph¼ng (Pi) // (xOy), (i=1,n). Kho¶ng c¸ch gi÷a c¸c mÆt ph¼ng (Pi) nµy lµ iz∆ , víi iz∆ ≠ 1−∆ iz . T¹i nh÷ng vÞ trÝ mµ tiÕt diÖn kh«ng thay ®æi hoÆc Ýt thay ®æi th× ta lÊy iz∆ lín, cßn nh÷ng vÞ trÝ mµ tiÕt diÖn thay ®æi nhiÒu th× ta lÊy iz∆ nhá ®Õn møc cã thÓ. Gäi (Si) = (Pi) /\ (V) th× (Si) sÏ hoµn toµn ®−îc x¸c ®Þnh b»ng ph−¬ng ph¸p néi suy: Š Dïng m¸y ®o ®iÓm ®Ó lÊy mét sè h÷u h¹n c¸c ®iÓm Mi,j = (xi,j, yi,j, zi) trªn (Si), víi j = 1, m. (m cµng lín, phÐp ®o cµng chÝnh x¸c). Š Tõ tËp ®iÓm {M(i,j)} ta x¸c ®Þnh ®−êng cong (Ci): y = f(x) = Pn(x) b»ng ®a thøc néi suy Lagrage hoÆc ®a thøc néi suy Newton. Š Chia ®o¹n [min{xi,j}, max{xi,j}] thµnh m' phÇn víi b−íc chia lµ x∆ , khi ®ã: xi,j' = xi,j'-1 + x∆ , j' = 1, m'. Thay c¸c xi,j' vµo (Ci) ta t×m ®−îc yi,j' vµ thu ®−îc tËp {M'i,j' = (xi,j', yi,j', zi)} chøa {Mi,j = (xi,j, yi,j, zi)}. Š V× th«ng th−êng c¸c biªn d¹ng (Si) lµ c¸c ®−êng cong kÝn, nªn ®Ó tr¸nh trïng lÆp c¸c gi¸ trÞ xi,j' ta cÇn chia (Si) thµnh nhiÒu phÇn kh¸c nhau: (Sik), k = 1, p. øng víi mçi (Sik) hµm sè f(x) ph¶i ®¬n ®iÖu. Š Nèi c¸c ®iÓm M'i,j' víi nhau ta sÏ thu ®−îc biªn d¹ng (Si). 125 Trªn ®©y ta thùc hiÖn néi suy cho hÖ trôc xOy, mét c¸ch t−¬ng tù ta còng tiÕn hµnh néi suy cho c¸c hÖ trôc yOz vµ xOz. Cuèi cïng vËt thÓ (V) cÇn dùng lµ tËp hîp cña v« sè c¸c ®iÓm: {M'i,j' = (xi,j', yi,j', zi)}, víi i = 1, 2, …, n; j' = 1, 2, …, m'. Râ rµng khi m', n ®ñ lín th× vËt thÓ (V) cÇn dùng ®−îc mÞn ho¸ vµ chÝnh x¸c ho¸. 5.3.2. ThuËt to¸n mÞn ho¸ ®−êng cong (Curve Fitting)  Néi dung cña thuËt to¸n: ý t−ëng cña thuËt to¸n nµy hoµn toµn gièng víi thuËt to¸n nèi ®iÓm néi suy, ®iÓm kh¸c biÖt duy nhÊt lµ {M'i,j' = (xi,j', yi,j', zi)} kh«ng chøa {Mi,j = (xi,j, yi,j, zi)}, nghÜa lµ ®−êng cong (Ci) hÇu nh− kh«ng ®i qua c¸c ®iÓm M(i,j). Do vËy nªn ®Ó cã thÓ dùng ®−îc vËt thÓ mét c¸ch chÝnh x¸c buéc ta ph¶i quan t©m tíi sai sè lín nhÊt vµ nhá nhÊt nh− lµ mét nguyªn t¾c ®Ó tiÕn hµnh néi suy cho c¸c biªn d¹ng kh¸c nhau. 5.4 Xây dựng chương trình máy tính §Ó hiÖn thùc ho¸ phÇn lý thuyÕt ®· nªu ë trªn, t¸c gi¶ tiÕn hµnh kh«i phôc bÒ mÆt cña phom giµy nam. 5.4.1 LÊy ®iÓm trªn vËt thÓ b»ng m¸y ®o to¹ ®é MicroScribe G2X (lÊy datapoints) Sau khi cè ®Þnh vËt thÓ cÇn ®o vµ m¸y ®o trªn ®å g¸, Reset l¹i m¸y ®o (hiÖu chØnh th«ng sè m¸y ®o nÕu cÇn thiÕt) ta tiÕn hµnh ®o theo ®óng nguyªn t¾c ®· tr×nh bµy ë trªn. KÕt qu¶ cña qu¸ tr×nh ®o lµ c¸c tÖp d÷ liÖu d¹ng *.txt, vÝ dô giay.txt chøa tÊt c¶ c¸c ®iÓm cÇn ®o. V× ta ®Þnh d¹ng m¸y ®o kÕt xuÊt víi tiÖn Ých notepad.exe cña hÖ ®iÒu hµnh MS Windows, nªn theo ®Þnh d¹ng nµy c¸c ®iÓm ®o ®−îc bè trÝ trªn tõng dßng chøa trong tËp tin giay.txt. 126 ChÝnh v× vËy ®Ó nhËn biÕt ®−îc c¸c líp ®iÓm ®o ®−îc tõ m¸y ®o täa ®é ta cÇn ®−a thªm vµo tËp tin giay.txt mét sè ký tù ®Æc biÖt t¹i vÞ trÝ kÕt thóc líp ®iÓm ®ã (H×nh 7.5). 5.4.2. C¸c thao t¸c thùc hiÖn trªn phÇn mÒm REAutoTec 1.0 Sau khi cã ®−îc tÖp d÷ liÖu giay.txt, ta b¾t ®Çu xö lý chóng trªn ch−¬ng tr×nh REAutoTec 1.0 (do t¸c gi¶ tù thiÕt kÕ) ®Ó gi¶i bµi to¸n RE vµ RPT theo c¸c b−íc c¬ b¶n sau:  NhËp User name vµ Serial number, ch−¬ng tr×nh chØ tiÕp tôc khi cã chÝnh x¸c c¶ 2 th«ng tin nµy. Hình 3.5.15  NÕu nhËp ®óng sÏ xuÊt hiÖn giao diÖn chÝnh cña ch−¬ng tr×nh 127 Hình 3.5.16 C¸c vïng thao t¸c: Š Vïng 1: n¬i nhËp tªn tÖp d÷ liÖu d¹ng *.txt. Ên nót Bowse ®Ó duyÖt tíi tÖp giay.txt hay layerall.txt, hoÆc gâ ®−êng dÉn vµo « bªn c¹nh Š Vïng 2: C¸c th«ng sè cña qu¸ tr×nh xö lý. T¹i ®©y cÇn chän sè ®iÓm cÇn lÊy trong mçi tam gi¸c, vµ chän mÆt ph¼ng chiÕu Š Vïng 3: C¸c th«ng sè cho viÖc liªn kÕt c¸c ®iÓm ®o ®−îc Š Vïng 4: C¸c nót chøc n¨ng Š Vïng 5: C¸c tuú chän ®å ho¹ Š Vïng 6: Mét sè ph−¬ng ph¸p vÏ bÒ mÆt vËt thÓ Š Vïng 7: Cöa sæ hiÓn thÞ kÕt qu¶ tÝnh to¸n b¾ng sè 128 Š Vïng 8: Cöa sæ ®å ho¹  Ên Browse ®Ó chän file d÷ liÖu, Ên Ready ®Ó x¸c lËp d÷ liÖu ®Çu vµo vµ tiÕn hµnh quan s¸t vËt thÓ ch−a qua xö lý, Ên OK ®Ó thùc hiÖn xö lý, chän « Plot with output data ®Ó quan s¸t vËt thÓ sau xö lý, ®ång thêi quan s¸t vïng 7 vµ 8. Riªng vïng 5, h·y chän mét sè « ®Ó viÖc quan s¸t vËt thÓ ®−îc râ rµng h¬n.  Mét sè kÕt qu¶ thu ®−îc: Š Khi Ên nót Ready: Hình 3.5.17 Š Khi Ên nót OK 129 Hình 3.5.18 Š Khi chän Export to AutoCAD Hình 3.5.19 130 T¹i cöa sæ më ra, ta cÇn nhËp tªn file Autolisp muèn l−u. Sau ®ã vµo menu Tool>Autocad ®Ó quan s¸t vËt thÓ trong AutoCAD. Bµi to¸n RPT ®−îc thùc hiÖn t¹i vïng 6, t¹i ®ã ta cã thÓ c¾t vËt thÓ theo mÆt c¾t vu«ng gãc víi trôc x, y hay z, hoÆc c¾t ®ång thêi theo hai trong ba trôc täa ®é ®ã. Hình 3.5.20 131 5.5. Chương trình phần mềm tái hiện các bề mặt cong phức tạp #include #include #include #include #include #include #include #include #include #include "Grapht.h" #include "Mouset.h" #include "fontt.h" int T=20; void MemShow() { char St[20]; ultoa(MemAvail(),St,10); setfillstyle(1,4); bar(580,445,639,479); settextjustify(1,1); settextstyle(0,0,1); setcolor(15); outtextxy(610,465,St); } struct wndDraw { float ToaDox,ToaDoy; struct wndDraw *Dau,*Tiep; }; typedef wndDraw draw; class Main { int x1,y1,x2,y2,Number; int oldMx,oldMy,oldButton,chkWork; int oldMy3,oldMx3,oldButton2,oldButton3,oldButton4,My3,Mx3,clicked; int n,Click,Clicked,Mousepressed,mclick; int DLine,DCircle,Move; double XT,YT,R,M1,M2,M3; double Min1,Min2,Min3; long double GocMin1,GocMin3; int i,j; double ToaDox[1500],ToaDoy[1500]; int Mx1,My1,Mx2,My2; draw *TempDau,*Temp; Button cmdExit,cmdClear,cmdLine,cmdCircle,cmdSpeedup,cmdSpeedown,cmdRun; Window Window1,Window2; Tollboxs TollBox[10]; char *Mes[10]; public: int MouseX,MouseY; int Button,Mx,My; int xMotor,yMotor; void wndMainI(int x11,int y11,int x22,int y22) { 132 x1=x11; y1=y11; x2=x22; y2=y22;Number=0; XT=0;YT=0; Min1=0;Min2=0;Min3=0; M1=0;M2=0;M3=0;R=0;0; xMotor=yMotor=0; } void wndMainInit(); void OutputMouse(int x,int y); void InputMouseL(); void InputMouseC(); void wndLine(); void XDTam(double x1,double y1,double x2,double y2,double x3,double y3); void CheckLine(); void wndCircle(); void DrawCircle(); void CheckCircle(); void wndDraw(); void Reset(); void Run(); void Write(int); void Speedup(); void Speedown(); void wndCheck(); }; Main wndMain; int main(void) { InitGraph(); MouseInit();MouseShow(); wndMain.wndMainInit();wndMain.wndDraw(); Shadow(72,42,getmaxx()-2,40,1); while(1) { wndMain.wndCheck(); } CloseGraph(); return(0); } void Main::wndMainInit() { wndMain.wndMainI(20,42,632,440); oldButton=Click=0; Clicked=chkWork=False;Mousepressed=0,Move=1; oldButton3=oldButton2=oldButton4=0; TempDau=new draw; Temp=TempDau;Temp->Tiep=NULL;Temp->Dau=NULL; Window1.WindowInit(0,22,getmaxx(),getmaxy()-40,7,"Robot Commander",False,True,False); Window2.WindowInit(0,0,0,0,0,"",False,True,False); cmdExit.Init(3,447,65,475,"Exit","",False); cmdSpeedup.Init(350,447,430,475,"Speedown","",False); cmdSpeedown.Init(440,447,520,475,"Speedup","",False); cmdClear.Init(280,447,340,475,"Clear","",False); cmdLine.Init(210,447,270,475,"Line","",False); cmdCircle.Init(140,447,200,475,"Circle","",False); cmdRun.Init(70,447,130,475,"Run","",False); Reset(); 133 }; void Main::wndDraw() { MouseHide(); Window1.Draw(); Window2.Draw(); cmdExit.Draw(); cmdClear.Draw(); cmdLine.Draw(); cmdCircle.Draw(); cmdSpeedup.Draw(); cmdSpeedown.Draw(); cmdRun.Draw(); char St[10]; setcolor(0); setlinestyle(0,0,1); //Ruler for(i=0;i<y2-y1-30;i++) if(i%2==0) if(i%40==0) { line(x1-4,y1+24+i,x1+6,y1+24+i); itoa(i,St,10); settextjustify(2,1); settextstyle(0,1,1); outtextxy(x1-5,y1+24+i,St); } else line(x1,y1+24+i,x1+6,y1+24+i); for(i=0;i<x2-x1;i++) if(i%2==0) if(i%40==0) { line(x1+i,y1+14,x1+i,y1+22); itoa(i,St,10); settextjustify(1,0); settextstyle(0,0,1); outtextxy(x1+i,y1+13,St); } else line(x1+i,y1+18,x1+i,y1+22); MemShow(); MouseShow(); }; void Main::OutputMouse(int x,int y) { char St[10],Tg[10]; itoa(x-25,Tg,10); strcpy(St,"["); strcat(St,Tg); strcat(St,"x"); itoa(y-65,Tg,10); strcat(St,Tg); strcat(St,"]"); setfillstyle(1,7); bar(x2-35-36,y1-10-5,x2-35+36,y1-10+5); settextjustify(1,1); settextstyle(0,0,1);setcolor(0); outtextxy(x2-35,y1-10,St); setwritemode(XOR_PUT); setlinestyle(0,0,1); setcolor(6); line(x-20,y,x+20,y); line(x,y-20,x,y+20); setlinestyle(0,0,1); rectangle(x-3,y-3,x+3,y+3); 134 setwritemode(COPY_PUT); if(mclick==1) { itoa(x-90,Tg,10); strcpy(St,"["); strcat(St,Tg); strcat(St,"x"); itoa(y-62,Tg,10); strcat(St,Tg); strcat(St,"]"); setfillstyle(1,7); bar(x2-160,y1-10-5,x2-80,y1-10+5); settextjustify(1,1); settextstyle(0,0,1);setcolor(3); outtextxy((x2-160+x2-80)/2,(y1-10+y1-10)/2,St); setwritemode(XOR_PUT); setlinestyle(0,0,1); setcolor(6); line(x-20,y,x+20,y); line(x,y-20,x,y+20); setlinestyle(0,0,1); rectangle(x-3,y-3,x+3,y+3); setwritemode(COPY_PUT); } } void Main::wndCheck() { MemShow(); Write(T); char STT[20],ST[20],STt[20]; int OldMx,OldMy,x,y; cmdExit.Check(); if(cmdExit.MClick==1) exit(1); cmdClear.Check(); if(cmdClear.MClick==1) {Reset();Number=0;Button=0;} cmdLine.Check(); if(cmdLine.MClick==1) {Move=0;DCircle=0;DLine=1;} cmdCircle.Check(); if(cmdCircle.MClick==1) {Move=0;DLine=0;DCircle=1;} cmdSpeedup.Check(); if(cmdSpeedup.MClick==1) {Speedup();} cmdSpeedown.Check(); if(cmdSpeedown.MClick==1) {Speedown();} cmdRun.Check(); if(cmdRun.MClick==1) {Run();} for(i=1;i<10;++i) { TollBox[i].Check(); } GetMouse(&Button,&Mx,&My);MouseX=Mx;MouseY=My; if(MouseGraphIn(20,65,632,440)) if(chkWork==False) { MouseHide(); chkWork=True; OutputMouse(Mx,My);oldMx=Mx; oldMy=My; } else; else if(chkWork==True) { OutputMouse(oldMx,oldMy); chkWork=False; MouseShow(); } if(chkWork) 135 { if(DLine==1) CheckLine(); if(DCircle==1) CheckCircle(); if(Button==2 && Clicked) { setcolor(3); setwritemode(XOR_PUT); line(Mx1,My1,Mx2,My2); setwritemode(XOR_PUT); Clicked=False; OutputMouse(Mx,My); OutputMouse(Mx,My); }; if(Move==1) if(oldMx!=Mx||oldMy!=My) { OutputMouse(oldMx,oldMy); OutputMouse(Mx,My); oldMx=Mx; oldMy=My; } if(DLine==1) if(oldMx!=Mx || oldMy!=My) { OutputMouse(oldMx,oldMy); if(Clicked){wndLine();} OutputMouse(Mx,My); Mx2=oldMx=Mx; My2=oldMy=My; } if(DCircle==1) if(oldMx!=Mx||oldMy!=My) { OutputMouse(oldMx,oldMy); OutputMouse(Mx,My);Mx3=oldMx=Mx;My3=oldMy=My; } } } void Main::Run() { draw *This; int xBit[4]={1,2,4,8}; int yBit[4]={16,32,64,128}; float x,y; setfillstyle(1,7); bar(93,63,630,430); This=TempDau; while(This->Tiep->Tiep!=NULL) { x=This->ToaDox;y=This->ToaDoy; setcolor(5); line(x,y,This->ToaDox,This->ToaDoy); This=This->Tiep; outport(0x378,xBit[xMotor]+yBit[yMotor]); if(Temp->ToaDox-x>0) if(xMotor<3) ++xMotor; else xMotor=0; else if(Temp->ToaDox-x0) --xMotor; else xMotor=3; if(Temp->ToaDoy-y>0) if(yMotor<3) ++yMotor; else yMotor=0; else if(Temp->ToaDoy-y0) --yMotor; else yMotor=3; delay(T); } 136 }; void Main::Reset() { int Mx,Button,My; while(Temp->Dau!=NULL){ Temp=Temp->Dau; delete(Temp->Tiep);} Temp->Tiep=NULL; setfillstyle(1,7); bar(27,65,630,430); GetMouse(&Button,&Mx,&My); Mx2=oldMx=Mx; My2=oldMy=My; } void Main::InputMouseL() { draw *Swap; int i; if(abs(Mx2-Mx1)>abs(My2-My1)) for(i=0;i<abs(Mx2-Mx1);++i) { if(Mx2>Mx1) Temp->ToaDox=Mx1+i; else Temp->ToaDox=Mx1-i; if(My2>My1) Temp->ToaDoy=My1+i*abs(My2-My1)/abs(Mx2-Mx1); else Temp->ToaDoy=My1-i*abs(My2-My1)/abs(Mx2-Mx1); Temp->Tiep=new draw;//De chuyen den vi tri con tro tiep theo Swap=Temp; Temp=Temp->Tiep; Temp->Dau=Swap; } else for(i=0;i<abs(My2-My1);++i) { if(Mx2>Mx1) Temp->ToaDox=Mx1+i*abs(Mx2-Mx1)/abs(My2-My1); else Temp->ToaDox=Mx1-i*abs(Mx2-Mx1)/abs(My2-My1); if(My2>My1) Temp->ToaDoy=My1+i; else Temp->ToaDoy=My1-i; Temp->Tiep=new draw;//De chuyen den vi tri con tro tiep theo Swap=Temp; Temp=Temp->Tiep; Temp->Dau=Swap; } Temp->Tiep=NULL; }; void Main::wndLine() { setcolor(3); setwritemode(XOR_PUT); line(Mx1,My1,Mx2,My2); line(Mx1,My1,MouseX,MouseY); setwritemode(XOR_PUT); } void Main::CheckLine() { if(Button==1&&oldButton==0) { if(Clicked) { mclick=1;OutputMouse(Mx1,My1);mclick=0; InputMouseL(); } 137 Clicked=1;Mx1=Mx2=Mx; My1=My2=My;oldButton=1; } if(Button==0) oldButton=0; } void Main::CheckCircle() { if(Button==1&&oldButton==0) { oldButton=1; if(Number==0) {Mx1=Mx;My1=My;putpixel(Mx1,My1-1,6);} if(Number==1) {Mx2=Mx;My2=My;putpixel(Mx2,My2-1,6);Clicked=1;} if(Number==2) { Mx3=Mx;My3=My;putpixel(Mx3,My3-1,6); wndCircle();InputMouseC(); Mx1=Mx;My1=My; Number=0;Clicked=0; } Number++; } if(Button==0) oldButton=0; if(Button==2) Button=0; } void Main::InputMouseC() { draw *Swap; if(M2>M3) { for(i=0;i<360-M3;++i) { Temp->ToaDox=ToaDox[i]; Temp->ToaDoy=ToaDoy[i]; Temp->Tiep=new draw;//De chuyen den vi tri con tro tiep theo Swap=Temp; Temp=Temp->Tiep; Temp->Dau=Swap; } } else for(i=0;i<M3+1;i++) { Temp->ToaDox=ToaDox[i]; Temp->ToaDoy=ToaDoy[i]; Temp->Tiep=new draw;//De chuyen den vi tri con tro tiep theo Swap=Temp; Temp=Temp->Tiep; Temp->Dau=Swap; } Temp->Tiep=NULL; } void Main::DrawCircle() { moveto(ToaDox[1],ToaDoy[1]); if(M2>M3) { for(i=1;i<360-M3;i++) 138 { lineto(ToaDox[359-i],ToaDoy[359-i]); delay(5); } } else for(i=0;i<M3+1;i++) { lineto(ToaDox[i],ToaDoy[i]); delay(5); } } void Main::wndCircle() { XDTam(Mx1,My1,Mx2,My2,Mx3,My3); DrawCircle(); } void Main::XDTam(double x1,double y1,double x2,double y2,double x3,double y3) { double A,Tgx,Tgy; float a1,b1,a2,b2; if(x1==x2||y1==y2) { a1=(x3-x2)/(y2-y3); b1=(y3*y3+x3*x3-y2*y2-x2*x2)/(2*(y3-y2)); a2=(x1-x3)/(y3-y1); b2=(y1*y1+x1*x1-y3*y3-x3*x3)/(2*(y1-y3)); XT=(double)(b2-b1)/(a1-a2); YT=(double)(b2*a1-b1*a2)/(a1-a2); R=(double)sqrt((XT-x1)*(XT-x1)+(YT-y1)*(YT-y1)); } else { if(x2==x3||y2==y3) { a1=(x1-x2)/(y2-y1); b1=(y1*y1+x1*x1-y2*y2-x2*x2)/(2*(y1-y2)); a2=(x1-x3)/(y3-y1); b2=(y1*y1+x1*x1-y3*y3-x3*x3)/(2*(y1-y3)); XT=(double)(b2-b1)/(a1-a2); YT=(double)(b2*a1-b1*a2)/(a1-a2); R=(double)sqrt((XT-x1)*(XT-x1)+(YT-y1)*(YT-y1)); } else { if(x3==x1||y3==y1) { a1=(x3-x2)/(y2-y3); b1=(y3*y3+x3*x3-y2*y2-x2*x2)/(2*(y3-y2)); a2=(x1-x2)/(y2-y1); b2=(y1*y1+x1*x1-y2*y2-x2*x2)/(2*(y1-y2)); XT=(double)(b2-b1)/(a1-a2); YT=(double)(b2*a1-b1*a2)/(a1-a2); R=(double)sqrt((XT-x1)*(XT-x1)+(YT-y1)*(YT-y1)); } else 139 { a1=(x1-x2)/(y2-y1); b1=(y1*y1+x1*x1-y2*y2-x2*x2)/(2*(y1-y2)); a2=(x1-x3)/(y3-y1); b2=(y1*y1+x1*x1-y3*y3-x3*x3)/(2*(y1-y3)); XT=(double)(b2-b1)/(a1-a2); YT=(double)(b2*a1-b1*a2)/(a1-a2); R=(double)sqrt((XT-x1)*(XT-x1)+(YT-y1)*(YT-y1)); } } } for (i=0;i<360;i++) //xac dinh toa do diem tren duong tron { A=(double)(3.14*i/180); ToaDox[i]=(double)(XT+R*cos(A)); ToaDoy[i]=(double)(YT+R*sin(A)); } //end of for Min1=(double)sqrt((ToaDox[0]-x1)*(ToaDox[0]-x1)+(ToaDoy[0]-y1)*(ToaDoy[0]-y1)); for(i=0;i<360;i++) if(Min1>(double)sqrt((ToaDox[i]-x1)*(ToaDox[i]-x1)+(ToaDoy[i]-y1)*(ToaDoy[i]-y1))) { Min1=(double)sqrt((ToaDox[i]-x1)*(ToaDox[i]-x1)+(ToaDoy[i]-y1)*(ToaDoy[i]-y1)); M1=i; } if(M1>0) for(i=0;i<M1;i++) { Tgx=ToaDox[0]; Tgy=ToaDoy[0]; for(j=0;j<360;j++) { ToaDox[j]=ToaDox[j+1]; ToaDoy[j]=ToaDoy[j+1]; if(j==359) { ToaDox[359]=Tgx; ToaDoy[359]=Tgy; } } } Min2=(double)sqrt((ToaDox[0]-x2)*(ToaDox[0]-x2)+(ToaDoy[0]-y2)*(ToaDoy[0]-y2)); for(i=0;i<360;i++) if(Min2>(double)sqrt((ToaDox[i]-x2)*(ToaDox[i]-x2)+(ToaDoy[i]-y2)*(ToaDoy[i]-y2))) { Min2=(double)sqrt((ToaDox[i]-x2)*(ToaDox[i]-x2)+(ToaDoy[i]-y2)*(ToaDoy[i]-y2)); M2=i; } Min3=(double)sqrt((ToaDox[0]-x3)*(ToaDox[0]-x3)+(ToaDoy[0]-y3)*(ToaDoy[0]-y3)); for(i=0;i<360;i++) if(Min3>(double)sqrt((ToaDox[i]-x3)*(ToaDox[i]-x3)+(ToaDoy[i]-y3)*(ToaDoy[i]-y3))) { Min3=(double)sqrt((ToaDox[i]-x3)*(ToaDox[i]-x3)+(ToaDoy[i]-y3)*(ToaDoy[i]-y3)); M3=i; } } void Main::Write(int x) 140 { char St[10],Tg[10]; itoa(x,Tg,10); strcpy(St,"["); strcat(St,Tg); strcat(St,"]"); setfillstyle(1,7); bar(460,3,636,25); settextjustify(1,1); settextstylevn(0,0,1); outtextxy(600,18,St); outtextxy(520,18,"Thoi gian tre"); } void Main::Speedup() {T=T+2;Write(T);} void Main::Speedown() {T=T-2; if(T<0){T=0;} Write(T);} 141 IV. KẾT LUẬN 1. Các phương pháp hiện đại trong robotics vận dụng cho việc tính toán cơ cấu các thiết bị CMM nổi trội so với các phương pháp kinh điển trong tính toán cơ cấu cơ khí thông thường, nhất là đối với các cơ cấu chuỗi hở nhiều khâu nối liên tiếp như các cơ cấu tay đo. Với các phương pháp đã vận dụng này có thể tính toán một cách hiệu quả khi giải các bài toán động học thuận, các bài toán động học ngược và các bài toán di chuyển nhỏ trong cơ cấu máy CMM. 2. Xây dựng được các phiên bản chương trình phần mềm tái hiện các bề mặt phức tạp với số phép đo giảm thiểu. Những phiên bản đầu tiên dựa vào ý tưởng của các thuật toán “Quả bóng rơi” (Ball Fall) hoặc “Delaunay” và các phương pháp nội suy thông thường. Phiên bản cuối có nhiều cải tiến và đã được cấp giấy bản quyền tác giả. 3. Sau khi nghiên cứu, thiết kế, chế thử một vài cơ cấu thiết bị tay đo CMM đã đề xuất một loại thiết bị CMM kiểu mới hoạt động theo toạ độ trụZ = Z(r, φ). Kết cấu của thiết bị gồm 4 môđun: Môđun thay đổi độ cao Z; Môđun thay đổi góc quay φ quanh trục Z; Môđun thay đổi bán kính r hướng tâm quay và môđun đầu dò điện tử. Các môđun này đều hình thành từ những thiết bị đo lường tiêu chuẩn của nước ngoài, có độ chính xác cao và đều có tín hiệu đầu ra hiện số hoặc ghép nối được với máy tính. §ång thêi kÕt hîp víi ch−¬ng tr×nh phÇn mÒm t¸i hiÖn c¸c bÒ mÆt cong phøc t¹p víi c¸c phÐp ®o kÌm phÇn suy luËn. V× thÕ thiÕt bÞ míi nµy cã thÓ ®¹t ®−îc ®é chÝnh x¸c 142 tin cËy (phô thuéc vµo c¸c m«®un thiÕt bÞ ®o ®· ®−îc chuÈn hãa vµ ch−¬ng tr×nh xö lý sè liÖu ®o) vµ møc ®Çu t− gi¶m xuèng nhiÒu lÇn. 143 Tµi liÖu tham kh¶o 1. Wu.C.H. “Robot Accuracy Analysis based on Kinematics” IEEE Journal of Robotics and Automation 2 (3). 1986. 2. Owen, T. Assembly with Robot. London: Kogan Page, 1985 3. Paul R.P., Modeling, Trajectory Caculation and Servoing of a Computer Controlled Arm. Palo Alto Calif, 1972. 4. Paul R.P., Robot Manipulators: Mathematics, Programming and Control The MIT Press – Cambridge, Massachusetts and London, England, 1981. 5. Waldron K. J., Kincel G.L., The relation between actuator geometry and mechanical effcienncy in robots. Preprints 4th CISM – IFToMM Symposium on Theory and Pract. Of Manipul. Warsawa, 1981 6. Snyder W.E., Industrial Robots: Computer Interfacing and Control. Prentice Hall Inc. New Jersey, 1985. 7. Stone H.W., Kinematic, Modeling Identification, and Control of Robotic Manipulators. Kluwer Academic publishers, 1987. 8. Shimon Y. Nof, Handbook of Industrial Robotics, 2nded. John Wiley & Sons. Inc. 1999. 9. NguyÔn ThiÖn Phóc “Robot c«ng nghiÖp” NXB khoa häc vµ kü thuËt, Hµ Néi, 2004. 10. Morgan, C. Robots: planning and implementation, UK, IFS Publications, 1984. 11. Pham and Heginbotham – Robot Grippers. Bedford, UK, IFS Publications, 1986. 144 12. NguyÔn ThiÖn Phóc, NguyÔn V¨n Minh, TrÇn Ngäc To¶n, Ph¹m §¨ng Ph−íc. Nghiªn cøu thiÕt kÕ, chÕ t¹o robot s¬n phñ RSP – 406. TuyÓn tËp b¸o c¸o khoa häc Héi nghÞ Tù ®éng hãa toµn quèc lÇn thø IV, 4/2000.

Các file đính kèm theo tài liệu này:

  • pdf62463.pdf