robot

หลังจากที่ดองบล็อคได้ชาติกว่าเพราะแทบไม่ได้กลับห้องเลย (แบบว่าใช้ชีวิตอยู่ในแล็บ กลับห้องมาเพื่ออาบน้ำอย่างเดียวเท่านั้น เพราะนอนก็นอนในแล็บ กินก็กินในแล็บ) ก็กลับมาเขียนต่อ แต่ด้วยความที่อาทิตย์หน้าจะมี final exam จะมานั่งเขียนก็คงไม่ดีกระไร ....

ก็เลยเอา code ของ หุ่นยนต์เราเผื่อใครสนใจจะ download กันไปดูเล่น ... แล้วไว้สอบเสร็จจะมาเขียนอธิบายต่อ code อันนี้คือ finalized code ที่เราใช้ในการแข่งขันล่ะ ผลก็ได้เข้ารอบรอง แต่โชคไม่ดี + มีปัญหาด้าน mechanic นิดหน่อย เลยตกรอบ เซ็ง ... จริงๆยังมีอีกหลายอย่างที่สามารถพัฒนาในดีกว่านี้ได้ แต่ด้วยเวลาไม่พอเลยไม่ได้ทำน่ะ ไว้เขียนเกี่ยวกับพวกส่วนต่างๆของหุ่นยนต์เสร็จแล้วจะมาเขียนว่าจะพัฒนาต่อไปยังไง


code ของหุ่นยนต์สุดรัก
จริงๆกะว่าจะเอา code มาลงให้อะ แต่ด้วยความที่มันอยู่ที่แล็บ ก็เลย.... ขี้เกียจ ช่างมัน ก็เอาเป็นว่าเรามาพูดเรื่องอื่นเกี่ยวกับ wheel encoder ดีกว่า ซึ่งก็คือการจะนับว่ามี wheel encoder count ของแต่ละล้อเท่าไหร่ เพื่อเอาไว้ใช้กับระบบ error correction ที่เราจะพูดถึงกันวันหลัง

การนับ wheel encoder count ทำได้หลักๆก็ 2 วิธี ง่ายๆคือนับที่ hardware กับ นับที่ software

โดยที่เราใช้คือการนับด้วย hadrware ด้วยเหตุผลที่ว่ามัน accurate กว่า โดยเฉพาะถ้าหุ่นยนต์ที่จะสร้างจะต้อง service interrupt routine บ่อย เพราะถ้าเกิด delay ขึ้นมา ก็จะมีปัญหาในการนับได้ แต่ข้อเสียก็คือต้องระวังปัญหา overflow เพราะเนื่องจากการนับใน hardware นั้นจะมีข้อจำกัดตรงที่ว่า hardware ให้เรานับได้ถึงแค่ไหน ซึ่งส่วนใหญ่ก็ไม่น่าเกิน 16 bit ซึ่งก็... ซึ่งก็เยอะดี แต่เรื่องของเรื่องคืน hardware จะ support รึป่าว... ยิ่ง hardware บางตัวให้แค่ 8 bit ก็เตรียมใจต้องเขียน code เพราะ code ที่จะต้องเขียนก็ต้องระวังส่วนนี้ด้วย ต้องคอย reset ไม่ให้เกิดการ overflow ขึ้น

ส่วนข้อดีในการใช้ software นับก็คือตัดปัญหาเรื่อง overflow ไป อาจจะ assign counter เป็น unsigned long ซึ่งก็แทบจะไม่เป็นปัญหาเลย ส่วนข้อเสียก็คืออย่างที่บอกคืออาจจะนับผิดพลาดได้ ถ้าต้อง service interrupt routine เยอะๆ

เอาล่ะ... เกริ่นกันมาแล้วก็มาเข้าเรื่องกันคราวหน้าละกัน ง่วงแล้ว (หาเรื่องอู้)

edit @ 2005/04/11 23:15:14
พูดถึง line follower กันไปแล้ว ก็มาพูดถึง wheel encoder กันดีกว่า ว่าแต่.. มันคืออะไรหว่า

หน้าที่ของมันก็คือคอยควบคุมว่าล้อวิ่งไปแค่ไหนแล้ว ที่ต้องใช้เนื่องจากว่าใช้ล้อใช้ motor คนละตัวกัน

wheel encoder ประกอบไปด้วย
  • wheel pattern
  • IR photoreflector circuit (อย่างเดียวกับ line follower)
wheel pattern นั้นจะเป็นสีดำ ตัดกับสีขาว อย่างนี้


แต่ว่าเราจะไม่ซื้อ จะทำเอง ก็สามารถใช้ postscript ได้ โดยจะต้องมี program ใช้เปิดถึง 2 ตัวด้วยกัน (ต้องลงทั้ง 2 อันนะ) ก็มี Ghostscript กับ GSview ซึ่งก็หาได้ ที่นี่ เวลาใช้ก็เปิดแค่ GSviewเฉยๆ

ส่วน code ของตัว wheel pattern ตามนี้

%! Postscript utility for printing an encoder wheel
%
/inch {72 mul} def % #points/inch (don't change me)
/size 2 inch def % radius of encoder wheel
/segments 60 def % number of segments (black and white)
/angle 360 segments div def

/wedge
{ /radius exch def
/angle_s exch def
/angle_e exch def
newpath 0 0 moveto
0 0 radius angle_s angle_e arc
closepath
} def

gsave
3.0 inch 3.0 inch translate
0 1 segments {
360 segments div rotate
angle 0 size wedge
2 mod 0 eq {1} {0} ifelse
setgray fill
} for
grestore

showpage

เวลาจะใช้ก็ไปแก้ขนาดได้ตรง /size และแก้จำนวนของ tickที่ /segments ได้ตามต้องการ

ไว้เดี๋ยวมาต่อตรง pseudocode ของ wheel encoder คราวหน้าละกัน

edit @ 2005/04/05 21:26:24