2017b/Member/tono/Mission3
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
~目次
#contents
*課題目的 [#ud38a814]
~今回の課題の目的は課題2で使用した紙(下の図)を使用し、...
つ入れておく。また、黄色い円に紙コップを通常の向きに置き...
#ref(2017b/Member/tono/Mission3/課題3.png,center,85%,コー...
*ロボットについて [#n2f8ba4d]
#ref(2017b/Member/tono/Mission3/ロボット全体.png,center,7...
今回では2台のロボット(MasterとSlave)を作った。Masterの...
**ロボットの車体 [#hd831bef]
#ref(2017b/Member/tono/Mission3/ロボット車体.png,center,7...
上の図のようにロボットの車体の部分は課題2のように作った。...
**ロボットのアーム [#a28d1edc]
ロボットのアームでは今回の課題の一番重要なものである。ロ...
***紙コップを掴む構造・仕組み [#r76f95da]
#ref(2017b/Member/tono/Mission3/ロボットのアーム.png,cent...
紙コップを掴む構造をわかりやすく説明できるため、上の図の...
-1から2
~モータが前の方向に回ると隣の黒い歯車も同様にまわる。その...
-2から3
~灰色の歯車が右の方向に回ると歯車の真ん中の穴にあるウォー...
-3から4
~ウォームギアが右の方向に回転すると両隣の灰色の歯車が回転...
-4から5
#ref(2017b/Member/tono/Mission3/ロボットアームの裏.png,ce...
~この仕組みは長い黒い棒の部品を使って下の歯車に動きを伝え...
***紙コップを持ち上げる構造・仕組み [#i6d163b1]
#ref(2017b/Member/tono/Mission3/上げる操作.png,center,50%...
紙コップを掴んでから紙コップを持ち上げることを行う。上の...
***ピンポン玉を運ぶ動作 [#x45690d0]
#ref(2017b/Member/tono/Mission3/ピンポン玉運ぶ.png,center...
ロボットのピンポン玉を運ぶ動作は最初に部品No.1とNo.2を垂...
***超音波センサー [#a01bfd1d]
#ref(2017b/Member/tono/Mission3/超音波センサ.png,center,6...
超音波センサーは縦をつけた方がいいといわれた。しかし、今...
***スタンド [#gca239fd]
#ref(2017b/Member/tono/Mission3/スクリーンショット 2018-0...
私たちのロボットの構造がかなり大きいのでせいでスタート線...
*プログラムについて [#h561943c]
#ref(2017b/Member/tono/Mission3/コース説明.png,center,65%...
上の図のように2つのロボット(LeftRobotとRightRobot)を...
-最初にLeftRobotをLine Traceプログラムで移動しながら左側...
-次、RightRobotとLeftRobotはX点でピンポン玉を置くSubを使...
-そのあと、図のように青いところで紙コップを重ねる。ロボッ...
-最後に重ねられた紙コップをYで置く。そのときは1つのロボッ...
**Line Traceプログラム [#s1153149]
今回の課題ではまだ課題2のコースを使っている。課題2の結果...
のプログラムがグループの中で一番優秀のでrikoの課題2のプロ...
**紙コップを探す・手前までに進むプログラム [#j4a82658]
先生が授業で配ったプリントと授業の参考資料の37ページを参...
の代わりにsubを使った。
#define SLOW 30 // 速度を遅くして30にする。
const float diameter=5.45; // タイヤの直径(cm)
const float tread=11.3; // タイヤのトレッド幅(cm)
const float pi=3.1415; // 円周率
int d; // 整数dとおく
sub fwdDist(float d) // 距離d cm 前進
{
long angle=d/(diameter*pi)*360.0; // 必要なタイヤの...
RotateMotorEx(OUT_AB,SLOW,angle,0,true,true);
}
sub turnAng(long ang) // 距離ang度の時間回り旋回
{
long angle=tread/diameter*ang; // 必要なタイヤの回転角
RotateMotorEx(OUT_AB,SLOW,angle,100,true,true);
}
int searchDirection(long ang) //現在の方向を中心にang度...
{
long tacho_min; // もっとも近い距離を実現するタイヤ...
int d_min=300; // もっとも近い距離の仮の最小値(十分...
long angle=(tread/diameter)*ang; // 旋回角度からタ...
turnAng(ang/2); // 指定された角度の半径の半分を旋回
ResetTachoCount(OUT_AB); // 角度計算をリセット
OnFwdSync(OUT_AB,SLOW,-100); // 反時計回りに旋回
while(MotorTachoCount(OUT_A)<=angle){
if(SensorUS(S3)<d_min){ // 現在の距離が仮の最小...
d_min=SensorUS(S3); // 仮の最小値の更新
tacho_min=MotorTachoCount(OUT_A); // この時のタ...
}
}
OnFwdSyncEx(OUT_AB,SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_A)<=tacho_min||SensorUS(S3)...
Wait(14); // 微調整
Off(OUT_AB);
Wait(500); // 0.5秒に休止
return d_min;
}
**ピンポン玉を拾うプログラム [#r311dfc8]
ピンポン玉がなかにある紙コップを取るプログラムは以下のよ...
sub catch_cop(long ang1)
{
ResetTachoCount(OUT_C); // モータCの回転角をリセット...
RotateMotor(OUT_C,-SLOW,ang1); // モータCをSLOW%のス...
}
**紙コップを離すプログラム [#w1ab322e]
紙コップを離すプログラムは以下のようなものである:
sub release_cop(long ang2)
{
ResetTachoCount(OUT_C); // モータCの回転角をリセッ...
RotateMotor(OUT_C,SLOW,ang2); // モータCをSLOW%のス...
}
**紙コップを持ち上げるときのプログラム [#m4dd7592]
紙コップを持ち上げるときのプログラムは以下のようなもので...
sub keep_cop()
{
ResetTachoCount(OUT_C); // モータCの回転角をリセット...
RotateMotor(OUT_C,-SLOW,ang3); // モータCをSLOW%のス...
OnFwd(OUT_C,-20); // モータCを後ろに20%のスピード...
}
**紙コップを重ねるプログラム [#l576aa49]
#ref(2017b/Member/tono/Mission3/紙コップを重ねる.png,cent...
紙コップを重ねるプログラムをわかりやすく説明できるため、...
-1から2
~Master側が紙コップを持って、Slave側はMaster側から離れる...
-2から3
~Slave側が紙コップを掴む。Master側はアームを持ち上げる状...
-3から4
~Master側は紙コップをSlave側にかぶせる。Slave側はアームを...
-4から5
~Slave側が離れる。最後にMasterがアームを広げ、紙コップを...
***LeftRobot(Slave側) [#kf797236]
LeftRobot(Slave側)のプログラムは以下のようなものである。...
#define SIGNALON 11 // モータ回転のためのメッセージ
#define SIGNALON2 12 // モータ停止のためのメッセージ
sub tagforleft()
{
int msg,counter; // 受け取った値を格納する変数
ResetTachoCount(OUT_ABC); //タイヤとアームの回転をリ...
RotateMotor(OUT_C,SLOW,1080); // アームをSLOWスピ...
RotateMotorEx(OUT_AB,-SLOW,360,0,true,true); //タイ...
RotateMotor(OUT_C,-SLOW,1080); // アームをSLOWスピ...
while(counter==0){ ////カウンターが0の...
ReceiveRemoteNumber(MAILBOX1,true,msg);
if(msg==SIGNALON) {
ResetTachoCount(OUT_ABC);
RotateMotor(OUT_C,SLOW,1080);
RotateMotorEx(OUT_AB,SLOW,120,0,true,true);
RotateMotor(OUT_C,-SLOW,1080);
counter++; //(番号3の状態)
}
}counter=0; //(番号4の状態)
while(counter==0){
ReceiveRemoteNumber(MAILBOX1,true,msg);
if(msg==SIGNALON2) {
ResetTachoCount(OUT_ABC);
RotateMotor(OUT_C,SLOW,360);
RotateMotorEx(OUT_AB,SLOW,40,0,true,true); //...
counter++;
}
}counter=0;
ResetTachoCount(OUT_ABC);
RotateMotor(OUT_C,SLOW,720); //(...
RotateMotorEx(OUT_AB,-SLOW,120,0,true,true);
}
***RightRobot(Master側) [#c35c2452]
RightRobot(Master側)のプログラムは以下のようなものである...
#define SIGNALON1 11 // モータ回転のためのメッセージ
#define SIGNALON2 12 // モータ停止のためのメッセージ
sub tagforright()
{
keep_cop(); // 番号2の状態
d=searchDirection(15); // Slave側のロボットを探す
if(d>5.0){ // 距離が5cmより遠いとき
SendRemoteNumber(CONN,MAILBOX1,SIGNALON1); // Sl...
Wait(5000); //5秒停止
fwdDist(d-8.0); // 近づいてd-8.0cm手前停止(番号...
ResetTachoCount(OUT_ABC); //タイヤとアームの回転...
RotateMotorEx(OUT_AB,-SLOW,40,0,true,true); //...
RotateMotor(OUT_C,SLOW,50); //アームをSLOWスピ...
SendRemoteNumber(CONN,MAILBOX1,SIGNALON2); // S...
Wait(5000); //5秒停止
RotateMotor(OUT_C,SLOW,100); // アームをSLOWスピ...
ResetTachoCount(OUT_ABC); // タイヤとアームの回...
RotateMotor(OUT_C,SLOW,720); //アームをSLOWスピ...
RotateMotorEx(OUT_AB,-SLOW,120,0,true,true); //タ...
前...
}
}
**全体プログラム [#v9f2365d]
***LeftRobot [#ndb04038]
LeftRobot の全体プログラムは以下のようなものである。ただ...
task main()
{
SetSensorLight(S2); // 光センサーの起動
SetSensorLowspeed(S3); // 超音波センサーセンサーの起動
Start_Set(); // Start Lineの移動
R_line(300,150); // Line Trace (番号1の移動)
d=searchDirection(15); // 紙コップを探した後、
if(d>5.0){ // 距離が5cmより遠いとき
catch_cop(700); // ここから紙コップを取る(番号2)
OnFwd(OUT_AB,SLOW); // ここからはロボットをX地点...
Wait(1400);
Off(OUT_AB);
catch_cop(300);
OnFwd(OUT_AB,-SLOW);
Wait(100);
Off(OUT_AB); // ここまではロボットをX地点の近く...
}
ResetTachoCount(OUT_A);
RotateMotor(OUT_A,SLOW,10);
OnFwd(OUT_AB,SLOW);
Wait(600);
Off(OUT_AB); // ピンポン玉をX地点に入れる(番号3)
catch_cop(40); // 紙コップを取ってX地点の外に出る
OnFwd(OUT_C,-SLOW); // ここからはロボットを紙...
Wait(1000);
Off(OUT_C);
OnFwd(OUT_AB,-SLOW);
Wait(1000);
Off(OUT_AB);
White_to_Black(33,35,15);
Black_to_White(48,35,15);
White_to_Black(33,40,25);
Black_to_White(48,-30,0);
White_to_Black(33,-30,0);
Black_to_White(50,0,-30);
White_to_Black(33,35,30);
Black_to_White(48,35,30); // ここまではロボットを紙コ...
release_cop(50); // 1回目の紙コップを重ねる動作を行う
tagforleft(); // 同上
keep_cop(); // 同上
tagforleft(); // 2回目の紙コップを重ねる動作を行う
OnFwd(OUT_AB,-SLOW);
Wait(1000);
Off(OUT_AB); // LeftRobotの仕事終了
}
***RightRobot [#ifca1b94]
RightRobot の全体プログラムは以下のようなものである。た...
task main()
{
SetSensorLight(S2); // 光センサーの起動
SetSensorLowspeed(S3); // 超音波センサーセンサーの起動
reverse_Start_Set(); // Start Lineの移動(ロボット...
L_line(1300,110); // Line Trace (番号1の移動)
OnFwd(OUT_AB,-SLOW); // ここから番号2の移動
Wait(500);
Off(OUT_AB); // ここまで番号2の移動
White_to_Black(43,20,25); // Line Trace (番号3の移動)
White_to_Black(33,20,25); // 同上
ResetTachoCount(OUT_A);
RotateMotor(OUT_A,-SLOW,150);
d=searchDirection(15); // 紙コップを探した後、
if(d>5.0){ // 距離が5cmより遠いとき
catch_cop(600); // ここで紙コップを取る(番号4)
OnFwd(OUT_AB,SLOW); // ここからはロボットをX地点...
Wait(1000);
Off(OUT_AB);
catch_cop(500);
OnFwd(OUT_AB,-SLOW);
Wait(400);
Off(OUT_AB); // ここまではロボットをX地点の近く...
}
ResetTachoCount(OUT_B);
RotateMotor(OUT_B,-SLOW,110);
release_ball(); // ピンポン玉を目的に入れる(番号5)
ResetTachoCount(OUT_A);
RotateMotor(OUT_A,-SLOW,130);
tagforright(); // 1回目の紙コップを重ねる動作を行う
OnFwd(OUT_AB,-SLOW); // ここからは番号6の移動
Wait(1000);
Off(OUT_AB);
White_to_Black(48,35,25);
L_line(300,130);
Black_to_White(48,0,-30);
White_to_Black(33,0,-30); // ここまでは番号6の移動
d=searchDirection(15); // 紙コップを探した後、
if(d>5.0){ // 近づいて5cm手前
catch_cop(600); // ここで紙コップを取る(番号6)
OnFwd(OUT_AB,SLOW); // ここからはロボットをX地点...
Wait(1000);
Off(OUT_AB);
catch_cop(500);
OnFwd(OUT_AB,-SLOW);
Wait(400);
Off(OUT_AB); // ここまではロボットをX地点の近く...
}
White_to_Black(33,-30,-30); // ここからは番号7の移動
L_line(150,130);
Black_to_White(48,30,30); // ここまでは番号7の移動
release_ball(); // ピンポン玉を目的に入れる(番号7)
ResetTachoCount(OUT_A);
RotateMotor(OUT_A,-SLOW,130);
tagforright(); // 2回目の紙コップを重ねる動作を行う(...
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,-SLOW,1100);
White_to_Black(33,-30,-30); // ここからはロボットをY...
Black_to_White(48,-30,-30);
White_to_Black(33,-30,-30);
OnFwd(OUT_AB,SLOW); // ここまではロボットをY地点まで...
Wait(300);
Off(OUT_AB);
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,SLOW,1200); // Y地点で紙コップを入...
}
*まとめ [#sf289f75]
発表のとき、1回目LeftRobotが1個ピンポン玉をX地点に入れた...
また、技術点としては平均8.8点となり、全体合計は12.8点。順...
*考察・感想 [#k329c3e6]
-超音波センサーではロボットの説明で述べた通り、横方向にし...
-各プログラムは起動できたが最後にプログラムを合わせてコー...
-発表のときもあったが、機体が長くなってしまったことで障害...
~最後に、この授業を取ってプログラム入門を触ることができた...
*参考文献 [#y3dcb0c0]
~松本成司(2013)「自律型ロボットを作ろう!(2013年度版)」...
終了行:
~目次
#contents
*課題目的 [#ud38a814]
~今回の課題の目的は課題2で使用した紙(下の図)を使用し、...
つ入れておく。また、黄色い円に紙コップを通常の向きに置き...
#ref(2017b/Member/tono/Mission3/課題3.png,center,85%,コー...
*ロボットについて [#n2f8ba4d]
#ref(2017b/Member/tono/Mission3/ロボット全体.png,center,7...
今回では2台のロボット(MasterとSlave)を作った。Masterの...
**ロボットの車体 [#hd831bef]
#ref(2017b/Member/tono/Mission3/ロボット車体.png,center,7...
上の図のようにロボットの車体の部分は課題2のように作った。...
**ロボットのアーム [#a28d1edc]
ロボットのアームでは今回の課題の一番重要なものである。ロ...
***紙コップを掴む構造・仕組み [#r76f95da]
#ref(2017b/Member/tono/Mission3/ロボットのアーム.png,cent...
紙コップを掴む構造をわかりやすく説明できるため、上の図の...
-1から2
~モータが前の方向に回ると隣の黒い歯車も同様にまわる。その...
-2から3
~灰色の歯車が右の方向に回ると歯車の真ん中の穴にあるウォー...
-3から4
~ウォームギアが右の方向に回転すると両隣の灰色の歯車が回転...
-4から5
#ref(2017b/Member/tono/Mission3/ロボットアームの裏.png,ce...
~この仕組みは長い黒い棒の部品を使って下の歯車に動きを伝え...
***紙コップを持ち上げる構造・仕組み [#i6d163b1]
#ref(2017b/Member/tono/Mission3/上げる操作.png,center,50%...
紙コップを掴んでから紙コップを持ち上げることを行う。上の...
***ピンポン玉を運ぶ動作 [#x45690d0]
#ref(2017b/Member/tono/Mission3/ピンポン玉運ぶ.png,center...
ロボットのピンポン玉を運ぶ動作は最初に部品No.1とNo.2を垂...
***超音波センサー [#a01bfd1d]
#ref(2017b/Member/tono/Mission3/超音波センサ.png,center,6...
超音波センサーは縦をつけた方がいいといわれた。しかし、今...
***スタンド [#gca239fd]
#ref(2017b/Member/tono/Mission3/スクリーンショット 2018-0...
私たちのロボットの構造がかなり大きいのでせいでスタート線...
*プログラムについて [#h561943c]
#ref(2017b/Member/tono/Mission3/コース説明.png,center,65%...
上の図のように2つのロボット(LeftRobotとRightRobot)を...
-最初にLeftRobotをLine Traceプログラムで移動しながら左側...
-次、RightRobotとLeftRobotはX点でピンポン玉を置くSubを使...
-そのあと、図のように青いところで紙コップを重ねる。ロボッ...
-最後に重ねられた紙コップをYで置く。そのときは1つのロボッ...
**Line Traceプログラム [#s1153149]
今回の課題ではまだ課題2のコースを使っている。課題2の結果...
のプログラムがグループの中で一番優秀のでrikoの課題2のプロ...
**紙コップを探す・手前までに進むプログラム [#j4a82658]
先生が授業で配ったプリントと授業の参考資料の37ページを参...
の代わりにsubを使った。
#define SLOW 30 // 速度を遅くして30にする。
const float diameter=5.45; // タイヤの直径(cm)
const float tread=11.3; // タイヤのトレッド幅(cm)
const float pi=3.1415; // 円周率
int d; // 整数dとおく
sub fwdDist(float d) // 距離d cm 前進
{
long angle=d/(diameter*pi)*360.0; // 必要なタイヤの...
RotateMotorEx(OUT_AB,SLOW,angle,0,true,true);
}
sub turnAng(long ang) // 距離ang度の時間回り旋回
{
long angle=tread/diameter*ang; // 必要なタイヤの回転角
RotateMotorEx(OUT_AB,SLOW,angle,100,true,true);
}
int searchDirection(long ang) //現在の方向を中心にang度...
{
long tacho_min; // もっとも近い距離を実現するタイヤ...
int d_min=300; // もっとも近い距離の仮の最小値(十分...
long angle=(tread/diameter)*ang; // 旋回角度からタ...
turnAng(ang/2); // 指定された角度の半径の半分を旋回
ResetTachoCount(OUT_AB); // 角度計算をリセット
OnFwdSync(OUT_AB,SLOW,-100); // 反時計回りに旋回
while(MotorTachoCount(OUT_A)<=angle){
if(SensorUS(S3)<d_min){ // 現在の距離が仮の最小...
d_min=SensorUS(S3); // 仮の最小値の更新
tacho_min=MotorTachoCount(OUT_A); // この時のタ...
}
}
OnFwdSyncEx(OUT_AB,SLOW,100,RESET_NONE);
until(MotorTachoCount(OUT_A)<=tacho_min||SensorUS(S3)...
Wait(14); // 微調整
Off(OUT_AB);
Wait(500); // 0.5秒に休止
return d_min;
}
**ピンポン玉を拾うプログラム [#r311dfc8]
ピンポン玉がなかにある紙コップを取るプログラムは以下のよ...
sub catch_cop(long ang1)
{
ResetTachoCount(OUT_C); // モータCの回転角をリセット...
RotateMotor(OUT_C,-SLOW,ang1); // モータCをSLOW%のス...
}
**紙コップを離すプログラム [#w1ab322e]
紙コップを離すプログラムは以下のようなものである:
sub release_cop(long ang2)
{
ResetTachoCount(OUT_C); // モータCの回転角をリセッ...
RotateMotor(OUT_C,SLOW,ang2); // モータCをSLOW%のス...
}
**紙コップを持ち上げるときのプログラム [#m4dd7592]
紙コップを持ち上げるときのプログラムは以下のようなもので...
sub keep_cop()
{
ResetTachoCount(OUT_C); // モータCの回転角をリセット...
RotateMotor(OUT_C,-SLOW,ang3); // モータCをSLOW%のス...
OnFwd(OUT_C,-20); // モータCを後ろに20%のスピード...
}
**紙コップを重ねるプログラム [#l576aa49]
#ref(2017b/Member/tono/Mission3/紙コップを重ねる.png,cent...
紙コップを重ねるプログラムをわかりやすく説明できるため、...
-1から2
~Master側が紙コップを持って、Slave側はMaster側から離れる...
-2から3
~Slave側が紙コップを掴む。Master側はアームを持ち上げる状...
-3から4
~Master側は紙コップをSlave側にかぶせる。Slave側はアームを...
-4から5
~Slave側が離れる。最後にMasterがアームを広げ、紙コップを...
***LeftRobot(Slave側) [#kf797236]
LeftRobot(Slave側)のプログラムは以下のようなものである。...
#define SIGNALON 11 // モータ回転のためのメッセージ
#define SIGNALON2 12 // モータ停止のためのメッセージ
sub tagforleft()
{
int msg,counter; // 受け取った値を格納する変数
ResetTachoCount(OUT_ABC); //タイヤとアームの回転をリ...
RotateMotor(OUT_C,SLOW,1080); // アームをSLOWスピ...
RotateMotorEx(OUT_AB,-SLOW,360,0,true,true); //タイ...
RotateMotor(OUT_C,-SLOW,1080); // アームをSLOWスピ...
while(counter==0){ ////カウンターが0の...
ReceiveRemoteNumber(MAILBOX1,true,msg);
if(msg==SIGNALON) {
ResetTachoCount(OUT_ABC);
RotateMotor(OUT_C,SLOW,1080);
RotateMotorEx(OUT_AB,SLOW,120,0,true,true);
RotateMotor(OUT_C,-SLOW,1080);
counter++; //(番号3の状態)
}
}counter=0; //(番号4の状態)
while(counter==0){
ReceiveRemoteNumber(MAILBOX1,true,msg);
if(msg==SIGNALON2) {
ResetTachoCount(OUT_ABC);
RotateMotor(OUT_C,SLOW,360);
RotateMotorEx(OUT_AB,SLOW,40,0,true,true); //...
counter++;
}
}counter=0;
ResetTachoCount(OUT_ABC);
RotateMotor(OUT_C,SLOW,720); //(...
RotateMotorEx(OUT_AB,-SLOW,120,0,true,true);
}
***RightRobot(Master側) [#c35c2452]
RightRobot(Master側)のプログラムは以下のようなものである...
#define SIGNALON1 11 // モータ回転のためのメッセージ
#define SIGNALON2 12 // モータ停止のためのメッセージ
sub tagforright()
{
keep_cop(); // 番号2の状態
d=searchDirection(15); // Slave側のロボットを探す
if(d>5.0){ // 距離が5cmより遠いとき
SendRemoteNumber(CONN,MAILBOX1,SIGNALON1); // Sl...
Wait(5000); //5秒停止
fwdDist(d-8.0); // 近づいてd-8.0cm手前停止(番号...
ResetTachoCount(OUT_ABC); //タイヤとアームの回転...
RotateMotorEx(OUT_AB,-SLOW,40,0,true,true); //...
RotateMotor(OUT_C,SLOW,50); //アームをSLOWスピ...
SendRemoteNumber(CONN,MAILBOX1,SIGNALON2); // S...
Wait(5000); //5秒停止
RotateMotor(OUT_C,SLOW,100); // アームをSLOWスピ...
ResetTachoCount(OUT_ABC); // タイヤとアームの回...
RotateMotor(OUT_C,SLOW,720); //アームをSLOWスピ...
RotateMotorEx(OUT_AB,-SLOW,120,0,true,true); //タ...
前...
}
}
**全体プログラム [#v9f2365d]
***LeftRobot [#ndb04038]
LeftRobot の全体プログラムは以下のようなものである。ただ...
task main()
{
SetSensorLight(S2); // 光センサーの起動
SetSensorLowspeed(S3); // 超音波センサーセンサーの起動
Start_Set(); // Start Lineの移動
R_line(300,150); // Line Trace (番号1の移動)
d=searchDirection(15); // 紙コップを探した後、
if(d>5.0){ // 距離が5cmより遠いとき
catch_cop(700); // ここから紙コップを取る(番号2)
OnFwd(OUT_AB,SLOW); // ここからはロボットをX地点...
Wait(1400);
Off(OUT_AB);
catch_cop(300);
OnFwd(OUT_AB,-SLOW);
Wait(100);
Off(OUT_AB); // ここまではロボットをX地点の近く...
}
ResetTachoCount(OUT_A);
RotateMotor(OUT_A,SLOW,10);
OnFwd(OUT_AB,SLOW);
Wait(600);
Off(OUT_AB); // ピンポン玉をX地点に入れる(番号3)
catch_cop(40); // 紙コップを取ってX地点の外に出る
OnFwd(OUT_C,-SLOW); // ここからはロボットを紙...
Wait(1000);
Off(OUT_C);
OnFwd(OUT_AB,-SLOW);
Wait(1000);
Off(OUT_AB);
White_to_Black(33,35,15);
Black_to_White(48,35,15);
White_to_Black(33,40,25);
Black_to_White(48,-30,0);
White_to_Black(33,-30,0);
Black_to_White(50,0,-30);
White_to_Black(33,35,30);
Black_to_White(48,35,30); // ここまではロボットを紙コ...
release_cop(50); // 1回目の紙コップを重ねる動作を行う
tagforleft(); // 同上
keep_cop(); // 同上
tagforleft(); // 2回目の紙コップを重ねる動作を行う
OnFwd(OUT_AB,-SLOW);
Wait(1000);
Off(OUT_AB); // LeftRobotの仕事終了
}
***RightRobot [#ifca1b94]
RightRobot の全体プログラムは以下のようなものである。た...
task main()
{
SetSensorLight(S2); // 光センサーの起動
SetSensorLowspeed(S3); // 超音波センサーセンサーの起動
reverse_Start_Set(); // Start Lineの移動(ロボット...
L_line(1300,110); // Line Trace (番号1の移動)
OnFwd(OUT_AB,-SLOW); // ここから番号2の移動
Wait(500);
Off(OUT_AB); // ここまで番号2の移動
White_to_Black(43,20,25); // Line Trace (番号3の移動)
White_to_Black(33,20,25); // 同上
ResetTachoCount(OUT_A);
RotateMotor(OUT_A,-SLOW,150);
d=searchDirection(15); // 紙コップを探した後、
if(d>5.0){ // 距離が5cmより遠いとき
catch_cop(600); // ここで紙コップを取る(番号4)
OnFwd(OUT_AB,SLOW); // ここからはロボットをX地点...
Wait(1000);
Off(OUT_AB);
catch_cop(500);
OnFwd(OUT_AB,-SLOW);
Wait(400);
Off(OUT_AB); // ここまではロボットをX地点の近く...
}
ResetTachoCount(OUT_B);
RotateMotor(OUT_B,-SLOW,110);
release_ball(); // ピンポン玉を目的に入れる(番号5)
ResetTachoCount(OUT_A);
RotateMotor(OUT_A,-SLOW,130);
tagforright(); // 1回目の紙コップを重ねる動作を行う
OnFwd(OUT_AB,-SLOW); // ここからは番号6の移動
Wait(1000);
Off(OUT_AB);
White_to_Black(48,35,25);
L_line(300,130);
Black_to_White(48,0,-30);
White_to_Black(33,0,-30); // ここまでは番号6の移動
d=searchDirection(15); // 紙コップを探した後、
if(d>5.0){ // 近づいて5cm手前
catch_cop(600); // ここで紙コップを取る(番号6)
OnFwd(OUT_AB,SLOW); // ここからはロボットをX地点...
Wait(1000);
Off(OUT_AB);
catch_cop(500);
OnFwd(OUT_AB,-SLOW);
Wait(400);
Off(OUT_AB); // ここまではロボットをX地点の近く...
}
White_to_Black(33,-30,-30); // ここからは番号7の移動
L_line(150,130);
Black_to_White(48,30,30); // ここまでは番号7の移動
release_ball(); // ピンポン玉を目的に入れる(番号7)
ResetTachoCount(OUT_A);
RotateMotor(OUT_A,-SLOW,130);
tagforright(); // 2回目の紙コップを重ねる動作を行う(...
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,-SLOW,1100);
White_to_Black(33,-30,-30); // ここからはロボットをY...
Black_to_White(48,-30,-30);
White_to_Black(33,-30,-30);
OnFwd(OUT_AB,SLOW); // ここまではロボットをY地点まで...
Wait(300);
Off(OUT_AB);
ResetTachoCount(OUT_C);
RotateMotor(OUT_C,SLOW,1200); // Y地点で紙コップを入...
}
*まとめ [#sf289f75]
発表のとき、1回目LeftRobotが1個ピンポン玉をX地点に入れた...
また、技術点としては平均8.8点となり、全体合計は12.8点。順...
*考察・感想 [#k329c3e6]
-超音波センサーではロボットの説明で述べた通り、横方向にし...
-各プログラムは起動できたが最後にプログラムを合わせてコー...
-発表のときもあったが、機体が長くなってしまったことで障害...
~最後に、この授業を取ってプログラム入門を触ることができた...
*参考文献 [#y3dcb0c0]
~松本成司(2013)「自律型ロボットを作ろう!(2013年度版)」...
ページ名: