RDC 2013

Programming iRobot Create

#include <stdio.h>
#include <iostream>
 
#include "RobotConnector.h"
 
#include "cv.h"
#include "highgui.h"
 
using namespace std;
 
#define Create_Comport "COM4"
 
bool isRecord = false;
 
int main()
{
    CreateData  robotData;
    RobotConnector  robot;
 
    ofstream    record;
    record.open("../data/robot.txt");
 
    if( !robot.Connect(Create_Comport) )
    {
        cout << "Error : Can't connect to robot @" << Create_Comport << endl;
        return -1;
    }
 
    robot.DriveDirect(0, 0);
    cvNamedWindow("Robot");
 
 
    while(true)
    {
        cvWaitKey(30);
        double vx, vz;
        vx = vz = 0;
 
 
        if (robotData.bumper[0]) {
            cout << "bump left" << endl;
        }
        if (robotData.bumper[1]) {
            cout << "bump right" << endl;
        }
 
 
        double vl = vx - vz;
        double vr = vx + vz;
 
        int velL = (int)(vl*Create_MaxVel);
        int velR = (int)(vr*Create_MaxVel);
 
        int color = (abs(velL)+abs(velR))/4;
        color = (color < 0) ? 0 : (color > 255) ? 255 : color;
 
        int inten = (robotData.cliffSignal[1] + robotData.cliffSignal[2])/8 - 63;
        inten = (inten < 0) ? 0 : (inten > 255) ? 255 : inten;
 
        //cout << color << " " << inten << " " << robotData.cliffSignal[1] << " " << robotData.cliffSignal[2] << endl;
 
        robot.LEDs(velL > 0, velR > 0, color, inten);
 
        if( !robot.DriveDirect(velL, velR) )
            cout << "SetControl Fail" << endl;
 
        if( !robot.ReadData(robotData) ) {
            //cout << "ReadData Fail" << endl;
        }
 
        if( isRecord )
            record << robotData.cliffSignal[0] << "\t" << robotData.cliffSignal[1] << "\t" << robotData.cliffSignal[2] << "\t" << robotData.cliffSignal[3] << endl;
 
        cout << "Robot " << robotData.cliffSignal[0] << endl;
    }
 
    robot.Disconnect();
 
    return 0;
}
File attachments: 
Attachment Size
PDF icon iRobot Create.pdf 3 MB
File Hl-340.exe 219.32 KB
File AutoRDC2012_V2.rar 423.15 KB
File State_Machine.pptx 63.06 KB
File AutoRDC2012_V3.rar 422.18 KB
File RDC2013_v1_main.cpp 3.42 KB

RDC 2013

Programming iRobot Create

#include <stdio.h>
#include <iostream>
 
#include "RobotConnector.h"
 
#include "cv.h"
#include "highgui.h"
 
using namespace std;
 
#define Create_Comport "COM4"
 
bool isRecord = false;
 
int main()
{
    CreateData  robotData;
    RobotConnector  robot;
 
    ofstream    record;
    record.open("../data/robot.txt");
 
    if( !robot.Connect(Create_Comport) )
    {
        cout << "Error : Can't connect to robot @" << Create_Comport << endl;
        return -1;
    }
 
    robot.DriveDirect(0, 0);
    cvNamedWindow("Robot");
 
 
    while(true)
    {
        cvWaitKey(30);
        double vx, vz;
        vx = vz = 0;
 
 
        if (robotData.bumper[0]) {
            cout << "bump left" << endl;
        }
        if (robotData.bumper[1]) {
            cout << "bump right" << endl;
        }
 
 
        double vl = vx - vz;
        double vr = vx + vz;
 
        int velL = (int)(vl*Create_MaxVel);
        int velR = (int)(vr*Create_MaxVel);
 
        int color = (abs(velL)+abs(velR))/4;
        color = (color < 0) ? 0 : (color > 255) ? 255 : color;
 
        int inten = (robotData.cliffSignal[1] + robotData.cliffSignal[2])/8 - 63;
        inten = (inten < 0) ? 0 : (inten > 255) ? 255 : inten;
 
        //cout << color << " " << inten << " " << robotData.cliffSignal[1] << " " << robotData.cliffSignal[2] << endl;
 
        robot.LEDs(velL > 0, velR > 0, color, inten);
 
        if( !robot.DriveDirect(velL, velR) )
            cout << "SetControl Fail" << endl;
 
        if( !robot.ReadData(robotData) ) {
            //cout << "ReadData Fail" << endl;
        }
 
        if( isRecord )
            record << robotData.cliffSignal[0] << "\t" << robotData.cliffSignal[1] << "\t" << robotData.cliffSignal[2] << "\t" << robotData.cliffSignal[3] << endl;
 
        cout << "Robot " << robotData.cliffSignal[0] << endl;
    }
 
    robot.Disconnect();
 
    return 0;
}
File attachments: 
Attachment Size
iRobot Create.pdf 3 MB
Hl-340.exe 219.32 KB
AutoRDC2012_V2.rar 423.15 KB
State_Machine.pptx 63.06 KB
AutoRDC2012_V3.rar 422.18 KB
RDC2013_v1_main.cpp 3.42 KB

Trip 2011 – part 18

เป็นการดองบล็อกยาวข้ามปีแบบที่ไม่เคยมีมาก่อน ในที่สุดก็กลับมาเขียนเรื่องเที่ยวของวันเกือบสุดท้ายในลอนดอนต่อแล้ว

สถานที่แรกที่ไปเที่ยววันนี้คือ Tate Britain (คนละอันกับ Tate Modern แต่อยู่ในเครือเดียวกัน) วิธีเดินทางง่ายๆ ก็นั่ง tube ไปลงสถานี Plimlica แต่วันนี้ลองนั่งรถบัสชมเมืองดูบ้าง

ร้านขายของเล่น Dark Sphere ชื่อเท่ดี มีการ์ดเกมขายด้วย

โฆษณาเบียร์ Heineken บอกว่ากินไวน์มันไม่สนุกและบ้าเท่ากินเบียร์หรอก

ในที่สุดก็มาถึงด้านหน้าของ Tate Britain

The Home of British Art

ผลงานที่จัดแสดงภายในก็อย่างที่ชื่อบอกไว้ นั่นคือ Home of British Art เน้นงานศิลปะของศิลปินอังกฤษเป็นหลัก ซึ่งถ้าไม่ค่อยรู้จักศิลปินอังกฤษ (เช่น Blake, Turner, Constable) ดูแล้วอาจจะไม่ค่อยอินเท่าไหร่

ดูงานที่ Tate Britain เสร็จแล้วเดินออกมาจะเจอกับจุดจอดจักรยานเช่า วันนี้ก็ลองปั่นจักรยานดูสักหน่อย โดยการใช้งานก็เดินไปจิ้มที่จุดจอดจักรยาน เสียบบัตรเครดิตหรือเดบิตเข้าไป จากนั้นเครื่องจะให้รหัสปลดล็อกจักรยานมา เพื่อเอาไปปลดล็อก เอาจักรยานมาขี่ได้ โดยจะเสียค่าบริการครั้งแรก 1 ปอนด์ต่อ 24 ชั่วโมง และสามารถใช้งานจักรยานได้ 30 นาที ถ้าเอาจักรยานไปเก็บที่จุดจอด (ซึ่งมีกระจายอยู่ทั่วเมือง) ภายใน 30 นาทีก็ไม่เสียอะไรเพิ่ม (ระบบจะหักเงินจากบัตรเครดิต/เดบิตของเรา) ถ้าเกิดว่าเราเอาจักรยานไปเก็บแล้ว กดรหัสเอาออกมาใหม่ ภายใน 24 ชั่วโมงก็จะไม่เสียค่าบริการ ซึ่งถ้า manage ดีๆ แล้ว เราสามารถปั่นจักรยานได้ทั้งวันโดยเสียค่าเช่าแค่ 1 ปอนด์เท่านั้น (คือต้องเอาจักรยานไป dock ที่จุดจอดทุกๆ 30 นาที) ก็เป็นอีกทางเลือกให้คนชอบปั่นจักรยาน ซึ่งถนนหนทางในลอนดอนก็ทำออกมาค่อนข้างเป็นมิตรกับนักปั่นอยู่ และไม่มีรถราใหญ่ๆ ให้น่ากลัว

อีกปัจจัยคือ การเดินทางไปแหล่งท่องเที่ยวถัดไป คือ Imperial War Museum มันเดินทางลำบาก (วันอาทิตย์ tube บางเส้นทางปิดทำการ ถ้าจะนั่งก็ต้องอ้อมเยอะ)

ปั่นข้ามแม่น้ำเทมส์มาได้สักพัก ก็มาถึง Imperial War Museum

ด้านหน้า Imperial War Museum

Imperial War Museum เป็นพิพิธภัณฑ์ที่จัดแสดงงานเกี่ยวกับสงครามในยุคสมัยก่อน ที่เน้นเป็นหลักก็ส่วนของสงครามโลกครั้งที่สอง

ส่วนหนึ่งจากกำแพงเบอร์ลิน

ด้านในพิพิธภัณฑ์แบ่งเป็นหลายชั้น โถงด้านหน้าเป็นส่วนแสดงอาวุธสงครามทั้งรถถัง และเครื่องบินรถแบบต่างๆ ส่วนด้านในจะเป็นส่วนแสดงประวัติศาสตร์ของสงคราม

เครื่องบินรบสมัยสงครามโลก

ส่วนที่น่าสะเทือนใจมากๆ ในการชมพิพิธภัณฑ์นี้คือ ส่วนแสดงงานจะค่อยๆ เล่าถึงความเป็นมาของสงครามโลกครั้งที่สอง แสดงให้เห็นความโหดร้ายของสงครามและ build คนดูไปจนกระทั่งถึงห้องใหญ่ที่เป็น climax ของงานคือห้องที่พูดถึงค่ายกักกันของนาซี ดูแล้วขนลุกมากๆ

กว่าจะออกมาจาก War Museum ก็เย็น ซึ่งตอนค่ำวันนี้มีภารกิจต้องไปดูคอนเสิร์ตอีกงานหนึ่ง ซึ่งจองตั๋วไว้ตั้งแต่ตอนอยู่เมืองไทยแล้ว นั่นคือคือคอนเสิร์ตโปรโมตอัลบั้ม Write About Love ของวง Belle and Sebastian

Belle and Sebastian เป็นวงอินดี้ชื่อดังจาก Glasglow ซึ่งมีฐานแฟนเพลงในบ้านเราออกจะเยอะอยู่พอสมควร แต่ก็ไม่เคยมีวี่แววว่าจะมาแสดงสดในย่านเอเชียตะวันออกเฉียงใต้ ดังนั้น การเดินทางมาดูถึงลอนดอนนี่ก็ถือว่าเป็นโอกาสที่หาได้ยากอยู่

ซื้อตั๋วล่วงหน้าตั้งแต่ก่อนจะมา ได้ในราคาตั๋ว 2 ใบ 54.5 ปอนด์ สถานที่แสดงก็เล่นที่ Roundhouse ที่เดียวกับที่ดู Explosions in the Sky

คอนเสิร์ตนี้ซื้อตั๋วล่วงหน้าแต่เนิ่นๆ เลยได้ที่ค่อนข้างดี เกือบจะติดขอบเวทีเลยทีเดียว

สินค้า Merchandise หน้างาน ไม่ได้ซื้อเพราะว่ามันแพง T-T

วงเปิด ชื่ออะไรไม่รู้ จำไม่ได้

Belle and Sebastian มาแล้ว

เห็น Staurt Murdoch กันชัดๆ

คอนเสิร์ตจบ แก้วเบียร์เกลื่อน

เพลงส่วนใหญ่ที่เล่นจะเน้นไปที่อัลบั้มล่าสุดกับอัลบั้มแรก ดูจบแล้วรู้สึกคุ้มค่าตั๋วมาก ไม่ต้องมาหวังลมๆ แล้งๆ ว่าวงจะมาเล่นแถบเอเชียตะวันออกเฉียงใต้นี่เมื่อไหร่

คอนเสิร์ตจบก็นั่ง tube กลับที่พัก ในสถานีเจอป้ายโฆษณาคอนเสิร์ต High Voltage น่าดูดีเหมือนกัน มีวงที่อยากดูหลายวง แต่ก็ไม่มีโอกาสแหละนะ เพราะอีกไม่กี่วันก็ต้องกลับไทยแล้ว

โปสเตอร์โฆษณาคอนเสิร์ต High Voltage

ดองไว้นานมาก ตอนถัดไปตอนสุดท้ายละ

ลิงก์ตอนเก่าๆ