学校が忙しくて、なかなかこっちの時間を取れませんでした....
そして2015年の中国大会のプログラムやWROで使用したライントレースの記事ではありません... (この辺は基礎の基礎になるのでちゃんと書きたいです)
その他、質問の中に多かったのが「何を使えばいいのか?」にまつわることでした。
なので、この記事ではRCJ、WROで使う色々なものの比較をしていきます。
具体的には、プログラム言語、NXTとEV3、そしてライトセンサーについてです。
(書く前に言いますが、僕はプログラムや回路に関してはあくまでも素人です... 理由付けのようなものがあっても僕の感想程度と思ってください....笑)
3シリーズにするつもりで全て近日公開します(って言いながらできなかった時はすみません)
プログラム言語:
まず、僕が使ったことあるプログラムで多くのNXT/EV3使用者が使っているのが、Robolab、EV3-G、NXC、RobotC です。
特にNXTとRobolabに関しては長いこと使っていたので詳しく理解しています(←理解っていうかチュートリアルに書いている程度の使い方は分かる)
まずはブロックダイアグラムでプログラムしていく Robolab とEV3-Gについて解説します。
Robolabブロックダイアグラムでプログラムを組んでいくものとしては古いわりに非常にいいと思います。っていうか一番いいと思う。
なにがいいかというと、Cに一番近く、楽に細かい設定ができることです。
Robolab後のプログラムNXT-GやEV3-Gプログラムが簡潔化されていて細かい設定ができません。
一つの例はモーターのコマンドです。
たとえばBモーター、Cモーターを1秒間正回転 したかった時、Robolabではそのまま3つのコマンドを貼り付けます。(B回転、C回転、ウェイト1秒)
しかし、EV3-Gではそれが一つのブロックになっています。
う~ん、書きながら考えると初心者には優しい気がすることもするのですが、僕としては(特にCをやったことある人からすれば)、Robolabのほうがいいです。
他にもいかにLEGO社がEV3-Gを初心者向けに作ったのかがわかる機能が多くあります。逆をいうと、いろいろな場面で使いやすい感じもしますが。
代表的なものとしてモーターのコマンドが純粋なモーター回転ではないことです。
例えば1秒まっすぐでプログラムを試すと、とまる直前少し原則します。これは回転やステアリングでも同じです。
まっすぐ進むとかいうことに関してはモーター同期がかかってやりやすい面もあるのですが、スピーディーなWROとかではそういう設定も自分で入れるか入れないか決めたいところです。(実際、2013のWROを練習しているとき、相方がNXT-Gを使ってプログラムをしましたが、同じハードを使っているのにもかかわらず、そういう同期や謎の組み込みPID制御が原因で調整に苦しめられました)
あとはブロックの形です。
大きい!!
大きすぎます。大きいわりに自由度がないので(すべてくっついてる)元々あるプログラムに新しいものを組み込むっていう意味では非常にやりにくい。時間がないサプライズ対応とかは特に。(あとは一つ一つのブロックのグラフィックが無意味に良いためすぐにプログラムが重くなります。)
なにかEV3-Gの文句を言ってる感じになりましたが、言いたいことは「EV3-Gはガチでロボット競技やってる人にとっては向いてない」ということです。もちろんRobolabも同じですが、EV3-Gよりは自由度があります。
個人的に、もしEV3がRobolabで動かせたなら絶対そうしてました。EV3-Gを使ったのはWRO2015の競技ではモーターが絶対4個必要で、EV3をつかわざるをえなかったから。(ちなみにLabViewは全く別物です。Robolabの進化版みたいに書かれてますが、コンセプトがだいぶ違います。断然RobolabとEV3-Gのほうが似てます。)
WROはC禁止なのでしょうがないですが、ある程度プログラムに慣れてきたらEV3-G、RobolabからCに移行することを強くお勧めします。やっぱりブロックダイアグラムでは限りがあります。
と、いうことで次はC言語のプログラミングソフトウェアを紹介します。
Cは難しいイメージがありますが(難しいですが笑)、NXCやRobotCは簡単です(普通にロボカップで使う分には)
僕が実際にCを使って大会に出場したのは2013年のロボカップが最初でした。(NXC)
さっきも言いましたが、RobolabはNXT-GとかよりもCに似ているのでNXCで初めてプログラムを書いてみてると「あ、これはRobolabのこのコマンドと同じことか!」と思うことが多かったです。
この記事はCのチュートリアルではないので自らの体験はこのへんで笑
あまりこの記事を書いている意味がなくなるかもしれませんが、NXCとRobotC、あまり違いはないです
ではなぜNXCを使っていたの?と聞かれると、「タダだったことと、最初に使ったものだから」と答えるほかありません。
でも、どっちも経験してみてわかったことはRobotCのほうがクオリティーが高いことです。
主な違いは
ダウンロードスピード、サポート、バグ出し、二次元配列が使える
です。特にダウンロードスピードは速いほうが断然いいので笑 サポートに関してもNXCよりいろいろなセンサーに対応しているし、NXCよりも的確なバグ検知ができます。レスキューメイズの選手からしたら二次元配列はうれしいことでしょう(NXCが二次元配列つかえなかったかどうかは正確には忘れました。でも使えなかったような気がします)。
他、プログラムの文法的な部分に関してはあまり変わりません。多少文が変わりますが、そんなのは覚えたらすぐです。
デメリットはRobotCはお金がかかるところでしょうか?($5000/年とかだったような?)
僕も明らかにメリットがあるから使ってみました。具体的には2015年のロボカップ全国後から世界大会の40日くらい前まで。
ただ、なぜか僕が愛用している8角形のジャイロが思うように使えませんでした。なぜかうまくいきません。Mセンサーも試したのですが、MセンサーはI2Cでありながら、ほかのI2Cと共存できないっぽいのでそれも没。
結局世界大会はNXCで挑むことになりました。
と、いうことで僕のプログラム言語の関するコメントでした。
次回はNXTとEV3の比較を行います。(非常に一方的な比較になると思いますが苦笑)
そして2015年の中国大会のプログラムやWROで使用したライントレースの記事ではありません... (この辺は基礎の基礎になるのでちゃんと書きたいです)
その他、質問の中に多かったのが「何を使えばいいのか?」にまつわることでした。
なので、この記事ではRCJ、WROで使う色々なものの比較をしていきます。
具体的には、プログラム言語、NXTとEV3、そしてライトセンサーについてです。
(書く前に言いますが、僕はプログラムや回路に関してはあくまでも素人です... 理由付けのようなものがあっても僕の感想程度と思ってください....笑)
3シリーズにするつもりで全て近日公開します
プログラム言語:
まず、僕が使ったことあるプログラムで多くのNXT/EV3使用者が使っているのが、Robolab、EV3-G、NXC、RobotC です。
特にNXTとRobolabに関しては長いこと使っていたので詳しく理解しています(←理解っていうかチュートリアルに書いている程度の使い方は分かる)
まずはブロックダイアグラムでプログラムしていく Robolab とEV3-Gについて解説します。
Robolabブロックダイアグラムでプログラムを組んでいくものとしては古いわりに非常にいいと思います。っていうか一番いいと思う。
なにがいいかというと、Cに一番近く、楽に細かい設定ができることです。
Robolab後のプログラムNXT-GやEV3-Gプログラムが簡潔化されていて細かい設定ができません。
一つの例はモーターのコマンドです。
たとえばBモーター、Cモーターを1秒間正回転 したかった時、Robolabではそのまま3つのコマンドを貼り付けます。(B回転、C回転、ウェイト1秒)
しかし、EV3-Gではそれが一つのブロックになっています。
う~ん、書きながら考えると初心者には優しい気がすることもするのですが、僕としては(特にCをやったことある人からすれば)、Robolabのほうがいいです。
他にもいかにLEGO社がEV3-Gを初心者向けに作ったのかがわかる機能が多くあります。逆をいうと、いろいろな場面で使いやすい感じもしますが。
代表的なものとしてモーターのコマンドが純粋なモーター回転ではないことです。
例えば1秒まっすぐでプログラムを試すと、とまる直前少し原則します。これは回転やステアリングでも同じです。
まっすぐ進むとかいうことに関してはモーター同期がかかってやりやすい面もあるのですが、スピーディーなWROとかではそういう設定も自分で入れるか入れないか決めたいところです。(実際、2013のWROを練習しているとき、相方がNXT-Gを使ってプログラムをしましたが、同じハードを使っているのにもかかわらず、そういう同期や謎の組み込みPID制御が原因で調整に苦しめられました)
あとはブロックの形です。
大きい!!
大きすぎます。大きいわりに自由度がないので(すべてくっついてる)元々あるプログラムに新しいものを組み込むっていう意味では非常にやりにくい。時間がないサプライズ対応とかは特に。(あとは一つ一つのブロックのグラフィックが無意味に良いためすぐにプログラムが重くなります。)
なにかEV3-Gの文句を言ってる感じになりましたが、言いたいことは「EV3-Gはガチでロボット競技やってる人にとっては向いてない」ということです。もちろんRobolabも同じですが、EV3-Gよりは自由度があります。
個人的に、もしEV3がRobolabで動かせたなら絶対そうしてました。EV3-Gを使ったのはWRO2015の競技ではモーターが絶対4個必要で、EV3をつかわざるをえなかったから。(ちなみにLabViewは全く別物です。Robolabの進化版みたいに書かれてますが、コンセプトがだいぶ違います。断然RobolabとEV3-Gのほうが似てます。)
WROはC禁止なのでしょうがないですが、ある程度プログラムに慣れてきたらEV3-G、RobolabからCに移行することを強くお勧めします。やっぱりブロックダイアグラムでは限りがあります。
と、いうことで次はC言語のプログラミングソフトウェアを紹介します。
Cは難しいイメージがありますが(難しいですが笑)、NXCやRobotCは簡単です(普通にロボカップで使う分には)
僕が実際にCを使って大会に出場したのは2013年のロボカップが最初でした。(NXC)
さっきも言いましたが、RobolabはNXT-GとかよりもCに似ているのでNXCで初めてプログラムを書いてみてると「あ、これはRobolabのこのコマンドと同じことか!」と思うことが多かったです。
この記事はCのチュートリアルではないので自らの体験はこのへんで笑
あまりこの記事を書いている意味がなくなるかもしれませんが、NXCとRobotC、あまり違いはないです
ではなぜNXCを使っていたの?と聞かれると、「タダだったことと、最初に使ったものだから」と答えるほかありません。
でも、どっちも経験してみてわかったことはRobotCのほうがクオリティーが高いことです。
主な違いは
ダウンロードスピード、サポート、バグ出し、二次元配列が使える
です。特にダウンロードスピードは速いほうが断然いいので笑 サポートに関してもNXCよりいろいろなセンサーに対応しているし、NXCよりも的確なバグ検知ができます。レスキューメイズの選手からしたら二次元配列はうれしいことでしょう(NXCが二次元配列つかえなかったかどうかは正確には忘れました。でも使えなかったような気がします)。
他、プログラムの文法的な部分に関してはあまり変わりません。多少文が変わりますが、そんなのは覚えたらすぐです。
デメリットはRobotCはお金がかかるところでしょうか?($5000/年とかだったような?)
僕も明らかにメリットがあるから使ってみました。具体的には2015年のロボカップ全国後から世界大会の40日くらい前まで。
ただ、なぜか僕が愛用している8角形のジャイロが思うように使えませんでした。なぜかうまくいきません。Mセンサーも試したのですが、MセンサーはI2Cでありながら、ほかのI2Cと共存できないっぽいのでそれも没。
結局世界大会はNXCで挑むことになりました。
と、いうことで僕のプログラム言語の関するコメントでした。
次回はNXTとEV3の比較を行います。(非常に一方的な比較になると思いますが苦笑)
確かにRobot CとNXCはそっくりですが、Enchanting(ScratchでJavaコードを書き出せるもの)のようなGrafical Robot Cが使えるのもいいですね。
RoboCup Jr北信越大会そしてできたら全国大会はEV3-Gを使いますが、世界大会に出られるようになったらRobot Cを使いたい(希望)と思っています。
また分からないことがでたらいろいろ教えてください。