Mindstorm EV3 最初にやろう。 [Mindstorm]
学校で最初のバージョンの EV3 を購入してから何年たっただろうか?
学校で購入すると、購入年の管理(経年劣化を測るため)とパーツの管理のために本体、すべてのモーター・センサーに「学校名」(大会で使用する際に他校のものと区別するため)「購入年」「キット番号」を書いたシールをテプラで作り貼り付けていた。さすがにケーブルに貼るのは EV3 になってからやめたが、10台も入ると1日では終わらない。しかも、テプラ貼り付けの曲がりや位置なんか気にするから、生徒には任せられない。コンピュータ室のすみっこで一人ちまちまと作業することになる。
昨年、自腹で購入したセットは、なんと、この部分用に「シール」が付属してきた。
学校もしくは塾などで複数台管理することを前提とした改善だと感じる。
おかげで、どのパーツをトレイのどの位置にいれるかも一目瞭然となる。
それにしても、この記事は raspberry Pi 上の Buster に標準でついてくるIMEで書いているが、ストレスも変換の違和感も全く感じない。数日前に入れ替わった学校の仕事用の Windows10 PCのIMEのほうがよっぽどひどい。
Buster おそるべし!
学校で購入すると、購入年の管理(経年劣化を測るため)とパーツの管理のために本体、すべてのモーター・センサーに「学校名」(大会で使用する際に他校のものと区別するため)「購入年」「キット番号」を書いたシールをテプラで作り貼り付けていた。さすがにケーブルに貼るのは EV3 になってからやめたが、10台も入ると1日では終わらない。しかも、テプラ貼り付けの曲がりや位置なんか気にするから、生徒には任せられない。コンピュータ室のすみっこで一人ちまちまと作業することになる。
昨年、自腹で購入したセットは、なんと、この部分用に「シール」が付属してきた。
学校もしくは塾などで複数台管理することを前提とした改善だと感じる。
おかげで、どのパーツをトレイのどの位置にいれるかも一目瞭然となる。
それにしても、この記事は raspberry Pi 上の Buster に標準でついてくるIMEで書いているが、ストレスも変換の違和感も全く感じない。数日前に入れ替わった学校の仕事用の Windows10 PCのIMEのほうがよっぽどひどい。
Buster おそるべし!
認識の不良対策 [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 ボタンから出るダイヤログからモーターを回してみれば良い。ここでうまくいけば接続は大丈夫だ。
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に上がったし。
ドライバのアップデートから入るのが適切かな。
電池の電圧?
ドライバ?
いくつも原因が考えられる。
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
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/
Caster Bot いつもつかっているやつ
http://www.nxtprograms.com/castor_bot/steps.html
NXT programs 様のNXT9797用ロボット製作マニュアル集
http://www.nxtprograms.com/projects1.html
Basic Car
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も効くらしい。
しばらくの間、良いおもちゃにしよう。
「俺がわかっていないと指導できない。」
「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 の方がモーター音がうるさい。回転数制御のための余計な不可がかかっているのかもしれない。
手元にある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 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;
}
}
いろいろチェック用のコードを入れて汚いコードだが、どうも中の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分で入力して走らせられるのだから、生徒たちも結構慣れてきたと思う。
#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のユニットを投げたわけでもなく普通に取り扱っていた。
しかし、その結果がこれだ。USBのポートの中央にあるプラスチックの爪が折れている。取り扱いに慣れてきて、ケーブルの抜き差しが乱暴になったのだろうか。一度、全体に注意をする必要はありそうだ。
これに関してはパーツを交換するしかないだろう。修理にだすことにする。これで幾らの請求が来ることやら。
金額も痛いが、修理が終わるまでの期間が痛い。
やはり、2セットくらい余分にあるとうれしい。
今は無理だ。
しかし、その結果がこれだ。USBのポートの中央にあるプラスチックの爪が折れている。取り扱いに慣れてきて、ケーブルの抜き差しが乱暴になったのだろうか。一度、全体に注意をする必要はありそうだ。
これに関してはパーツを交換するしかないだろう。修理にだすことにする。これで幾らの請求が来ることやら。
金額も痛いが、修理が終わるまでの期間が痛い。
やはり、2セットくらい余分にあるとうれしい。
今は無理だ。