+[ BIGz ]+

Show off !

กันยายน 30, 2008 · ให้ความเห็น

→ Leave a Commentหมวดหมู่: general

การหารากที่สอง

ธันวาคม 20, 2007 · 2 ความเห็น

ได้ฟังมาจากอ.รวิทัต ก็เลยอยากมาทบทวนซักหน่อยนะครับ

โดยนิยามของมันก็ sqrt(x) = y | y*y = x

ผมจำไม่ได้ว่า ใครเป็นคนคิดขึ้นมานะครับ algorithm ก็มีดังนี้ครับ

1. ตั้งค่าทดสอบมาหนึ่งค่า เช่น 1
2. นำ x มาหารกับค่าทดสอบ
3. หาค่าเฉลี่ยของค่าที่ได้จากข้อ 2 กับ ค่าทดสอบ
4. ทำซ้ำข้อ 2 โดยนำค่าที่ได้จากข้อ 3 เป็นค่าทดสอบของครั้งต่อไป 

ค่าที่ได้เมื่อนำมายกกำลังสอง จะลู่เข้าสู่ค่า x เรื่อยๆ ซึ่ง terminal condition ของผมก็คือ เมื่อความต่างของค่าทดสอบและค่าที่ได้จากข้อ 3 ต่างกันน้อยมากๆ  

เขียนด้วย python (อีกแล้ว – -” )ก็ได้มาประมาณนี้ครับ
def sqrt(num,testVal):
x = ((float(num) / float(testVal)) + float(testVal)) / 2
if abs(testVal-x) <= 0.0000000000000001 : return x
else : return sqrt(num,x)

→ 2 Commentsหมวดหมู่: Algorithm · Programming · Python

การใช้ array ใน NQC

ธันวาคม 17, 2007 · ให้ความเห็น

พอดีอยากจะเก็บค่าตำแหน่งที่เป็น grid ซึ่งหุ่นยนต์เคยวิ่งผ่านไปแล้วดู คิดแล้วใช้ array เก็บก็คง ok พอลองดูแล้ว ยังไงๆก็ compile ไม่ผ่าน ผมค่อนข้าง งงมาก คือ มันก็คล้ายๆ c เกือบทุกอย่างนี่หว่า syntax จะแตกต่างอะไรกันขนาดเดาไม่ถูกเลยหรอยังไง ก็เลยไปหาที่มาที่ไป ในที่สุดก็ไปเจอเขาบอกว่า  

array not available in RCX 1.5, but are in RCX 2

- -” สรุปก็ไปโหลด firmware RCX2 มาใช้ก็เรียบร้อย ok ครับ
RCX2 SDK BETA file ที่เป็น firmware ชื่อ firm0328.lgo

พอลองใช้ดู โอ้ยทุเรศที่สุดกำหนดค่าเริ่มต้นให้ array ไม่ได้ เช่น

int a[5] = {0,0,0,0,0}

ก็ต้องวน loop ไล่ใส่ค่าให้มันแบบเถือกๆไป :( ปวดหัว

→ Leave a Commentหมวดหมู่: Uncategorized

Auto Refresh

ธันวาคม 16, 2007 · 1 ความเห็น

เมื่อคืนจะเข้าเวบๆนึง ดันล่มซะอีก ก็เลยนั่งๆนอนๆเล่น แล้วก็มากด refresh อยู่บ่อยๆก็ยังไม่ได้ซะที ก็เลยหาวิธีให้มัน Auto refresh เอง จะได้ไม่ต้องนั่งกด สรุปก็ใช้ apple script ประมาณนี้ครับ  

on idle

tell application “Safari”

activate

set URL of front document to “http://????????????????????”

end tell

return 60

end idle 

→ 1 Commentหมวดหมู่: general

คูณ Matrix

ธันวาคม 16, 2007 · ให้ความเห็น

วันนี้ไม่รู้นึกครึ้มอะไร ตื่นมาเปิด podcast วิชา PL ของ อ. รวิทัต ฟัง เห็นให้น้องเขียน โปรแกรม คูณ Matrix ขนาด 1000 x 1000 ฟังแล้วก็อยากเขียนมั่ง ก็เลยลองดูแบบเถือกๆ ได้มาประมาณนี้
def Mul(MatrixA,MatrixB):
size = len(MatrixA[0])
MatrixC,tmp = zeros((size,size),int),0
for i in range(size):
for j in range(size):
for k in range(size):
tmp += MatrixA[i][k]*MatrixB[k][j]
MatrixC[i][j] = tmp
tmp = 0
return MatrixC

ลองแค่ 500 x 500 ก็ต้องหลับรอแล้ว ก็เลยลองพยายามหาวิธีให้มันไวขึ้นซักหน่อย

def MulMatrix(MatrixA,MatrixB):
size = len(MatrixA[0])
MatrixC = zeros((size,size),int)
for row in range(size):
for col in range(size):
MatrixB[row][col] = MatrixA[row][col]
for row in range(size):
for col in range(size):
MatrixC[row][col] = sum(MatrixA[row] * MatrixB[col])
return MatrixC

ทำเวลาได้ประมาณ 20 วิ
ถึงกับตกใจ เห้ย มันเป็นไปได้ยังไง แค่เอา matrix b มาสลับแถวกับหลัก แล้วก็ใช้ * array ของตัว python เอง แค่เนี้ย ไวขึ้นอย่างน่าเหลือเชื่อ งงไปเลย

→ Leave a Commentหมวดหมู่: Python

ย้ายกลับมาเขียนที่นี่แล้วนะครับ

ธันวาคม 16, 2007 · ให้ความเห็น

ไปยึด blog lab มาซะนาน ได้เวลากลับมาเขียนกันซะที บางทีก็มีเรื่องอยากเขียนแต่ ติดว่าเป็น blog lab ก็เลยไม่เขียนดีกว่า แล้วก็พาลขี้เกียจมาเขียนที่นี่ ไปซะเลย 

→ Leave a Commentหมวดหมู่: general

Surface Computing !?

มิถุนายน 11, 2007 · ให้ความเห็น

link ของวีดีโอครับ ลองคลิ๊กไปดูนะครับ สำหรับคนที่ยังไม่ได้ดู :)

มันทำได้ยังไง (วะ) เจ๋งมากเลย (ออกอารมณ์นิดนึงเพราะตอนดูตื่นเต้นกะมันจริงๆ) เจ๋งกว่า Multitouch อีก (multitouch ที่ steve jobs ยังเคยบอกว่า works like magic แล้วไอ้นี่มันต้องนิยามว่าอะไร เว่อร์ไปรึเปล่า ฮ่าๆ )

Reference :: http://www.blognone.com/node/4812

→ Leave a Commentหมวดหมู่: general

Pre-WRO 2007 @ Silpakorn

มิถุนายน 11, 2007 · 1 ความเห็น

งานแข่ง pre-wro สนามแรกก็ได้จบลงแล้วนะครับ ก่อนอื่นก็ต้องขอขอบคุณ พี่ๆจากบริษัทแกมมาโก้ และ บรรดาเพื่อนๆพี่ๆน้องๆ เอกคอม ที่มาช่วยงานกันอย่างเต็มที่ ทำให้งานสำเร็จลุล่วงไปด้วยดีครับ เป็นกิจกรรมที่ดีมากครับ มีทั้ง สนุก ขำ เหนื่อย เครียด แถมยังได้ความรู้ด้วย สำหรับเด็กๆที่มาแข่งขันคงเป็นประสบการณ์ที่ดีมากเลย น้องใหม่ที่พึ่งมาครั้งแรกก็พยายามกันอย่างเต็มที่ เห็นแล้วอยากลงไปช่วยจริงๆ

น่าสงสารน้องๆบางคนที่ทำได้ดีมากแต่พลาดโอกาสชนะไปซะงั้น บางคนก็แบตหมด เปิดโปรแกรมผิด ซ้อมทำได้แต่พอแข่งจริงเละ อะไรประมาณนั้น จริงๆแล้วก็มีคนประท้วงว่ามีคนเล่นตุกติกด้วย เพราะว่า ตัว RCX เนี่ย มันสามารถใช้ remote control ได้ แต่ไม่ใช่เจ้าของหุ่นเป็นคนบังคับ remote นะครับ ไอ้การเล่นตุกติกที่ว่านี่คือ น้องเค้าปล่อยหุ่นให้วิ่งไปตามปกติ แต่ดันมีคนอื่น (คนเล่นตุกติก) ใช้ remote ยังคับให้มันเปลี่ยนทาง หรือตกเส้น อะไรประมาณนั้น (อันนี้ไม่รู้ว่าจริงรึเปล่า แต่เขาว่ากันมาก็ต้องฟังไว้) ไอ้คนทำมันคิดได้ยังไง !? อันนี้ต้องระวังกันให้มากๆนะครับ สำหรับอาจารย์ หรือน้องๆที่มาอ่าน blog นี้ อยากให้เตรียมตัวรับมือกันไว้ก่อนเลย ที่ผมคิดไว้ก็ประมาณนี้นะครับ

1. เอาเทปกาวหรืออะไรก็ได้ที่มันทึบแสง มาปิดตรงแถบ Infrared เอาไว้เลย ช่วยได้ส่วนหนึ่งแน่นอน
2. น้องๆที่เป็นคนปล่อยหุ่นให้คอยสังเกตุที่หน้าจอ RCX ตลอดเวลา ผิดปกติรีบประท้วงทันทีเลยครับ
3. ถ้าใช้หุ่น NXT ให้ปิด bluetooth ไปเลย

น้องบางคนที่เป็นตัวเก็งกลับไม่ติดอันดับ จริงๆแล้วเขาก็เก่งจริงแหละนะ แต่ว่าอันนี้มันเป็นสนามแรก น้องที่เจนสนามหน่อยก็ขอลองให้เต็มที่ว่า ต้องทำยังไงถึงจะแก้โจทย์ได้อย่างสมบูรณ์แบบ ก็เลยได้คะแนนไม่มากเท่าที่ควร บางทีมไม่สนใจ ขอให้ได้คะแนนเยอะไว้ก่อน ก็ชนะเลิศไป อันนี้น้องๆก็ต้องตัดสินใจกันแหละนะครับ ว่าจะเอาชนะที่สนามนี้ แล้วไปเมืองนอกสู้เขาไม่ได้แน่นอน หรือจะยอมไปก่อนเพื่อเตรียมพร้อมไปเจอเด็กเก่งๆ (กว่านี้อีกมากมาย) ที่ใต้หวันแหละนะครับ เพราะยังมีให้แก้ตัวอีกตั้งหลายรอบ

มีผู้คุมที่บางคน (เหมือนจะใส่เสื้อสีแดง) ที่แบบว่า ช่วย (เรียกว่าแข่งเองเลยดีกว่ามั้ง) ซะจนเด็กไม่ได้ทำอะไรเลย ผมก็ไม่เข้าใจเหมือนกันว่าจะส่งเด็กมาแข่งทำไม น่าจะให้น้องๆเขาใช้ความสามารถของตัวเองให้เต็มที่ แต่อันนี้ก็ว่าไม่ได้เหมือนกัน เพราะเราก็ไม่เด็ดขาดเอง (ก็เชิญออกหลายรอบแล้วนะ แต่ไม่ออกซะที)

ทั้งหมดนี้ผมก็บ่นๆเล่นๆนะครับ ถ้าใครมีข้อเสนอแนะเกี่ยวกับการจัดแข่งขัน หรือ อื่นๆ ก็ comment ไว้ได้เลยนะครับ จะได้เอาไปแก้ไขปรับปรุง เผื่อว่าจะได้จัดงานอีกในโอกาสต่อๆไป

ปล. น้องๆที่พี่เป่าฟาลว์อย่าเคืองกันนะคร้าบ

→ 1 Commentหมวดหมู่: NXT · RCX · Robot

Robo Plotter

มิถุนายน 4, 2007 · 1 ความเห็น

image340.jpg

หุ่นยนต์วาดรูปอัพเกรดจากอันเดิมครับ ไอเดียหลักๆก็คือให้มันถือปากกาเมจิ ขีดเส้นตรงพอถึงจุดที่เป็นอีกหนึ่งสี (คือตอนนี้ทำได้แค่สองสี) ก็ให้ยกปากกาขึ้นแล้วก็ขีดต่อ ทีละแถวๆ หลายๆแถวก็เป็นรูปได้แล้วล่ะครับ (ก็อาร์ตดีนะ) ซึ่งกลไกของหุ่นเนี่ย มันมีสองแกนที่เป็นอิสระต่อกัน ที่เราทำเผื่อไว้จะให้มันวาดรูป หรือเขียนตัวหนังสือจริงๆ ไม่ใช่แค่ขีดเส้น

แต่โปรแกรมที่พึ่งทำนี้ก็เป็นการสั่งมันตรงๆ ว่าให้ขีดเท่าไหร่ๆ ซึ่งมันเสียเวลาในการโปรแกรมมากๆ คิดว่าต่อไปน่าจะทำให้ import ภาพเข้ามาแล้วให้มันวาดตามภาพนั้นได้เลย

ตัวอย่างภาพที่มันวาด (เป็นโลโก้ 35 ปี คณะวิทยาศาสตร์ มหาวิทยาลัยศิลปากร)

picture-4.png

clip การทำงาน ที่นี่ ครับ

หุ่นตัวนี้ทดเฟืองมาก(เกินไป)เพราะต้องการความแม่นยำในการเขียน แต่ต้องแลกมาด้วยการทำงานช้ามากกกกกก ประมาณว่า หนึ่งแถว motor หมุนเกิน 3 หมื่นองศา ตอนถ่ายก็เลยถ่ายแบบ time lapse 10 sec / frame ในคลิปมันเลยอาจจะดูเร็วเวอร์ๆ นิดๆนะครับ :)

Tip :: การวาดให้เป็นเส้นโค้ง ใช้การค่อยๆเพิ่มแรงให้แกนหนึ่งแกนเรื่อยๆครับ (ถ้าไม่ค่อยๆเพิ่มแรงมันจะเป็นเส้นเฉียงๆ)

→ 1 Commentหมวดหมู่: NXT

Using Camera in Robolab

พฤษภาคม 26, 2007 · 3 ความเห็น

มีคนถามมาเกี่ยวกับหุ่นลิฟท์ที่ผมโพสไว้ ว่ามันใช้กล้องยังไง และคิดว่าอีกหลายๆคนคงยังไม่เคยทำ ผมก็เลยขอสาธิตวิธีการใช้กล้องเบื้องต้นใน robolab นะครับ

อันนี้จะเป็นการใช้กล้องเป็น sensor จับสีในภาพ

เริ่มกันเลยนะครับ เปิด inventor lv4 ขึ้นมา จากนั้น ไปที่ menu project >> vision center
( vision center นี้เป็นฟังก์ชั่น สำหรับจัดการเรื่อง computer vision ใน robolab ครับ )

เมื่อเปิด vision center ขึ้นมา จะเป็นหน้าตาแบบนี้นะครับ

picture-2.png

จากนั้นเลือกที่ define sensor ก็จะได้หน้านี้ขึ้นมานะครับ

picture-3.png

คลิ๊กที่แถบสีเทาใต้ภาพ จะเป็นการเลือกสี สมมุติว่าเลือกสีแดงขึ้นมา
และทางด้านขวาของภาพให้เลือกเป็น pixel average
เสร็จแล้วกดที่เครื่องหมายถูกขวาล่างทำการตั้งชื่อแล้ว ok

จะกลับมาที่หน้า vision center
ติ๊กเครื่องหมายถูกที่ container สีแดง จากนั้นให้เลือก sensor ที่เราสร้างขึ้นมาเมื่อกี้ ตรง choose camera sensor type
ตรง connection speed ให้เลือกเต็มไปเลยจะได้ไวๆ (ถ้าแบบครี่งนึงจะช้าลงหน่อย แต่สามารถ capture ภาพได้ )
ถ้าอยากดูภาพจากกล้องด้วย sensor ที่เราเลือกเป็น container ที่เราใช้ ตรง PLANE เมื่อทำเสร็จแล้วก็จะเป็นประมาณภาพนี้นะครับ

picture-4.png

สังเกตุหลัง container จะมีตัวเลขอยู่ นั่นคือค่าของ container ขณะนั้น เป็นค่าสีที่ได้จากกล้อง (ค่านี้ขึ้นอยู่กับการ define sensor ของเรา)

เรียบร้อยสำหรับการ setup vision center ทีนี้ก็จะเป็นการโปรแกรม

การใช้ camera นั้น ใน robolab จะมีคำสั่งให้ใช้อยู่แล้ว เช่น
structure -> fork -> camera sensor fork
wait for -> wait for increase/decrease in camera sensor เป็นต้น

จากนั้นก็ใช้ modifier เป็น container ที่เราเลือกใน vision center (ถ้าทำตามด้านบน ก็คือ สีแดง)

เรียบร้อย จากนั้น จะใช้กล้องให้หุ่นมันทำอะไรก็ลองเขียนกันดูนะครับ

ตัวอย่างโปรแกรม

picture-5.png

อันนี้จะเป็นโปรแกรมของหุ่น door sentry ก็คือ ถ้ามีวัตถุสีแดงผ่านกล้องเข้ามาจะเปิดประตูให้เข้า ถ้าไม่ใช้ จะดัง ปิ๊ดๆๆ ไม่เปิดประตูให้

เมื่อเขียนโปรแกรมเสร็จ setup vision center เรียบร้อย ก็ทำการรันได้เลย
เมื่อรันแล้วจะขึ้นหน้าจอ vision center ให้เราควบคุม

ที่นี้เป็นเรื่องของ hardware ก็คือ สมมุติว่ากล้องที่ใช้ เป็น usb ก็ต้องต่อเข้ากับเครื่อง และเครื่องต้อง connect กับ RCX หรือ NXT ด้วย (ไม่ว่าจะเป็น IR usb หรือ bluetooth) เพื่อให้ เครื่อง process ภาพ แล้วส่งค่าของ container ที่ได้ ไปยัง controller

ถ้าเป็นหุ่นที่เคลื่อนที่ได้แล้วใช้ IR คงวุ่นน่าดู :)

นี่ก็เป็นเพียงตัวอย่างเล็กๆน้อยๆนะครับ เรื่องของ computer vision ยังมีอีกมากมาย เช่น ให้หุ่น detect ว่ามีวัตถุ อยู่ตรงไหน หรือ วัตถุมีลักษณะอย่างไร อะไรประมาณนี้

การใช้ computer vision สำหรับหุ่น RCX หรือ NXT นั้นไม่ได้มีแค่ใน robolab นะครับ วันหลังจะลองหาของใหม่มาครับ

→ 3 Commentsหมวดหมู่: NXT · RCX