サブゴール2レポート


実験の目的

競技2に応用するために、自分が思っている動作をブロックで書けるようにする。
とくに、90度正確にマシンを回転できるようにする。

ロボットの説明

四輪駆動型マシンで、LEGO MindoStormsの付属説明書に通りに基本的に作成。タッチセンサ、光センサ(利用していない)を取り付けてある。マシンのスピードを上げるために、ギア比を変えている。

ソースファイル

program test {
	
	#include 
	#include 
	#include 
	#include 
	sensor touch1 on 1
	touch1 is switch as boolean
	macro POWER1 {
		power [ A  ] 8
		power [ C  ] 8
	}
	macro BACK {
		bb_Backward(A, C, 20)
	}
	
	main {
		ext InterfaceType "kFreestyle"
		rcx_ClearTimers
		bbs_GlobalReset([A B C])
		try {
			POWER1
		} retry on fail
		try {
			bb_Forward(A, C, 100)
		} retry on fail
		try {
			bb_TurnLeft(A, C, 60)
		} retry on fail
		try {
			bb_Forward(A, C, 20)
		} retry on fail
		try {
			if touch1 is closed {
				sound 1
				BACK
			}
			else
			{
				bb_Forward(A, C, 10)
				if touch1 is closed {
					sound 1
					BACK
				}
				else
				{
					bb_Forward(A, C, 10)
					if touch1 is closed {
						sound 1
						BACK
					}
					else
					{
						bb_Forward(A, C, 10)
					} 
				} 
			} 
		} retry on fail
		try {
			bb_TurnLeft(A, C, 60)
		} retry on fail
		try {
			bb_Forward(A, C, 30)
		} retry on fail
		try {
			bb_TurnRight(A, C, 50)
		} retry on fail
		try {
			bb_Forward(A, C, 100)
		} retry on fail
		try {
			if touch1 is closed {
				sound 1
				bb_Backward(A, C, 20)
			}
			else
			{
				bb_Forward(A, C, 10)
				if touch1 is closed {
					sound 1
					bb_Backward(A, C, 20)
				}
				else
				{
					bb_Forward(A, C, 10)
					if touch1 is closed {
						sound 1
						bb_Backward(A, C, 20)
					}
					else
					{
						bb_Forward(A, C, 10)
						if touch1 is closed {
							sound 1
							bb_Backward(A, C, 20)
						}
						else
						{
							bb_Forward(A, C, 10)
							if touch1 is closed {
								sound 1
								bb_Backward(A, C, 20)
							}
							else
							{
								bb_Forward(A, C, 10)
							} 
						} 
					} 
				} 
			} 
		} retry on fail
		try {
			bb_TurnLeft(A, C, 60)
		} retry on fail
		try {
			bb_Forward(A, C, 15)
		} retry on fail
		try {
			bb_TurnRight(A, C, 50)
		} retry on fail
		try {
			bb_Forward(A, C, 70)
		} retry on fail
		try {
			if touch1 is closed {
				sound 1
				bb_Backward(A, C, 10)
			}
			else
			{
				bb_Forward(A, C, 10)
				if touch1 is closed {
					sound 1
					bb_Backward(A, C, 10)
				}
				else
				{
					bb_Forward(A, C, 10)
					if touch1 is closed {
						sound 1
						bb_Backward(A, C, 10)
					}
					else
					{
						bb_Forward(A, C, 10)
					} 
				} 
			} 
		} retry on fail
	}
	
	
	fragment ( 1505,417 ) {
		if touch1 is closed {
			sound 1
			bb_Backward(A, C, 10)
		}
		else
		{
			bb_Forward(A, C, 10)
		} 
	}
}

フローチャート

考察、プログラムの説明等

競技2では、いかにマシンを方向のずれ無しに、制御するかが重要である。私が不注意によりマシンを落としてしまったせいで、その直しに時間がとられてしまった。初めはマシンが方向が前進命令を出しても左のほうにずれて進んでいき、落としたことによるのではないかとTAさんに聞きに行った所違うと言われて、ほっとした反面、なぜだろうと言う疑問にかられてしまった。重心がおかしい、摩擦のせいである等色々考えたが、答えは見つからず、強引にもギア比をかえてスピードでごまかすことにした。今のところは成功している。ただ、フローチャートを見てもらうとおり、すべてが時間制御である。光センサがうまく作動せず、苦肉の策によるものだが、相手のマシンとぶつかった時がまったく考えておらず(考えたくもない)次の課題にしたい。

主に担当したこと

特にこれをするということを共同実験者を決めたわけでもなく、プログラム作成とマシンの両方をした。ただ、相手方の斬新なアイディアもあり非常にありがたかった。

感想

このまま行くと間に合いそうもなく、やばい。そのためにも次回スムーズに行くためにある程度のプログラムの構造は考えていきたい。
サブゴール1へ
topページへ