- การนำโปรแกรมมาใช้งานต้องใช้ SVN โหลดมา ซึ่งแนะนำให้ใช้ TortoiseSVN
สามารถอ่านได้จาก การโหลดไฟล์ จาก SVN server โดยใช้ TortoiseSVN
โดย username และ password สามารถขอได้โดยกรอกแบบฟอร์มนี้ http://www.traclabs.com/main-office.html
หรือ Email ไปที่ sales@traclabs.com
okoเมื่อ Download เสร็จจะได้ไฟล์ดังภาพ - กรณีที่เครื่องไม่เคยลง portablePosix ให้ Copy ไปไว้ที่ Drive c:
แล้วทำการ Add Path โดยไปที่ start>control panel>System>คลิกขวาเลือก System Property > แท็บ Advance> Environment Variable >คลิกเลือก variable Path >คลิก Edit เพิ่มข้อความ ";C:\portablePosix\Pre-built\lib" ต่อท้ายข้อความเดิม
ถ้าเป็น windows 7 จะง่านหน่อย ที่ start พิมพ์ว่า Path เลยจะเปิดหน้าจอ Environment Variable ให้เลย - Copy ..\Biclops API\motion ไปไว้ที่ drive c:
และ copy \Biclops API\Biclops\Software\libBiclops ไปไว้ใน Motion - กลับมาที่ไฟล์ที่ Download มา เข้าไปที่ ..\Biclops API\Biclops\Software\libBiclops แล้วเปิด Biclops.sln
- เช็ต Biclops_Demo Project ให้เป็น start Up Project
โดยคลิกขวา แล้วเลือก Set as Startup Project - Config การ include และ librart file
โดยเข้าไปที่ Tools> Options..>Projects and Solutions> VC++ Directories
แล้วadd Directory ดังนี้Show Directories for Directories ที่เพิ่ม Include files C:\motion\libBiclops\include
C:\motion\libUtils\include
C:\motion\libPMD\include
C:\portablePosix\Pre-built\includeLibrary files C:\motion\libBiclops\Lib
C:\motion\libUtils\Lib
C:\motion\libPMD\Lib
C:\portablePosix\Pre-built\Li - Download Configuration File ตัวใหม่ สำหรับรุ่น PTV
- ปรับ Serial Port ไปที่ COM1
- รันโปรแกรมได้ แล้วเปลี่ยน Configuration file เป็นไฟล์ใหม่ที่ Download ในข้อ 7
คลิก (Re)connect - คลิก Do Homing เพื่อหา Absolut Position
- เลือก Pan-Tilt ตาม Mouse คลิก MouseMove
- การเขียนโปรแกรม สามารถดูรายละเอียดได้จาก Project BiclopsBareBones ในไฟล์ BiclopsBareBones.cpp จะอธิบายได้ค่อนข้างละเอียด
อย่าลืม เปลี่ยน configuration file if (biclops.Initialize((argc > 1) ? argv[1] : "..\\data\\BiclopsDefaultKMUTTv3.cfg")) { - Option Nemin Pan-Tilt Library for Biclops Model PTV
เนมินทร์ ไลฟ์สไตล์ ทุกอย่างสนใจ เช่น การเขียนโปรแกรมคอมพิวเตอร์ ข่าววงการไอที กิจกรรมยามว่าง ฯลฯ
28 กุมภาพันธ์ 2553
ใช้งาน Biclops Pan-Tilt-Verge Camera ...
ใช้งาน Biclops Pan-Tilt-Verge Camera Head
ใช้งาน Biclops Pan-Tilt-Verge Camera ...
ใช้งาน Biclops Pan-Tilt-Verge Camera Head
- การนำโปรแกรมมาใช้งานต้องใช้ SVN โหลดมา ซึ่งแนะนำให้ใช้ TortoiseSVN
สามารถอ่านได้จาก การโหลดไฟล์ จาก SVN server โดยใช้ TortoiseSVN
โดย username และ password สามารถขอได้โดยกรอกแบบฟอร์มนี้ http://www.traclabs.com/main-office.html
หรือ Email ไปที่ sales@traclabs.com
okoเมื่อ Download เสร็จจะได้ไฟล์ดังภาพ - กรณีที่เครื่องไม่เคยลง portablePosix ให้ Copy ไปไว้ที่ Drive c:
แล้วทำการ Add Path โดยไปที่ start>control panel>System>คลิกขวาเลือก System Property > แท็บ Advance> Environment Variable >คลิกเลือก variable Path >คลิก Edit เพิ่มข้อความ ";C:\portablePosix\Pre-built\lib" ต่อท้ายข้อความเดิม
ถ้าเป็น windows 7 จะง่านหน่อย ที่ start พิมพ์ว่า Path เลยจะเปิดหน้าจอ Environment Variable ให้เลย - Copy ..\Biclops API\motion ไปไว้ที่ drive c:
และ copy \Biclops API\Biclops\Software\libBiclops ไปไว้ใน Motion - กลับมาที่ไฟล์ที่ Download มา เข้าไปที่ ..\Biclops API\Biclops\Software\libBiclops แล้วเปิด Biclops.sln
- เช็ต Biclops_Demo Project ให้เป็น start Up Project
โดยคลิกขวา แล้วเลือก Set as Startup Project - Config การ include และ librart file
โดยเข้าไปที่ Tools> Options..>Projects and Solutions> VC++ Directories
แล้วadd Directory ดังนี้Show Directories for Directories ที่เพิ่ม Include files C:\motion\libBiclops\include
C:\motion\libUtils\include
C:\motion\libPMD\include
C:\portablePosix\Pre-built\includeLibrary files C:\motion\libBiclops\Lib
C:\motion\libUtils\Lib
C:\motion\libPMD\Lib
C:\portablePosix\Pre-built\Li - Download Configuration File ตัวใหม่ สำหรับรุ่น PTV
- ปรับ Serial Port ไปที่ COM1
- รันโปรแกรมได้ แล้วเปลี่ยน Configuration file เป็นไฟล์ใหม่ที่ Download ในข้อ 7
คลิก (Re)connect - คลิก Do Homing เพื่อหา Absolut Position
- เลือก Pan-Tilt ตาม Mouse คลิก MouseMove
- การเขียนโปรแกรม สามารถดูรายละเอียดได้จาก Project BiclopsBareBones ในไฟล์ BiclopsBareBones.cpp จะอธิบายได้ค่อนข้างละเอียด
อย่าลืม เปลี่ยน configuration file if (biclops.Initialize((argc > 1) ? argv[1] : "..\\data\\BiclopsDefaultKMUTTv3.cfg")) { - Option Nemin Pan-Tilt Library for Biclops Model PTV
Nemin Pan-Tilt Library for Biclops Mo...
Nemin Pan-Tilt Library for Biclops Model PTV
ถ้ายังไม่ได้อ่านเรื่องการ Config Project อ่านได้จาก ใช้งาน Biclops Pan-Tilt-Verge Camera Head
C++ Source Code
Pantilt.h
Pantilt.cpp
วิธีการใช้งาน
ถ้ายังไม่ได้อ่านเรื่องการ Config Project อ่านได้จาก ใช้งาน Biclops Pan-Tilt-Verge Camera Head
C++ Source Code
Pantilt.h
#pragma once #include <cstdio> // for FILE defn #include <iostream> // for cout, etc using namespace std; #include "PMDUtils.h" // for DoSleep #include "Biclops.h" class CPantilt { protected: // THE interface to Biclops. Biclops biclops; // Defines which axes we want to use. int axisMask ;//+ Biclops::VergeMask; // add this if you want verge. // Pointers to each axis (populated once controller is initialized). PMDAxisControl *panAxis; PMDAxisControl *tiltAxis; PMDAxisControl *vergeAxis; public: CPantilt(char *conf); ~CPantilt(void); void setup(void); int homing(void); void move(float panD, float tiltD, float vergeD); void motorOff(void); void moveRat(float panRetD, float tiltRatD, float vergeRatD); protected: char conf[255]; }; |
#include "StdAfx.h" #include "Pantilt.h" CPantilt::CPantilt(char *conf) : panAxis(NULL), tiltAxis(NULL), vergeAxis(NULL), axisMask(Biclops::PanMask + Biclops::TiltMask) { strcpy(this->conf, conf); homing(); } CPantilt::~CPantilt() { motorOff(); } int CPantilt::homing(void) { // Set Debug level depending on how much info you want to see about // the inner workings of the API. Level 2 is highest with 0 being // the default (i.e., no messages). biclops.SetDebugLevel(2); // Initialize the Biclops unit. TRACE("\nInitializing Biclops"); if (!biclops.Initialize(conf)) { TRACE("\nCan't open configuration file"); return 0; } // Initialization completed successfully. TRACE("\nBiclops initialized"); biclops.SetDebugLevel(0); // Get shortcut references to each axis. panAxis = biclops.GetAxis(Biclops::Pan); tiltAxis = biclops.GetAxis(Biclops::Tilt); vergeAxis = biclops.GetAxis(Biclops::Verge); //--------- Homing ------------ TRACE("\nBegin homing sequence." ); if (!biclops.HomeAxes(axisMask,true)) { TRACE("Can't homing"); return 0; } return 1; } void CPantilt::move(float panD, float tiltD, float vergeD) { // Get the currently defined (default) motion profiles. PMDAxisControl::Profile panProfile,tiltProfile,vergeProfile; panAxis->GetProfile(panProfile); tiltAxis->GetProfile(tiltProfile); vergeAxis->GetProfile(vergeProfile); // Set a position to move to by modifying the respective profiles. // NOTE: profile values are in revolutions, so here we convert // from degrees (divide by 360) for readability. panProfile.pos = PMDUtils::DegsToRevs(panD); tiltProfile.pos = PMDUtils::DegsToRevs(tiltD); vergeProfile.pos = PMDUtils::DegsToRevs(vergeD); // Inform the controller of the new desired position. panAxis->SetProfile(panProfile); tiltAxis->SetProfile(tiltProfile); vergeAxis->SetProfile(vergeProfile); TRACE("\nMoving Pan Tilt Verge:(%f, %f, %f)",panD,tiltD,vergeD); biclops.Move(axisMask); } void CPantilt::motorOff(void) { // Turn off motor amps to conserve power. move(0,0,0); panAxis->DisableAmp(); tiltAxis->DisableAmp(); vergeAxis->DisableAmp(); } void CPantilt::moveRat(float panRetD, float tiltRatD, float vergeRatD) { // Get the currently defined (default) motion profiles. PMDAxisControl::Profile panProfile,tiltProfile,vergeProfile; panAxis->GetProfile(panProfile); tiltAxis->GetProfile(tiltProfile); vergeAxis->GetProfile(vergeProfile); // Set a position to move to by modifying the respective profiles. // NOTE: profile values are in revolutions, so here we convert // from degrees (divide by 360) for readability. float pan = PMDUtils::RevsToDegs(panProfile.pos)+panRetD, tilt = PMDUtils::RevsToDegs(tiltProfile.pos)+tiltRatD, verge = PMDUtils::RevsToDegs(vergeProfile.pos)+vergeRatD; panProfile.pos = PMDUtils::DegsToRevs(pan); tiltProfile.pos = PMDUtils::DegsToRevs(tilt); vergeProfile.pos = PMDUtils::DegsToRevs(verge); // Inform the controller of the new desired position. panAxis->SetProfile(panProfile); tiltAxis->SetProfile(tiltProfile); vergeAxis->SetProfile(vergeProfile); TRACE("\nMoving Pan Tilt Verge:(%f, %f, %f)",pan,tilt,verge); biclops.Move(axisMask); } |
วิธีการใช้งาน
#include "Pantilt.h" // สร้าง Object จะทำการต่อกับ Pantilt ให้โดยอัตโนมัติ char pantiltConf[] = "BiclopsDefaultKMUTTv3.cfg"; CPantilt pantilt(pantiltConf); //สั่ง pan tilt verge ไปยังตำแหน่งที่ต้องการ ในหน่วยองศา //อารกิวเมนต์ตัวแรกคือตำแหน่ง Pan ตัวที่สองคือ Tilt และ ตัวสุดท้ายคือ Verge pantilt.move(0,-40,0); //สั่ง pan tilt Verge ไปยังตำแหน่งใหม่แบบ Relative คือบวก/ลบ จากตำแหน่งเดิม ในหน่วยองศา //อารกิวเมนต์ตัวแรกคือตำแหน่ง Pan ตัวที่สองคือ Tilt และ ตัวสุดท้ายคือ Verge pantilt.moveRat(10,10,0) |
25 กุมภาพันธ์ 2553
การคำนวณมุมที่ใช้ในการ pan/tilt เพื่อ...
การคำนวณมุมที่ใช้ในการ pan/tilt เพื่อติดตามลูกบอล
ให้ลูกบอลอยู่กลางภาพพอดี
การจะหามุมที่ใช้ในการ pan/tilt
ได้นั้นเราต้องทราบระยะห่างระหว่างลูกบอลกับกล้อง
เพราะถ้าหากลูกอยู่ใกล้ ต้องใช้มุมในการหมุนมาก
แต่ในทางตรงกันข้ามถ้าหากลูกอยู่ไกล ต้องใช้มุมในการหมุนน้อย
หาระยะระหว่างลูกบอลกับกล้อง
โดยอาศัยหลักการว่าวัตถุที่อยู่ใกล้ จะมีขนาดใหญ่(ในภาพที่ได้จากกล้อง)
และมีขนาดเล็ก เมื่ออยู่ไกล
แต่เราใช้กล้องเพียงกล้องเดียวดังนั้นจึงสามารถระบุความลึกได้เมื่อเรารู้ขนาดวัตถุเท่านั้น(ขนาดวัตถุไม่เปลี่ยนแปลง แต่ขนาดวัตถุในภาพเปลี่ยนแปลง)
เก็บตัวอย่างเพื่อหาความสัมพันธ์
เราเก็บภาพลูกปิงปองที่ระยะต่างๆกัน เพื่อหา
z = ระยะห่างระหว่างลูกปิงปองกับกล้อง
r = ขนาดรัศมีของลูกปิงปองในภาพ
สรุปความสัมพันธ์
z= -0.737r + 44.25
หามุมกว้างของกล้อง
กล้องสามารถถ่ายภาพได้ 15.5 cm. ที่ระยะห่าง 15 cm.
ที่ระยะความลึกต่างๆ เราสามารถหาความกว้างของถาพได้ดังนี้
W = 2* z * tan 48.95
เทียบระยะในภาพกับระยะจริง
b = (160-x)/320*W
หามุมที่ต้องใช้ในการ pan/tilt
เราจะใช้ทฤษฤีสามเหลี่ยมคล้าย
จากสูตร tan d = a/b
ดังนั้นมุม ก็คือpan
arctan (b/a) = arctan (b/z)
= arctan [ ((160-x)/320*W) / (-0.737r + 44.25)]
= arctan [((160-x)/320*2* z * tan 48.95)/ (-0.737r + 44.25) ]
ในกรณีของมุม Tilt
ทำในลักษณะเดียวกันจะได้
มุมสูงของกล้อง
H = 2* z * tan 55.01
เทียบระยะในภาพกับระยะจริง
b = (120-y)/240*H
สามเหลี่ยมคล้าย จะได้
rctan(a/b) = arctan [ ((120-y)/240* 2* z * tan 55.01) / (-0.737r + 44.25) ]
ให้ลูกบอลอยู่กลางภาพพอดี
การจะหามุมที่ใช้ในการ pan/tilt
ได้นั้นเราต้องทราบระยะห่างระหว่างลูกบอลกับกล้อง
เพราะถ้าหากลูกอยู่ใกล้ ต้องใช้มุมในการหมุนมาก
แต่ในทางตรงกันข้ามถ้าหากลูกอยู่ไกล ต้องใช้มุมในการหมุนน้อย
หาระยะระหว่างลูกบอลกับกล้อง
โดยอาศัยหลักการว่าวัตถุที่อยู่ใกล้ จะมีขนาดใหญ่(ในภาพที่ได้จากกล้อง)
และมีขนาดเล็ก เมื่ออยู่ไกล
แต่เราใช้กล้องเพียงกล้องเดียวดังนั้นจึงสามารถระบุความลึกได้เมื่อเรารู้ขนาดวัตถุเท่านั้น(ขนาดวัตถุไม่เปลี่ยนแปลง แต่ขนาดวัตถุในภาพเปลี่ยนแปลง)
เก็บตัวอย่างเพื่อหาความสัมพันธ์
เราเก็บภาพลูกปิงปองที่ระยะต่างๆกัน เพื่อหา
z = ระยะห่างระหว่างลูกปิงปองกับกล้อง
r = ขนาดรัศมีของลูกปิงปองในภาพ
z(cm) | r(pixel) |
15 | 41 |
20 | 30 |
25 | 26 |
30 | 21 |
สรุปความสัมพันธ์
z= -0.737r + 44.25
หามุมกว้างของกล้อง
กล้องสามารถถ่ายภาพได้ 15.5 cm. ที่ระยะห่าง 15 cm.
ที่ระยะความลึกต่างๆ เราสามารถหาความกว้างของถาพได้ดังนี้
W = 2* z * tan 48.95
เทียบระยะในภาพกับระยะจริง
b = (160-x)/320*W
หามุมที่ต้องใช้ในการ pan/tilt
เราจะใช้ทฤษฤีสามเหลี่ยมคล้าย
จากสูตร tan d = a/b
ดังนั้นมุม ก็คือpan
arctan (b/a) = arctan (b/z)
= arctan [ ((160-x)/320*W) / (-0.737r + 44.25)]
= arctan [((160-x)/320*2* z * tan 48.95)/ (-0.737r + 44.25) ]
ในกรณีของมุม Tilt
ทำในลักษณะเดียวกันจะได้
มุมสูงของกล้อง
H = 2* z * tan 55.01
เทียบระยะในภาพกับระยะจริง
b = (120-y)/240*H
สามเหลี่ยมคล้าย จะได้
rctan(a/b) = arctan [ ((120-y)/240* 2* z * tan 55.01) / (-0.737r + 44.25) ]
23 กุมภาพันธ์ 2553
22 กุมภาพันธ์ 2553
ร่วมรับรู้และแก้ปัญหาฝุ่นควัน จ.เชียงใหม่
ผมได้รับจากน้องปอว่าได้สร้างเว็บใหม่
เพื่อรายงานปัญหาฝุ่นควันในจังหวัดเชียงใหม่
พร้อมกับส่งเข้าประกวดโครงการ NSC ของ NECTEC ด้วย
ผมเป็นศิษย์เก่า ม.เชียงใหม่ ซึ่งเคยสัมผัสกับปัญหานี้มาโดยตรง
ฝุ่นควันนีั้ทำให้หายใจได้ลำบาก แสบตา บดบังทัศนีย์ภาพอันสวยงาม
รวมถึงทัศนวิสัยในการขับขี่ ซึ่งปัญหานี้จะเกิดขึ้นช่วงหน้าร้อนแทบทุกปี
ผมเลยอยากลองเชิญชวนให้ทุกคนเข้าไปที่ http://cmsmog.com/
ดูซักครั้งในนี้จะมีแนะนำว่าเราสามารถมีส่วนร่วมในการแก้ไขปัญหานี้ได้อย่างไร
ช่างน่าดีใจเหลือเกินที่รุ่นน้องวิทยาการคอมพิวเตอร์ของผม
น้องปอเป็นรุ่นน้องที่ฝากผลงานไว้บนเว็บหลายที่เช่น
http://www.notebookspec.com/
http://www.108notebook.com/
นับว่าเป็นนักศึกษาไฟแรงที่นำความรู้จากการเรียนบวกกับความสนใจ
ถ่ายทอดออกมาเป็นชิ้นงานได้อย่างน่าสนใจ
เพื่อรายงานปัญหาฝุ่นควันในจังหวัดเชียงใหม่
พร้อมกับส่งเข้าประกวดโครงการ NSC ของ NECTEC ด้วย
ผมเป็นศิษย์เก่า ม.เชียงใหม่ ซึ่งเคยสัมผัสกับปัญหานี้มาโดยตรง
ฝุ่นควันนีั้ทำให้หายใจได้ลำบาก แสบตา บดบังทัศนีย์ภาพอันสวยงาม
รวมถึงทัศนวิสัยในการขับขี่ ซึ่งปัญหานี้จะเกิดขึ้นช่วงหน้าร้อนแทบทุกปี
ผมเลยอยากลองเชิญชวนให้ทุกคนเข้าไปที่ http://cmsmog.com/
ดูซักครั้งในนี้จะมีแนะนำว่าเราสามารถมีส่วนร่วมในการแก้ไขปัญหานี้ได้อย่างไร
ช่างน่าดีใจเหลือเกินที่รุ่นน้องวิทยาการคอมพิวเตอร์ของผม
น้องปอเป็นรุ่นน้องที่ฝากผลงานไว้บนเว็บหลายที่เช่น
http://www.notebookspec.com/
http://www.108notebook.com/
นับว่าเป็นนักศึกษาไฟแรงที่นำความรู้จากการเรียนบวกกับความสนใจ
ถ่ายทอดออกมาเป็นชิ้นงานได้อย่างน่าสนใจ
19 กุมภาพันธ์ 2553
Head Mounted Display แบบบ้านๆ
เอาอีกแล้วครับ Instructable ทำ HMD ออกมาแล้วครับ
สำหรับใครที่รู้จัก Head Multi display เสียใจด้วย เพราะมันเป็นแค่ Head Mounted Display
แต่ถ่ายรูปมาแล้วเท่ห์ดี
สำหรับใครที่รู้จัก Head Multi display เสียใจด้วย เพราะมันเป็นแค่ Head Mounted Display
แต่ถ่ายรูปมาแล้วเท่ห์ดี
16 กุมภาพันธ์ 2553
13 กุมภาพันธ์ 2553
การโหลดไฟล์ จาก SVN server โดยใช้ Tor...
การโหลดไฟล์ จาก SVN server โดยใช้ TortoiseSVN
ผมต้องใช้ Pan/Tile แต่ API ที่พี่ด๋องให้มาใช้ไม่ได้บน VS C++ 2008
เลยแมลไปถาม bwolfe@traclabs.com คนที่ขาย Pan/tilt
แล้วต้องใช้ SVN โหลดไฟล์มา
เริ่มเลยดีกว่า
จนสุดท้ายต้องไปอ่าน document
Reference
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-repository.html
ผมต้องใช้ Pan/Tile แต่ API ที่พี่ด๋องให้มาใช้ไม่ได้บน VS C++ 2008
เลยแมลไปถาม bwolfe@traclabs.com คนที่ขาย Pan/tilt
แล้วต้องใช้ SVN โหลดไฟล์มา
เริ่มเลยดีกว่า
- Download ที่ http://tortoisesvn.net แล้ว install
- สร้างโฟนเดอร์ที่ต้องการเก็บไฟล์ ต้องเป็นโฟนเดอร์ว่างเปล่าเท่านั้น
- คลิกขวาที่โฟนเดอร์ TortoiseSVN -> Create repository here
- แต่ไปเป็นการ ดาวน์โหลดซอร์สโค๊ด คลิกขวาที่โฟนเดอร์เดิม TortoiseSVB -> Export
ช่อง URL of repository ใส่ชื่อ server ที่เราต้องไปโหลดไฟล์มา คลิก ok - ถ้าหากต้องใส่ Username และ Password จะมีกล่องข้อความขึ้นมา
- รออย่างเดียว พอเสร็จแล้วกด ok
จนสุดท้ายต้องไปอ่าน document
Reference
http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-repository.html
10 กุมภาพันธ์ 2553
study I topic: Bokode(Imperceptible Visual tags for Camera Based
study I topic: Bokode(Imperceptible Visual tags for Camera Based Interaction from a Distance)
สรุป
รูปที่ 1
ข้อดี
ข้อเสีย
อ้างอิง
สรุป
รูปที่ 1
- คืออะไร
คือ tag หรือ marker ที่ไม่สามารถมองเห็นได้ด้วยตาเปล่า แต่สามารถมองเห็นได้จากกล้องที่ ปรับเปลี่ยนตำแหน่ง Focus ไปที่ infinity ดังรูปที่ 2 ภายในtag ประกอบไปด้วย - แหล่งกำเนิดแสงจาก LED
- Diffuser เพื่อกระจายแสง
- Bokode คล้าย 2D บาร์โค๊ดแต่ขนาดเล็กกว่ามากเรียงต่อกันหลายชิ้น ดังรูปที่ 4
- รูปสำหรับให้แสงออก
รูปที่ 2
รูปที่ 3
รูปที่ 4 - การนำไปใช้
ภาพที่ได้จากกล้อง จะเป็นภาพ Bokode Pattern โดยภาพจะเปลี่ยนไปเมื่อเปลี่ยนมุมมองของกล้องดังรูปที่ 5 ทำให้เราสามารถคำนวณมุมที่กล้องกระทำต่อตัว tag ได้
รูปที่ 5 - ประยุกต์ใช้งานกับ Augmented Realityดังรูปที่ 6
รูปที่ 6
ข้อดี
- บอกตำแหน่งและมุมที่กล้องกระทำต่อตัว tag โดยมีความเที่ยงตรงหรือคงทน(Robust) มากกว่า Marker แบบเดิม ดังรูปที่ 7
รูปที่ 7 - มีขนาดเล็กกว่า Marker แบบเดิม
ข้อเสีย
- ต้องใช้ Marker แบบ Active แต่ในการทดลองได้มีการใช้ทดสอบ Markger แบบ Passive โดยใช้การยิงแสง Flash จากกล้องถ่ายรูป ซึ่่งหากต้องการตำแหน่งแบบ Real Time ก็ต้องยิงแสง Flash บ่อยๆ ซึ่งเป็นการรบกวนสายตาผู้ใช้
- ต้องทำการปรับแต่งระยะ Focus ของกล้องดิจิตอลใหม่
อ้างอิง
- Bokode: Imperceptible Visual tags for Camera Based Interaction from a Distance
Ankit Mohan Grace Woo Shinsaku Hiuray Quinn Smithwick Ramesh Raskar
Camera Culture Group, MIT Media Lab
http://cameraculture.media.mit.edu/bokode
Bokode
In Focus - http://www.youtube.com/watch?v=ppBOscq16ww
study II topic: Microsoft Virtual Programming Language
study II topic: Microsoft Virtual Programming Language
สรุป
วิเคราะห์
ข้อดี
ทิป
ทดสอบการใช้ Speech Recognition เพื่อสร้างการโต้ตอบระหว่างผู้ใช้และหุ่นยนต์
โดยใช้การทำงานร่วมกันระหว่าง service 3 services ดังนี้
สรุป
- คืออะไร
Microsoft Virtual Programming Language: VPL เป็นภาษาหนึ่งเพื่อพัฒนาโปรแกรมบน Microsoft Robotics Studio โดยใช้กราฟฟิกแบบ Dataflow แทนเขียนเป็นชุดคำสั่ง - ผู้ใช้
ผู่ใช้ขั้นต้น: ใช้ฝึกสอนแนวคิดพื้นฐานในการเขียนโปรแกรม
ผู้ใช้ขั้นสูง: ทำ prototyping ได้รวดเร็ว
นักพัฒนาบนเว็บ - ลักษณะของ Block
ด้านซ้ายเป็นส่วนของ input
ด้านขวาเป็นส่วนของ Output มี 2 ส่วนคือ - Result จะตอบกลับทันทีที่ได้ input
- Notification จะตอบกลับเมื่อเกิด Event
- การเชื่อมต่อระหว่าง Block
ตัวอย่างการส่งข้อความ All done ไปสังเคราะห์เสียงพูด
ข้อสังเกตุ output pin สามารถเชื่อมต่อออกไปได้มากกว่า 1 pin - ราคา
รุ่นเพื่อการศึกษาฟรี download
รุ่น standard ขายพร้อมกับ Microsoft Robotics Studio
วิเคราะห์
ข้อดี
- ใช้งานง่ายเหมาะกับสอน Concept ด้าน logic ให้กับเด็ก
- สนับสนุนโดย Robot kit เช่น Lego NXT, Robo Builder iRobot, Fischertechnik, Parallax และ RoboDynamics
- ยืดหยุ่นใช้งานแบบ Web Service สามารถทำงานได้ทั้งแบบ Stand Alone และ เป็น Network
- ใช้งานร่วมกับภาษาอื่นๆของ .NET ได้ เช่น C#, Visual Basic.Net, IronPython
- มีโมดูลที่จำเป็นในการทำหุ่นยนต์มาให้เยอะมาก เช่น Vision, Timer, GPS
- มีการจำลองหุ่นยนต์เช่น Lego NXT Tribot Simulation
- แตกต่างจากการเขียนโปรแกรมแบบ Flowchar ที่อิงมาจาก Structure Programming
- ไม่สนับสนุนการเขียนโปรแกรมแบบ OOP
- หุ่นยนต์ต้องเชื่อมต่อกับคอมพิวเตอร์ตลอดเวลา หรือที่หุ่นยนต์ต้องมี Pc ขนาดเล็กที่รัน .Net Framwork ฝังอยู่
ทิป
- ถ้ารันด้วย Windows 7 ต้องคลิกขวาแล้วเลือก Run as administrator เพื่ออนุญาติให้เปิดพอร์ต HTTP
ทดสอบการใช้ Speech Recognition เพื่อสร้างการโต้ตอบระหว่างผู้ใช้และหุ่นยนต์
โดยใช้การทำงานร่วมกันระหว่าง service 3 services ดังนี้
- SpeechRecognizerGui
- SpeechRecognizer
- TexttoSpeechTTS
กรณีศึกษาอื่นๆ
- Service ของ Microsoft Robotics Studio สำหรับ Arduino
- Speech Recognitionง่ายๆ สำหรับ RoboBuilder ด้วย Microsoft Robotics Developer Studio
- ควบคุม RoboBuilder ด้วย Microsoft Robotics Developer Studio
- เริ่มต้น Microsoft Robotics Studio ด้วย Virtual Programming Language
- RoboCamp การแข่งขันหุ่นยนต์แบบ Simulation
อ้างอิง
- Visual Programming Language http://msdn.microsoft.com/en-us/library/bb964572.aspx
- RoboBuilder [MSRDS] Programming Tutorial http://www.robobuilder.net/eng/
08 กุมภาพันธ์ 2553
สมัครสมาชิก:
บทความ (Atom)