28 กุมภาพันธ์ 2553

ใช้งาน Biclops Pan-Tilt-Verge Camera ...

ใช้งาน Biclops Pan-Tilt-Verge Camera Head

  1. การนำโปรแกรมมาใช้งานต้องใช้ SVN โหลดมา ซึ่งแนะนำให้ใช้ TortoiseSVN
    สามารถอ่านได้จาก การโหลดไฟล์ จาก SVN server โดยใช้ TortoiseSVN
    โดย username และ password สามารถขอได้โดยกรอกแบบฟอร์มนี้ http://www.traclabs.com/main-office.html
    หรือ Email ไปที่ sales@traclabs.com
    okoเมื่อ Download เสร็จจะได้ไฟล์ดังภาพ
  2. กรณีที่เครื่องไม่เคยลง 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 ให้เลย
  3. Copy ..\Biclops API\motion ไปไว้ที่ drive c:
    และ copy \Biclops API\Biclops\Software\libBiclops ไปไว้ใน Motion



  4. กลับมาที่ไฟล์ที่ Download มา เข้าไปที่ ..\Biclops API\Biclops\Software\libBiclops แล้วเปิด Biclops.sln


  5. เช็ต Biclops_Demo Project ให้เป็น start Up Project
    โดยคลิกขวา แล้วเลือก Set as Startup Project



  6. 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\include
    Library files
    C:\motion\libBiclops\Lib
    C:\motion\libUtils\Lib
    C:\motion\libPMD\Lib
    C:\portablePosix\Pre-built\Li

  7. Download Configuration File ตัวใหม่ สำหรับรุ่น PTV
  8. ปรับ Serial Port ไปที่ COM1
  9. รันโปรแกรมได้ แล้วเปลี่ยน Configuration file เป็นไฟล์ใหม่ที่ Download ในข้อ 7
    คลิก (Re)connect

  10. คลิก Do Homing เพื่อหา Absolut Position
  11. เลือก Pan-Tilt ตาม Mouse คลิก MouseMove
  12. การเขียนโปรแกรม สามารถดูรายละเอียดได้จาก Project BiclopsBareBones ในไฟล์ BiclopsBareBones.cpp จะอธิบายได้ค่อนข้างละเอียด
    อย่าลืม เปลี่ยน configuration file if (biclops.Initialize((argc > 1) ? argv[1] : "..\\data\\BiclopsDefaultKMUTTv3.cfg")) {
  13. Option Nemin Pan-Tilt Library for Biclops Model PTV





ใช้งาน Biclops Pan-Tilt-Verge Camera ...

ใช้งาน Biclops Pan-Tilt-Verge Camera Head

  1. การนำโปรแกรมมาใช้งานต้องใช้ SVN โหลดมา ซึ่งแนะนำให้ใช้ TortoiseSVN
    สามารถอ่านได้จาก การโหลดไฟล์ จาก SVN server โดยใช้ TortoiseSVN
    โดย username และ password สามารถขอได้โดยกรอกแบบฟอร์มนี้ http://www.traclabs.com/main-office.html
    หรือ Email ไปที่ sales@traclabs.com
    okoเมื่อ Download เสร็จจะได้ไฟล์ดังภาพ
  2. กรณีที่เครื่องไม่เคยลง 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 ให้เลย
  3. Copy ..\Biclops API\motion ไปไว้ที่ drive c:
    และ copy \Biclops API\Biclops\Software\libBiclops ไปไว้ใน Motion



  4. กลับมาที่ไฟล์ที่ Download มา เข้าไปที่ ..\Biclops API\Biclops\Software\libBiclops แล้วเปิด Biclops.sln


  5. เช็ต Biclops_Demo Project ให้เป็น start Up Project
    โดยคลิกขวา แล้วเลือก Set as Startup Project



  6. 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\include
    Library files
    C:\motion\libBiclops\Lib
    C:\motion\libUtils\Lib
    C:\motion\libPMD\Lib
    C:\portablePosix\Pre-built\Li

  7. Download Configuration File ตัวใหม่ สำหรับรุ่น PTV
  8. ปรับ Serial Port ไปที่ COM1
  9. รันโปรแกรมได้ แล้วเปลี่ยน Configuration file เป็นไฟล์ใหม่ที่ Download ในข้อ 7
    คลิก (Re)connect

  10. คลิก Do Homing เพื่อหา Absolut Position
  11. เลือก Pan-Tilt ตาม Mouse คลิก MouseMove
  12. การเขียนโปรแกรม สามารถดูรายละเอียดได้จาก Project BiclopsBareBones ในไฟล์ BiclopsBareBones.cpp จะอธิบายได้ค่อนข้างละเอียด
    อย่าลืม เปลี่ยน configuration file if (biclops.Initialize((argc > 1) ? argv[1] : "..\\data\\BiclopsDefaultKMUTTv3.cfg")) {
  13. 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
#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];
};


Pantilt.cpp
#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(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) ]











22 กุมภาพันธ์ 2553

เว็บรวมเรื่องราวเกี่ยวกับ OpenCV

http://homepages.inf.ed.ac.uk/rbf/CVonline/CVentry.htm

ร่วมรับรู้และแก้ปัญหาฝุ่นควัน จ.เชียงใหม่

ผมได้รับจากน้องปอว่าได้สร้างเว็บใหม่
เพื่อรายงานปัญหาฝุ่นควันในจังหวัดเชียงใหม่
พร้อมกับส่งเข้าประกวดโครงการ 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
แต่ถ่ายรูปมาแล้วเท่ห์ดี

13 กุมภาพันธ์ 2553

การโหลดไฟล์ จาก SVN server โดยใช้ Tor...

การโหลดไฟล์ จาก SVN server โดยใช้ TortoiseSVN

ผมต้องใช้ Pan/Tile แต่ API ที่พี่ด๋องให้มาใช้ไม่ได้บน VS C++ 2008
เลยแมลไปถาม bwolfe@traclabs.com คนที่ขาย Pan/tilt
แล้วต้องใช้ SVN โหลดไฟล์มา

เริ่มเลยดีกว่า
  1. Download ที่ http://tortoisesvn.net แล้ว install
  2. สร้างโฟนเดอร์ที่ต้องการเก็บไฟล์ ต้องเป็นโฟนเดอร์ว่างเปล่าเท่านั้น
  3. คลิกขวาที่โฟนเดอร์ TortoiseSVN -> Create repository here

  4. แต่ไปเป็นการ ดาวน์โหลดซอร์สโค๊ด คลิกขวาที่โฟนเดอร์เดิม TortoiseSVB -> Export
    ช่อง URL of repository ใส่ชื่อ server ที่เราต้องไปโหลดไฟล์มา คลิก ok
  5. ถ้าหากต้องใส่ Username และ Password จะมีกล่องข้อความขึ้นมา 
  6. รออย่างเดียว พอเสร็จแล้วกด ok

โดยส่วนตัวแล้วเจ็บใจที่ มันใช้คำว่า Export ในการนำไฟล์เข้าเครื่อง ผมหลงไปใช้ import อยู่ตั้งนานก็ใช้ไม่ได้ซักที่
จนสุดท้ายต้องไปอ่าน 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 ประกอบไปด้วย
    1. แหล่งกำเนิดแสงจาก LED
    2. Diffuser เพื่อกระจายแสง
    3. Bokode คล้าย 2D บาร์โค๊ดแต่ขนาดเล็กกว่ามากเรียงต่อกันหลายชิ้น ดังรูปที่ 4
    4. รูปสำหรับให้แสงออก

      รูปที่ 2


      รูปที่ 3

      รูปที่ 4

  2. การนำไปใช้
    ภาพที่ได้จากกล้อง จะเป็นภาพ Bokode Pattern โดยภาพจะเปลี่ยนไปเมื่อเปลี่ยนมุมมองของกล้องดังรูปที่ 5 ทำให้เราสามารถคำนวณมุมที่กล้องกระทำต่อตัว tag ได้


    รูปที่ 5
  3. ประยุกต์ใช้งานกับ Augmented Realityดังรูปที่ 6


    รูปที่ 6
วิเคราะห์
ข้อดี
  1. บอกตำแหน่งและมุมที่กล้องกระทำต่อตัว tag โดยมีความเที่ยงตรงหรือคงทน(Robust) มากกว่า Marker แบบเดิม ดังรูปที่ 7

    รูปที่ 7
  2. มีขนาดเล็กกว่า Marker แบบเดิม

ข้อเสีย
  1. ต้องใช้ Marker แบบ Active แต่ในการทดลองได้มีการใช้ทดสอบ Markger แบบ Passive โดยใช้การยิงแสง Flash จากกล้องถ่ายรูป ซึ่่งหากต้องการตำแหน่งแบบ Real Time ก็ต้องยิงแสง Flash บ่อยๆ ซึ่งเป็นการรบกวนสายตาผู้ใช้
  2. ต้องทำการปรับแต่งระยะ Focus ของกล้องดิจิตอลใหม่

อ้างอิง
  1. 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
  2. http://www.youtube.com/watch?v=ppBOscq16ww

study II topic: Microsoft Virtual Programming Language

study II topic: Microsoft Virtual Programming Language
สรุป
  1. คืออะไร
    Microsoft Virtual Programming Language: VPL เป็นภาษาหนึ่งเพื่อพัฒนาโปรแกรมบน Microsoft Robotics Studio โดยใช้กราฟฟิกแบบ Dataflow แทนเขียนเป็นชุดคำสั่ง

  2. ผู้ใช้
    ผู่ใช้ขั้นต้น: ใช้ฝึกสอนแนวคิดพื้นฐานในการเขียนโปรแกรม
    ผู้ใช้ขั้นสูง: ทำ prototyping ได้รวดเร็ว
    นักพัฒนาบนเว็บ
  3. ลักษณะของ Block

    ด้านซ้ายเป็นส่วนของ input
    ด้านขวาเป็นส่วนของ Output มี 2 ส่วนคือ
    1. Result จะตอบกลับทันทีที่ได้ input
    2. Notification จะตอบกลับเมื่อเกิด Event
  4. การเชื่อมต่อระหว่าง Block

    ตัวอย่างการส่งข้อความ All done ไปสังเคราะห์เสียงพูด
    ข้อสังเกตุ output pin สามารถเชื่อมต่อออกไปได้มากกว่า 1 pin
  5. ราคา
    รุ่นเพื่อการศึกษาฟรี download
    รุ่น standard ขายพร้อมกับ Microsoft Robotics Studio

วิเคราะห์
    ข้อดี
  1. ใช้งานง่ายเหมาะกับสอน Concept ด้าน logic ให้กับเด็ก
  2. สนับสนุนโดย Robot kit เช่น Lego NXT, Robo Builder iRobot, Fischertechnik, Parallax และ RoboDynamics
  3. ยืดหยุ่นใช้งานแบบ Web Service สามารถทำงานได้ทั้งแบบ Stand Alone และ เป็น Network
  4. ใช้งานร่วมกับภาษาอื่นๆของ .NET ได้ เช่น C#, Visual Basic.Net, IronPython
  5. มีโมดูลที่จำเป็นในการทำหุ่นยนต์มาให้เยอะมาก เช่น Vision, Timer, GPS
  6. มีการจำลองหุ่นยนต์เช่น Lego NXT Tribot Simulation
    ข้อเสีย
  1. แตกต่างจากการเขียนโปรแกรมแบบ Flowchar ที่อิงมาจาก Structure Programming
  2. ไม่สนับสนุนการเขียนโปรแกรมแบบ OOP
  3. หุ่นยนต์ต้องเชื่อมต่อกับคอมพิวเตอร์ตลอดเวลา หรือที่หุ่นยนต์ต้องมี Pc ขนาดเล็กที่รัน .Net Framwork ฝังอยู่

ทิป

  1. ถ้ารันด้วย Windows 7 ต้องคลิกขวาแล้วเลือก Run as administrator เพื่ออนุญาติให้เปิดพอร์ต HTTP


กรณีศึกษา
ทดสอบการใช้ Speech Recognition เพื่อสร้างการโต้ตอบระหว่างผู้ใช้และหุ่นยนต์
โดยใช้การทำงานร่วมกันระหว่าง service 3 services ดังนี้
  1. SpeechRecognizerGui
  2. SpeechRecognizer
  3. TexttoSpeechTTS

กรณีศึกษาอื่นๆ
  1. Service ของ Microsoft Robotics Studio สำหรับ Arduino
  2. Speech Recognitionง่ายๆ สำหรับ RoboBuilder ด้วย Microsoft Robotics Developer Studio
  3. ควบคุม RoboBuilder ด้วย Microsoft Robotics Developer Studio
  4. เริ่มต้น Microsoft Robotics Studio ด้วย Virtual Programming Language
  5. RoboCamp การแข่งขันหุ่นยนต์แบบ Simulation

อ้างอิง
  1. Visual Programming Language http://msdn.microsoft.com/en-us/library/bb964572.aspx
  2. RoboBuilder [MSRDS] Programming Tutorial http://www.robobuilder.net/eng/