Enjoy programming more!
Kidspod is a post site which supports young programmers.
First step to join us.
Register as a member
For members

2018/04/15 18:34:03

MixJuice GET URL : kidspod.club/mj/478

Roomba制御プログラム

家にあったRoomba620にichigolatteをつないで動かしてみました。
ハードの接続は
ichigolatteからの送信はジャンパワイヤでichigolatteのTXDをRoombaのRXDにつなげばOK
Roombaからの受信は適当な抵抗2本で5Vを2.5Vに降圧してichigolatteのRXDにつないでやれば接続OKです。
接続出来たらuartでマニュアル通りのコマンドを投げてやればコマンド通りに動かす事ができます。
また、搭載されている各センサーの読み取りも問題なく可能でしたのでプログラム例を公開します。ichigolatteとRoombaをお持ちの方は気軽にロボットプログラミングを試してみてください。
このプログラムではRoombaをsafeモードで動かしていますので緊急時はRoombaを持ち上げて脱輪センサーを作動させれば通常モードに復帰して停止します。
みなさんもRoombaを楽しく動かして遊んでみてください。

SOURCE CODE

//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;
 }
};

COMMENT