So-net無料ブログ作成
検索選択

認識の不良対策 [Mindstorm]

後日、HTMLに整理するためにも記録しておく。

NXTを使い始めるとき、生徒は初めてなのでプログラミング周り(コンパイルダウンロード・実行など)以外でのトラブルは避けたい。今年の失敗についてドライバのバージョンかとも疑ってみたが、それだけではないようだ。そこで考えられること。

① 電圧の不足
当たり前だが、NXTユニットの中のEPROM(かな)にプログラムを書き込むためには、ある程度の電圧は必要となる。これが「十分にバッテリーを充電していないと認識がわるいよ」とのA社H氏のアドバイスだった。これも当然だろう。

そこで、もう少し詳しく見た。

②電源を入れたNXTユニットをケーブルでPCに接続すると、USB接続のアイコンの所に「LEGO Mindsrtorm を接続しました」と「一瞬」でる。これを見逃した場合、USBを切断しようとすると[LEGO Mindstorm の取り外し」がでる。これが出れば、USBを経由してのNXTとPCのコネクションは正常に張られている。

②に失敗した場合、一度USBケーブルを外し、NXTの電源を切ってから再度ケーブルでつなぐ。NXTを先にPCと接続してからNXTの電源を入れると、認識に成功する(ことが多い)

③USB経由でのNXT<>PCの接続を確認したあとは、BricxCCにNXTの接続先を教えてやる。これは教材に書いたとおり。接続をUSB、BrickTypeをNXTにして、FirmwareをStandardOSとすれば良い。

④BricxCC川からの認識は DirectControl ボタンから出るダイヤログからモーターを回してみれば良い。ここでうまくいけば接続は大丈夫だ。

ドライバのバージョンだろうか [Mindstorm]

今年に入ってNXC実習時の接続がスムーズに行かない。

電池の電圧?
ドライバ

いくつも原因が考えられる。
Fantom Driverも1.1.3から1.2に上がったし。

ドライバのアップデートから入るのが適切かな。

ロボットの製作マニュアル [Mindstorm]

どこかにリストアップしておかないと忘れるので、まとめておいた。

Caster Bot いつもつかっているやつ
http://www.nxtprograms.com/castor_bot/steps.html

NXT programs 様のNXT9797用ロボット製作マニュアル
http://www.nxtprograms.com/projects1.html

Basic Car
pdf" target="_blank">http://www.legoengineering.com/wp-content/uploads/2013/06/NXT-basic-car-building-instructions.pdf


ついでに EV3 用チュートリアル。読んでないけど。
http://www.legoengineering.com/ev3-tutorials-by-students-for-students/

おまけ いつも使っている BricxCommandCenter
http://bricxcc.sourceforge.net/

EV3登場 [Mindstorm]

訳あってEV3が購入できた。ま、基本的に「生徒のもの」だが。

「俺がわかっていないと指導できない。」
「EV3よりNXTが先だろ。」

なんて適当な理由をつけて、自分で使っている。


EV3はLinuxで動作しているらしい。Telnetも効くらしい。

しばらくの間、良いおもちゃにしよう。

わけがわからない [Mindstorm]

NXCにはOnFwdSyncという2つのモーターを同期させて回転させる命令がある。ロボットを直進させたいときは便利な命令だ。どのくらい正確かは、その回転角を測る命令 MotorRotationCount を使って調べることができる。

手元にあるNXTで、高本高頼氏の書籍のプログラム

task main()
{
TextOut(20,52,"OnFwd test");
string ct;
OnFwdSync(OUT_AC,75,0);
while(FirstTick()+3000>CurrentTick())
{
ct = NumToStr(MotorRotationCount(OUT_A));
TextOut(0,32,StrCat(" OUT_A : ", ct));
ct = NumToStr(MotorRotationCount(OUT_C));
TextOut(0,16,StrCat(" OUT_C : ", ct));
Wait(100);
}
Off(OUT_AC);
Wait(5000);
}

を動かすと、A が 1684 , C が 1685 の表示なので違いはほとんどなく、走らせてもまっすぐ走る。

ちなみに、OnFwdSync を OnFwd に書き換えると、A が 1740 , C が 1869 だから違いが大きく、走らせてもまっすぐは走らない。

それはいい。

しかし、

#define r_turn90 OnFwd(OUT_C,50);OnRev(OUT_A,50);Wait(500);Off(OUT_AC);
task main()
{
SetSensorTouch(IN_1);
int i = 1 ;
while(i<4)
{
OnFwdSync(OUT_AC,50,0);
if(SENSOR_1==1)
{
r_turn90;
i++;
}
}
Off(OUT_AC);
}


こういう使い方をするとまっすぐには走ってくれない。理由がわからない。



しかし、OnFwd の時よりも OnFwdSync の方がモーター音がうるさい。回転数制御のための余計な不可がかかっているのかもしれない。


NXC ペーパーテスト用試作問題を作った。 [Mindstorm]

来週が定期考査のため、考査問題作成の準備をしていた。

問題だったのは、

①後半は座学がほとんど無く、実習ばかりだった。
②Mindstorm NXT で NXCによるプログラミングをやったために、過去の蓄積も前例もない
③プログラミングを正面から出題すると、生徒はできそうにもない。

したがって、NXCの試行問題を作成して生徒の学習用に公開することとした。
これのアイディアから作成まで、この2週間、頭の中がこれ一色だった。


作問に当たり注意したのは、

①NXC固有の命令は避けること。
②少し難しめに作り、本番用は易しく作り直すことが平易なこと

あたりだ。
と、いうことで sige-lab home に公開してある。


二重ループが回らない [Mindstorm]

ループを二重にして、その値で回り方を変えるプログラムを書こうとして、とりあえずサンプルを書いてみたのだが動きがおかしい。

いろいろチェック用のコードを入れて汚いコードだが、どうも中のjを変数とするループが最初と最後の2回しか通っていないようだ。

理由がわからない。

コード-------------------------------------

#define go_straight OnFwdSync(OUT_AC,75,0);Wait(500);
#define turn90 OnFwd(OUT_A,75);OnRev(OUT_C,75);Wait(340);Off(OUT_AC);
#define show(i,j) ClearScreen();NumOut(0,LCD_LINE2,i);NumOut(0,LCD_LINE3,j);

task main()
{
int i,j;
for(i=1;i<10;i++)
{
for(j=1;j<=5;j++);
{

show(i,j);
TextOut(0,LCD_LINE1,"Inside of J loop ");
go_straight;
Off(OUT_AC);
Wait(1000);
}

j=1;
show(i,j);
TextOut(0,LCD_LINE1,"Outside of J loop");
Wait(1000);
turn90;
}
}

今日のNXC-ちょっとかわいい [Mindstorm]

#define leftturn OnFwd(OUT_A,50);Off(OUT_C);Wait(5);
#define rightturn OnFwd(OUT_C,50);Off(OUT_A);Wait(5);
task main()
{
SetSensorTouch(IN_1);
SetSensorTouch(IN_4);
while(true)
{
OnFwdSync(OUT_AC,75,0);
if(SENSOR_4==1)
{ leftturn; }
else if(SENSOR_1==1)
{ rightturn; }
}
}

2つのタッチセンサーを手に持って、右を押すと右に、左を押すと左にまわり、両方を離すと直進する。

これだけだが、できてみると結構おもしろい。


これが10分で入力して走らせられるのだから、生徒たちも結構慣れてきたと思う。

USBポートの破損 [Mindstorm]

使えば壊れるのはわかりきっているので、壊れた!生徒の使い方が悪い!などと騒ぐ気はない。生徒たちはNXTのユニットを投げたわけでもなく普通に取り扱っていた。
130125_131008.JPG
しかし、その結果がこれだ。USBのポートの中央にあるプラスチックの爪が折れている。取り扱いに慣れてきて、ケーブルの抜き差しが乱暴になったのだろうか。一度、全体に注意をする必要はありそうだ。

これに関してはパーツを交換するしかないだろう。修理にだすことにする。これで幾らの請求が来ることやら。

金額も痛いが、修理が終わるまでの期間が痛い。

やはり、2セットくらい余分にあるとうれしい。
今は無理だ。

NXC センサー値関連のデバッグ [Mindstorm]

NXCでセンサー値を読み取りながらプログラムを制御しようとするとき、思うように動かないことがある。単純な値の勘違いから、照明等の環境の違いによるセンサー値と閾値との関係が変化したことによる場合もある。

こんな場合は、センサー値を表示させてしまうとよい。

TextOut(0,LCD_LINE1,"TOUCH=");
NumOut(60,LCD_LINE1,SENSOR_1);
NumOut(90,LCD_LINE1,i);

これは、i の値による分岐を確かめている最中のコードだが、このようなコードを追加してチェックすると良い。

これで正常に動作したら、//でコメントアウトして動作を確かめ、その後に行を削除してしまえばよい。これで余計なコードが残らないで済む。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。