2011年12月15日 星期四

Lestat--用來開發控制Lego NXT機器人軟體的C++函式庫

Lestat: Lego STandard AbsTraction layer (LEGO標準的抽象層)從它的全名可以知道,其實它只是個將通訊底層封裝起來的陽春函式庫,在這個基礎上還可以依自己的需求再進一步加入馬達及偵測器等C++類別,不過Jimmy's papa覺得目前這樣就挺好用了,有些NXT的C++函式庫,封裝得太複雜反而不易除錯

以下是Jimmy's papa在我的linux環境,依Lestat官網指示的測試過程
下載程式碼
https://csrg.inf.utfsm.cl/twiki/pub/ACS/LesTat/lestat-0.2.tar.gz
需求
* 以藍牙控制,則需確定bluez-libs-3.20 已安裝
* 以USB連接線控制,則需確定libusb-0.1.12 已安裝
* 確定編譯工具 scons 已安裝

安裝及使用
* 解壓縮 lestat-0.2.tar.gz
* 在解開的程式碼目錄底下執行編譯 run scons
* 若編譯無誤則執行測試範例./main_test

這是更簡單的C++測試程式碼
int main()
{
    BlueComm nxt;//以藍牙通訊
    try{
        nxt.connect("xx:xx:xx:xx:xx:xx");//用hcitool scan可查出NXT編號
    }catch(NxtEx &ex){
        cout<<ex.toString()<<endl;
        return -1;
    }

    try{
        Opcodes op(&nxt);
        op.playTone(523,500);//音頻
        op.playTone(587,500);//音頻
        op.playTone(523,500);//音頻
        printf("Battery level: %hu [mv]\n",op.getBatteryLevel());//顯示目前電池電力
        
        unsigned char status=1;
        op.setOutputState(0x00,80,0x01,0x00,50,0x20,980,true,&status);//驅動A馬達
        sleep(1);
        op.setOutputState(0x01,80,0x01,0x00,50,0x20,980,true,&status);//驅動B馬達
        sleep(1);
        nxt.disconnect();

    }catch(NxtEx &ex){
        cout<<ex.toString()<<endl;
        nxt.disconnect();
        return -1;

    }
    return 0;

}

沒有留言:

張貼留言