家にあったRoomba620にichigolatteをつないで動かしてみました。
ハードの接続は
ichigolatteからの送信はジャンパワイヤでichigolatteのTXDをRoombaのRXDにつなげばOK
Roombaからの受信は適当な抵抗2本で5Vを2.5Vに降圧してichigolatteのRXDにつないでやれば接続OKです。
接続出来たらuartでマニュアル通りのコマンドを投げてやればコマンド通りに動かす事ができます。
また、搭載されている各センサーの読み取りも問題なく可能でしたのでプログラム例を公開します。ichigolatteとRoombaをお持ちの方は気軽にロボットプログラミングを試してみてください。
このプログラムではRoombaをsafeモードで動かしていますので緊急時はRoombaを持ち上げて脱輪センサーを作動させれば通常モードに復帰して停止します。
みなさんもRoombaを楽しく動かして遊んでみてください。
//Roomba //function drv(v,r,t1,t2){ function drv(v,r){ var vh,vl,rh,rl; if(v<0)v=65535+v;//VELOCITY vh=v/256;vl=v&255; if(r<0)r=65535+r;//RADIUS rh=r/256;rl=r&255; uart(137,vh,vl,rh,rl);//DRIVE }; // sleep(t1); // uart(137,0,0,0,0); // sleep(t2); uart(128);//START uart(131);//SAFE var col; var bt; var bm; var dr,drh,drl; var v=80; col=20; while(col>0){ bt=rnd(255); uart(139,rnd(15),col,bt);//LED sleep(20); col=col-1; }; col=0; while(col>0){ col=col-1; log(col,"\n"); drv(100,-100,1500,1000); drv(100,100,1500,1000); drv(-100,100,1500,1000); drv(-100,-100,1500,1000); }; col=3;bt=0; while(uart()>-1){};//BUFFER CLEAR while(col>0){ uart(142,7);//BUMP SENSOR bm=uart(); uart(142,18);//BUTTON SENSOR bt=uart(); uart(142,45);//LIGHT BUMPER dr=uart(); // drh=uart(); // drl=uart(); // dr=drh*256+drl; // if(dr>32767)dr=dr-65535; // lc(20,15); // log("v=",dr,"mm/sec\n"); if(bm==0)drv(v,0); if(bm==1){ v=80; drv(-v,-100);sleep(500); } if(bm==2){ v=80; drv(-v,100);sleep(500); } if(bm==3)drv(0,0);//BUMP L&R if(dr)v=80; if(bt==4)v=v-10;//BUTTON DOCK if(v<0)v=0; if(bt==2)v=v+10;//BUTTON SPOT if(v>240)v=240; col=col+1;//LED COUNT UP if((col>20)*(col<40)) uart(139,4,0,0);//LED DOCK if(col>40){ uart(139,0,0,0);//LED OFF col=3; } };
すごい! まさかルンバを改造するとは! センサの読み取りも可能なのですね。既存のすごいロボットを改造できるというのは、非常に面白そうです。