2018a/Member/tmhk8/Mission2
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[2018a/Member]]
*課題2 [#pb9c0a80]
与えられたコースに従った缶とロボットの移動
*コース [#f3c1a0b1]
コース2
*ロボット [#sb7c80fd]
#ref(S__50102275.jpg)
#ref(S__50102276.jpg)
課題1の経験を生かしてセンサーをできるだけ前輪に近づけた。
アームを取り付けると重心が前にいくため、超音波センサーを...
アームは缶を安定して掴めるように頑丈なものにした。&br;
アームにタッチセンサーも取り付けていたが缶が軽過ぎて認識...
*プログラミング [#r0450d6d]
**定義 [#o5d80ae2]
#define THRESHOLD 50
光センサーの基準値を指定
#define SPEED_H 25
#define SPEED_L 20
速さをそれぞれ指定
#define OnRL(speedR,speedL)OnFwd(OUT_B,speedR);OnFwd(OUT...
#define go_forward OnRL(SPEED_H,SPEED_H);
#define turn_left1 OnRL(SPEED_L+20,-SPEED_L-20);
#define turn_left0 OnRL(SPEED_L,0);
#define turn_right0 OnRL(0,SPEED_L);
#define turn_right1 OnRL(-SPEED_L-20,SPEED_L+20);Wait(t);
直進、カーブ等の調整
#define STEP 1
#define short_break Off(OUT_BC);Wait(1000);
#define CROSS_TIME 300
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME...
上記例外の動きを指定
**サブルーチン [#q281a59d]
名前を付けたが動きによって変えていったためルートと名前は...
交差点は黒の色で識別
sub AtoJ(int t)
{
int n = 0;
SetSensorLowspeed(S4);
SetSensorLight(S3);
while(n < 1){ //缶を見つけ...
if(SensorUS(S4) <= 7){ //缶が7?以内...
Off(OUT_BC);
Wait(1000);
go_forward;
Wait(500);
Off(OUT_BC);
OnRev(OUT_A,50);
Wait(1000);
Off(OUT_A);
n++;
}else{ //右トレース
if (SENSOR_3 < THRESHOLD-14){
turn_right1;
}else if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_left1;
}else{
turn_left1;
}
Wait(STEP);
}
}
n = 0;
}
まずは右折するため、ラインの右側をトレース&br;
缶と超音波センサーとの距離が7?以下で前進して缶をつかむ。
sub JtoL(int t)
{
int n = 0;
int nOnline=0;
SetSensorLight(S3);
while(n < 4){ //四回の交差点の間で...
if (SENSOR_3 < THRESHOLD-14){
if(nOnline < 2){ //交差点を二つ無視す...
OnFwd(OUT_BC,30); //交差点を認識すると...
Wait(200);
nOnline++;
n++;
}else{ //交差点を二回前進す...
turn_left1;Wait(1500); //Iの交差点とHの交差...
nOnline=0;
n++;
}
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_right1;
}else{
turn_right1;
}
nOnline=0;
Wait(STEP);
}
}
n=0;
Off(OUT_BC);
Wait(1000);
turn_right1; //次の右トレー...
}
今度は左トレース。&br;
KとLで二回左折を無視し、Iで左折する
sub LtoH(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 6){ //一回目の急...
if (SENSOR_3 < THRESHOLD-14){
turn_right1;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){ //左トレー...
turn_left1;Wait(420);/*電池依存*/
n++;
}else{
turn_left1;
n++;
}
Wait(STEP);
}
}
n = 0;
}
H以降の急カーブのため右トレース。
sub HtoG(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 1){ //急カーブ後黒を...
if (SENSOR_3 < THRESHOLD-14){
cross_line;
n++;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_right1;
}else{
turn_right1;
}
Wait(STEP);
}
}
n = 0;
}
急カーブのため左トレース。&br;
次右トレースへ切り替えるため最後に右へ移行する。
sub GtoD(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 2){ //交差点を二回右折...
if (SENSOR_3 < THRESHOLD-14){ //交差点を認識した...
Off(OUT_BC);
Wait(1000);
turn_right1;
n++;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_left1;
}else{
turn_left1;
}
Wait(STEP);
}
}
n = 0;
}
右トレース。Gの交差点を右に曲がる。
sub FtoD(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 1){ //Eの交差点を無視する...
if (SENSOR_3 < THRESHOLD-14){ //Eを認識し直進
OnFwd(OUT_BC,30);
Wait(200);
n++;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_left1;
}else{
turn_left1;
}
Wait(STEP);
}
}
n = 0;
}
右トレース。Eの右折を無視し、缶を置くための準備
sub DtoD(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 1){ //缶を置き、180°回転す...
if (SENSOR_3 < THRESHOLD-14){ //Dを認識すると置くべ...
turn_left1;Wait(t);
OnRev(OUT_BC,30);
Wait(t);
Off(OUT_BC);
OnFwd(OUT_A,50);
Wait(1000);
Off(OUT_A);
OnRev(OUT_BC,30);
Wait(90);
Off(OUT_BC);
turn_left1;
Wait(t);
n++;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_left1;
}else{
turn_left1;
}
Wait(STEP);
}
}
n = 0;
}
方向転換して缶を置く。もう一度方向転換し直接次のカーブへ
sub DtoC(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 2){ //Cの交差点とAの直...
if (SENSOR_3 < THRESHOLD-14){ //黒を踏んだら直進
Off(OUT_BC);
Wait(1000);
cross_line;
n++;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_left1;
}else{
turn_left1;
}
Wait(STEP);
}
}
n = 0;
}
右トレース。急カーブ、そしてCの交差点を無視してAへ
**メイン [#r31b93c3]
task main()
{
AtoJ(1350);
turn_left1;
Wait(1000);
go_forward;
Wait(500);
Off(OUT_BC);
JtoL(100);
LtoH(100);
turn_left0;
Wait(3000);
HtoG(100);
turn_left0;
Wait(400);
GtoD(740);
FtoD(100);
DtoD(1500);
DtoC(100);
}
プログラムの実行。左右トレースの補助
*まとめ [#v24c0638]
急カーブとカーブと線の合流点が辛かった。特に急カーブでは...
アームによる缶のキャッチ&リリースはすぐにできたのでよか...
終了行:
[[2018a/Member]]
*課題2 [#pb9c0a80]
与えられたコースに従った缶とロボットの移動
*コース [#f3c1a0b1]
コース2
*ロボット [#sb7c80fd]
#ref(S__50102275.jpg)
#ref(S__50102276.jpg)
課題1の経験を生かしてセンサーをできるだけ前輪に近づけた。
アームを取り付けると重心が前にいくため、超音波センサーを...
アームは缶を安定して掴めるように頑丈なものにした。&br;
アームにタッチセンサーも取り付けていたが缶が軽過ぎて認識...
*プログラミング [#r0450d6d]
**定義 [#o5d80ae2]
#define THRESHOLD 50
光センサーの基準値を指定
#define SPEED_H 25
#define SPEED_L 20
速さをそれぞれ指定
#define OnRL(speedR,speedL)OnFwd(OUT_B,speedR);OnFwd(OUT...
#define go_forward OnRL(SPEED_H,SPEED_H);
#define turn_left1 OnRL(SPEED_L+20,-SPEED_L-20);
#define turn_left0 OnRL(SPEED_L,0);
#define turn_right0 OnRL(0,SPEED_L);
#define turn_right1 OnRL(-SPEED_L-20,SPEED_L+20);Wait(t);
直進、カーブ等の調整
#define STEP 1
#define short_break Off(OUT_BC);Wait(1000);
#define CROSS_TIME 300
#define cross_line OnRL(SPEED_L,SPEED_L);Wait(CROSS_TIME...
上記例外の動きを指定
**サブルーチン [#q281a59d]
名前を付けたが動きによって変えていったためルートと名前は...
交差点は黒の色で識別
sub AtoJ(int t)
{
int n = 0;
SetSensorLowspeed(S4);
SetSensorLight(S3);
while(n < 1){ //缶を見つけ...
if(SensorUS(S4) <= 7){ //缶が7?以内...
Off(OUT_BC);
Wait(1000);
go_forward;
Wait(500);
Off(OUT_BC);
OnRev(OUT_A,50);
Wait(1000);
Off(OUT_A);
n++;
}else{ //右トレース
if (SENSOR_3 < THRESHOLD-14){
turn_right1;
}else if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_left1;
}else{
turn_left1;
}
Wait(STEP);
}
}
n = 0;
}
まずは右折するため、ラインの右側をトレース&br;
缶と超音波センサーとの距離が7?以下で前進して缶をつかむ。
sub JtoL(int t)
{
int n = 0;
int nOnline=0;
SetSensorLight(S3);
while(n < 4){ //四回の交差点の間で...
if (SENSOR_3 < THRESHOLD-14){
if(nOnline < 2){ //交差点を二つ無視す...
OnFwd(OUT_BC,30); //交差点を認識すると...
Wait(200);
nOnline++;
n++;
}else{ //交差点を二回前進す...
turn_left1;Wait(1500); //Iの交差点とHの交差...
nOnline=0;
n++;
}
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_right1;
}else{
turn_right1;
}
nOnline=0;
Wait(STEP);
}
}
n=0;
Off(OUT_BC);
Wait(1000);
turn_right1; //次の右トレー...
}
今度は左トレース。&br;
KとLで二回左折を無視し、Iで左折する
sub LtoH(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 6){ //一回目の急...
if (SENSOR_3 < THRESHOLD-14){
turn_right1;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){ //左トレー...
turn_left1;Wait(420);/*電池依存*/
n++;
}else{
turn_left1;
n++;
}
Wait(STEP);
}
}
n = 0;
}
H以降の急カーブのため右トレース。
sub HtoG(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 1){ //急カーブ後黒を...
if (SENSOR_3 < THRESHOLD-14){
cross_line;
n++;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_right1;
}else{
turn_right1;
}
Wait(STEP);
}
}
n = 0;
}
急カーブのため左トレース。&br;
次右トレースへ切り替えるため最後に右へ移行する。
sub GtoD(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 2){ //交差点を二回右折...
if (SENSOR_3 < THRESHOLD-14){ //交差点を認識した...
Off(OUT_BC);
Wait(1000);
turn_right1;
n++;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_left1;
}else{
turn_left1;
}
Wait(STEP);
}
}
n = 0;
}
右トレース。Gの交差点を右に曲がる。
sub FtoD(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 1){ //Eの交差点を無視する...
if (SENSOR_3 < THRESHOLD-14){ //Eを認識し直進
OnFwd(OUT_BC,30);
Wait(200);
n++;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_left1;
}else{
turn_left1;
}
Wait(STEP);
}
}
n = 0;
}
右トレース。Eの右折を無視し、缶を置くための準備
sub DtoD(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 1){ //缶を置き、180°回転す...
if (SENSOR_3 < THRESHOLD-14){ //Dを認識すると置くべ...
turn_left1;Wait(t);
OnRev(OUT_BC,30);
Wait(t);
Off(OUT_BC);
OnFwd(OUT_A,50);
Wait(1000);
Off(OUT_A);
OnRev(OUT_BC,30);
Wait(90);
Off(OUT_BC);
turn_left1;
Wait(t);
n++;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_left1;
}else{
turn_left1;
}
Wait(STEP);
}
}
n = 0;
}
方向転換して缶を置く。もう一度方向転換し直接次のカーブへ
sub DtoC(int t)
{
int n = 0;
SetSensorLight(S3);
while(n < 2){ //Cの交差点とAの直...
if (SENSOR_3 < THRESHOLD-14){ //黒を踏んだら直進
Off(OUT_BC);
Wait(1000);
cross_line;
n++;
}else{
if(SENSOR_3 < THRESHOLD-7){
turn_right0;
}else if(SENSOR_3 < THRESHOLD+7){
go_forward;
}else if(SENSOR_3 < THRESHOLD+10){
turn_left0;
}else if(SENSOR_3 < THRESHOLD+20){
turn_left1;
}else{
turn_left1;
}
Wait(STEP);
}
}
n = 0;
}
右トレース。急カーブ、そしてCの交差点を無視してAへ
**メイン [#r31b93c3]
task main()
{
AtoJ(1350);
turn_left1;
Wait(1000);
go_forward;
Wait(500);
Off(OUT_BC);
JtoL(100);
LtoH(100);
turn_left0;
Wait(3000);
HtoG(100);
turn_left0;
Wait(400);
GtoD(740);
FtoD(100);
DtoD(1500);
DtoC(100);
}
プログラムの実行。左右トレースの補助
*まとめ [#v24c0638]
急カーブとカーブと線の合流点が辛かった。特に急カーブでは...
アームによる缶のキャッチ&リリースはすぐにできたのでよか...
ページ名: