2013a/Member/histuji/Mission1
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
*ロボットの紹介 [#ge59bd36]
このロボットのうりは速さです。そのうえで各々工夫した点を...
製作時間は2,3時間程度です。ほとんどアームの製作時間だと...
#ref(ロボ5.jpg)
#ref(ロボ4.jpg)
**アーム [#l4b41a6a]
こだわった点は掴むアームを2つにし、それでいて軽さを追求す...
#ref(ロボ6.jpg)
#ref(ロボ7.jpg)
**本体 [#ycca41fe]
黄色のコアを少し後ろにしてつけ、光センサーを本体に近づく...
*コース攻略 [#uffb901c]
交差点をわたらせることが攻略の鍵
#ref(http://yakushi.shinshu-u.ac.jp/robotics/?plugin=atta...
**左回り [#d8db0732]
-なによりも大変だったのが交差点をいかにわたらせるかという...
はじめの交差点が渡れず正規ルートを通れなっかたのでタイマ...
-次の2連続交差点も同様です。
-しかし最後の交差点が面倒でした。前のプログラムでは急カー...
プログラムの詳しい説明は後のプログラムの説明にて記述。
*プログラムの説明 [#a03d5d0c]
#define THRESHOLD 48
-しきい値の値は重要。一番いい値を得るため数字を変え試行錯...
#define HIPOWER 7 //直進用パワー
#define LOWPOWER 2 //カーブ、アーム用パワー
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define set_power_N SetPower(OUT_B,LOWPOWER);
-力の調整。ACはタイヤ、Bはアーム。
#define go_forward set_power_H; OnFwd(OUT_AC);//直進は力...
#define arm_forward set_power_N; OnFwd(OUT_B);Wait(30);O...
#define arm_backward set_power_N; OnRev(OUT_B);Wait(30);...
-アームを動かすプログラムをarm_…と定義し扱いやすくした。...
#define turn_left1 set_power_L ;\
OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left0 set_power_L ;\
OnFwd(OUT_C);Off(OUT_A);
#define turn_right0 set_power_L ;\
OnFwd(OUT_A);Off(OUT_C);
#define turn_right1 set_power_L ;\
OnFwd(OUT_A);OnRev(OUT_C);
-カーブを曲がるために力は弱めに調整
#define STEP 1// 1回の判断で動作させる時間
#define nMAX 30// 通常のカーブとして許容できる繰り返し...
#define short_break Off(OUT_AC); Wait(100);// 小休止
#define CROSS_TIME 20// 交差点通過にかかる時間
#define cross_line set_power_L;\
OnFwd(OUT_A);OnRev(OUT_C);\
Wait(CROSS_TIME);short_break;
-ここまでが定義
task main ()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
int nOnline=0;// 続けて黒になった回数
ClearTimer(0);// 0番目のタイマーをリセット
while(FastTimer(0)<=400){ // 4秒以下の間だけ繰り返す
while(nOnline < nMAX && FastTimer(0)<=400){
if(SENSOR_2< THRESHOLD -8) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -3){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +8){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
-上記のプログラムで缶のあるとこまで進みます。通常、急カー...
Off(OUT_AC);
OnRev(OUT_B);
Wait(10);
arm_forward;//缶を掴む
-上記のプログラムで缶を掴みます。Off(OUT_AC);を入れるのが...
PlaySound(SOUND_UP);//次のプログラムに移行した合図として...
while(FastTimer(0)<=900){
while(nOnline < nMAX && FastTimer(0)<=900){
if(SENSOR_2< THRESHOLD -8) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -3){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +8){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
-この時点では外側を走行。
PlaySound(SOUND_UP);
ClearTimer(0);
turn_right1;
Wait(10);
arm_forward;
while(FastTimer(0)<=1300){
while(nOnline < nMAX && FastTimer(0)<=1300){
if(SENSOR_2< THRESHOLD -10) {
turn_right1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -4){
turn_right0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +10){
turn_left0;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
}
-上記のプログラムで内側走行に変更。最初の交差点をわたらせ...
PlaySound(SOUND_UP);
turn_left1;
Wait(10);
arm_forward;
while(FastTimer(0)<=2000){
while(nOnline < nMAX && FastTimer(0)<=2000){
if(SENSOR_2< THRESHOLD -10) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -4){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +10){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
-外側走行に変更。2連続交差点を突破します。
PlaySound(SOUND_UP);
arm_forward;
while(FastTimer(0)<=2650){
while(nOnline < nMAX && FastTimer(0)<=2650){
if(SENSOR_2< THRESHOLD -8) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -3){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +8){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
-進めない急カーブはこのプログラムで行ないます。
PlaySound(SOUND_UP);
arm_forward;
while(FastTimer(0)<=3100){
while(nOnline < nMAX && FastTimer(0)<=3100){
if(SENSOR_2< THRESHOLD -10) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -4){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +10){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
-ラストの交差点を渡らせる。
PlaySound(SOUND_UP);
turn_left1;
Wait(10);
arm_forward;
while(FastTimer(0)<=3800){
while(nOnline < nMAX && FastTimer(0)<=3800){
if(SENSOR_2< THRESHOLD -8) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -3){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +8){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_UP);
turn_left1;
Wait(300);
arm_backward;// 缶を離す。
OnRev(OUT_AC);// バック。
Wait(100);
turn_left1;
Wait(150);
-180度回転し缶を置き、バックをして少し回転した後ラインに...
while(FastTimer(0)<=6000){
while(nOnline < nMAX && FastTimer(0)<=6000){
if(SENSOR_2< THRESHOLD -8) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -3){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +8){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1;Wait(nMAX*STEP);// 進行方向修正
cross_line;// 交差点をわたる
nOnline=0;// カウンタリセット
}
}
-ゴール!!
**備考 [#ae4d111c]
工夫した点や上記で説明しなかったことや補足。
-缶を掴む・離すは比較的簡単にできました。
-PlaySound(SOUND_UP);
プログラムの切り替わる時に音を出し、切り替わり時を明確化...
-切り替わり時にturn_left1、turn_right1を入れることにより...
-切り替わり時にarm_forwardを入れることで缶を掴みなおさせ...
-通常、交差点用のプログラムから右基準、左基準に分岐したプ...
-今回最も重要だったの“タイマー”というプログラムです。細か...
ある時間まで特定のプログラムを行い、次のプログラムに移...
私はこの方法しか思いつかなかったがもし他 の方法がある...
*まとめ・感想[#bd293a1b]
-まだまだ多くのプログラムがあり、私が使ったプログラムはわ...
-作ってみたらとても長くなってしまったと思いました。ほんと...
-交差点をわたらせるしきい値の設定やタイマーの時間調節はほ...
終了行:
*ロボットの紹介 [#ge59bd36]
このロボットのうりは速さです。そのうえで各々工夫した点を...
製作時間は2,3時間程度です。ほとんどアームの製作時間だと...
#ref(ロボ5.jpg)
#ref(ロボ4.jpg)
**アーム [#l4b41a6a]
こだわった点は掴むアームを2つにし、それでいて軽さを追求す...
#ref(ロボ6.jpg)
#ref(ロボ7.jpg)
**本体 [#ycca41fe]
黄色のコアを少し後ろにしてつけ、光センサーを本体に近づく...
*コース攻略 [#uffb901c]
交差点をわたらせることが攻略の鍵
#ref(http://yakushi.shinshu-u.ac.jp/robotics/?plugin=atta...
**左回り [#d8db0732]
-なによりも大変だったのが交差点をいかにわたらせるかという...
はじめの交差点が渡れず正規ルートを通れなっかたのでタイマ...
-次の2連続交差点も同様です。
-しかし最後の交差点が面倒でした。前のプログラムでは急カー...
プログラムの詳しい説明は後のプログラムの説明にて記述。
*プログラムの説明 [#a03d5d0c]
#define THRESHOLD 48
-しきい値の値は重要。一番いい値を得るため数字を変え試行錯...
#define HIPOWER 7 //直進用パワー
#define LOWPOWER 2 //カーブ、アーム用パワー
#define set_power_H SetPower(OUT_AC,HIPOWER);
#define set_power_L SetPower(OUT_AC,LOWPOWER);
#define set_power_N SetPower(OUT_B,LOWPOWER);
-力の調整。ACはタイヤ、Bはアーム。
#define go_forward set_power_H; OnFwd(OUT_AC);//直進は力...
#define arm_forward set_power_N; OnFwd(OUT_B);Wait(30);O...
#define arm_backward set_power_N; OnRev(OUT_B);Wait(30);...
-アームを動かすプログラムをarm_…と定義し扱いやすくした。...
#define turn_left1 set_power_L ;\
OnFwd(OUT_C);OnRev(OUT_A);
#define turn_left0 set_power_L ;\
OnFwd(OUT_C);Off(OUT_A);
#define turn_right0 set_power_L ;\
OnFwd(OUT_A);Off(OUT_C);
#define turn_right1 set_power_L ;\
OnFwd(OUT_A);OnRev(OUT_C);
-カーブを曲がるために力は弱めに調整
#define STEP 1// 1回の判断で動作させる時間
#define nMAX 30// 通常のカーブとして許容できる繰り返し...
#define short_break Off(OUT_AC); Wait(100);// 小休止
#define CROSS_TIME 20// 交差点通過にかかる時間
#define cross_line set_power_L;\
OnFwd(OUT_A);OnRev(OUT_C);\
Wait(CROSS_TIME);short_break;
-ここまでが定義
task main ()
{
SetSensor(SENSOR_2, SENSOR_LIGHT);
int nOnline=0;// 続けて黒になった回数
ClearTimer(0);// 0番目のタイマーをリセット
while(FastTimer(0)<=400){ // 4秒以下の間だけ繰り返す
while(nOnline < nMAX && FastTimer(0)<=400){
if(SENSOR_2< THRESHOLD -8) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -3){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +8){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
-上記のプログラムで缶のあるとこまで進みます。通常、急カー...
Off(OUT_AC);
OnRev(OUT_B);
Wait(10);
arm_forward;//缶を掴む
-上記のプログラムで缶を掴みます。Off(OUT_AC);を入れるのが...
PlaySound(SOUND_UP);//次のプログラムに移行した合図として...
while(FastTimer(0)<=900){
while(nOnline < nMAX && FastTimer(0)<=900){
if(SENSOR_2< THRESHOLD -8) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -3){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +8){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
-この時点では外側を走行。
PlaySound(SOUND_UP);
ClearTimer(0);
turn_right1;
Wait(10);
arm_forward;
while(FastTimer(0)<=1300){
while(nOnline < nMAX && FastTimer(0)<=1300){
if(SENSOR_2< THRESHOLD -10) {
turn_right1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -4){
turn_right0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +10){
turn_left0;
}else{
turn_left1;
}
nOnline=0;
}
Wait(STEP);
}
}
-上記のプログラムで内側走行に変更。最初の交差点をわたらせ...
PlaySound(SOUND_UP);
turn_left1;
Wait(10);
arm_forward;
while(FastTimer(0)<=2000){
while(nOnline < nMAX && FastTimer(0)<=2000){
if(SENSOR_2< THRESHOLD -10) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -4){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +10){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
-外側走行に変更。2連続交差点を突破します。
PlaySound(SOUND_UP);
arm_forward;
while(FastTimer(0)<=2650){
while(nOnline < nMAX && FastTimer(0)<=2650){
if(SENSOR_2< THRESHOLD -8) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -3){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +8){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
-進めない急カーブはこのプログラムで行ないます。
PlaySound(SOUND_UP);
arm_forward;
while(FastTimer(0)<=3100){
while(nOnline < nMAX && FastTimer(0)<=3100){
if(SENSOR_2< THRESHOLD -10) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -4){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +10){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
-ラストの交差点を渡らせる。
PlaySound(SOUND_UP);
turn_left1;
Wait(10);
arm_forward;
while(FastTimer(0)<=3800){
while(nOnline < nMAX && FastTimer(0)<=3800){
if(SENSOR_2< THRESHOLD -8) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -3){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +8){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
}
PlaySound(SOUND_UP);
turn_left1;
Wait(300);
arm_backward;// 缶を離す。
OnRev(OUT_AC);// バック。
Wait(100);
turn_left1;
Wait(150);
-180度回転し缶を置き、バックをして少し回転した後ラインに...
while(FastTimer(0)<=6000){
while(nOnline < nMAX && FastTimer(0)<=6000){
if(SENSOR_2< THRESHOLD -8) {
turn_left1;
nOnline++;
}else{
if(SENSOR_2< THRESHOLD -3){
turn_left0;
}else if(SENSOR_2< THRESHOLD +3){
go_forward;
}else if(SENSOR_2< THRESHOLD +8){
turn_right0;
}else{
turn_right1;
}
nOnline=0;
}
Wait(STEP);
}
short_break;
turn_right1;Wait(nMAX*STEP);// 進行方向修正
cross_line;// 交差点をわたる
nOnline=0;// カウンタリセット
}
}
-ゴール!!
**備考 [#ae4d111c]
工夫した点や上記で説明しなかったことや補足。
-缶を掴む・離すは比較的簡単にできました。
-PlaySound(SOUND_UP);
プログラムの切り替わる時に音を出し、切り替わり時を明確化...
-切り替わり時にturn_left1、turn_right1を入れることにより...
-切り替わり時にarm_forwardを入れることで缶を掴みなおさせ...
-通常、交差点用のプログラムから右基準、左基準に分岐したプ...
-今回最も重要だったの“タイマー”というプログラムです。細か...
ある時間まで特定のプログラムを行い、次のプログラムに移...
私はこの方法しか思いつかなかったがもし他 の方法がある...
*まとめ・感想[#bd293a1b]
-まだまだ多くのプログラムがあり、私が使ったプログラムはわ...
-作ってみたらとても長くなってしまったと思いました。ほんと...
-交差点をわたらせるしきい値の設定やタイマーの時間調節はほ...
ページ名: