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
153 trang |
Chia sẻ: banmai | Lượt xem: 1781 | Lượt tải: 0
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:
- 62463.pdf