ETロボコンに参加している高校生チーム「科学の妖精」が、ETロボコン2013の時に作ったソースコードの一部を公開してくれました。
実際にETロボコンで使ったソースコードの公開は、過去にほぼ例のないことだと思います。これからETロボコンに参加しようと考えているチームにとっては、大いに参考になると思いますし、既に参加しているチームにとっても、高校生チームの実力を知ることは良い刺激になると思います。ぜひご覧ください。
尚、公開するソースコードは、C++コードとしてまだまだ未熟なところがあります。ですが、「もっと高校生チームの参加を増やしたい」という「科学の妖精」の好意と熱意のもと公開していますので、多少の粗には目をつむり、温かい目で見ていただければ幸いです。そして、アドバイスなどあれば、ぜひフィードバックしてあげてください。(オブジェクトの広場編集部)
ETロボコン ソースコード公開
はじめに
聖望学園高等学校科学部に所属している私たちは、ロボットを作ったりプログラミングをしたり、時には植物や生き物を育てたりしています。そんなメンバーで構成されているチーム「科学の妖精」は、ET ロボコン北関東大会に 2011 年から 3 年連続で総合優勝しチャンピオンシップ大会に出場しました。そして、ETロボコン 2013 チャンピオンシップ大会では総合 15 位(27 チーム中)の結果を出すことができました。
今回私達が作成したプログラムを公開するのに至った背景は、ET ロボコンに参加しようと考えている高校生に役に立つ情報を提供することによって、高校生チームがどんどん増えてくれればと思ったからです。少しでもその手助けになればうれしいです。
尚、今回公開する ソースコードは、ET ロボコン 2013 のベーシックステージ(ライントレースのみ行うステージ)で使ったものをもとにしています。
ライセンス
当ソースコードは、MIT ライセンスで公開しています。MIT ライセンスについては、SourceForge.JP の下記ページを参照してください。
https://sourceforge.jp/projects/opensource/wiki/licenses%2FMIT_license
ダウンロード
ETロボコン 2013 科学の妖精 ソースコード ET2013_KagakuNoYousei_OpenSource.zip(24KB)
問い合わせ先
質問やアドバイスなどあれば、連絡をください。
科学の妖精 メールアドレス: infoアトseiboukagakubu.sakura.ne.jp (メールを送信される場合には「アト」は@に置き換えてください)
ソースコードの説明
プログラミング言語は?
倒立振子制御パラメータ(RunMethod/balancer_param.c)は C言語、それ以外は C++ です。
何ができる?
ETロボコンのレプリカコースやサンプルコースの左エッジ(ラインの左端)を、ETロボコン 2011 ~ 2014 の「二輪倒立振子ロボット」で、下記の順にライントレースさせることができます。
- 総走行距離(スタートからの走行距離)が 100cm になるまで、ライントレースをスピード 20 で行う
- 総走行距離(スタートからの走行距離)が 200cm になるまで、ライントレースをスピード 30 で行う
- 総走行距離(スタートからの走行距離)が 300cm になるまで、ライントレースをスピード 40 で行う
総走行距離やスピードを変えたい場合は、Competition.cpp の下記の値を変更してください。
- AllDistanceCondition コンストラクタの第一引数。総走行距離(スタートからの走行距離)を表す。176~178行目。
- LineTraceMethod コンストラクタの第五引数。ライントレースのスピードを表す。181~183行目。
//INコースのベーシックの終了条件を設定 in01 = new AllDistanceCondition(100,&leftMotor,&rightMotor); in02 = new AllDistanceCondition(200,&leftMotor,&rightMotor); in03 = new AllDistanceCondition(300,&leftMotor,&rightMotor); //INコースのベーシックの走行方法を設定 run_straight = new LineTraceMethod(calibration,ver,pid_light,20,50,&lightSensor,&leftMotor,&rightMotor); run_slope_up = new LineTraceMethod(calibration,ver,pid_light,30,50,&lightSensor,&leftMotor,&rightMotor); run_slope_down = new LineTraceMethod(calibration,ver,pid_light,40,50,&lightSensor,&leftMotor,&rightMotor);
どんな設計?
下記のクラス図を参照してください。クリックすると拡大します。
API 関連のクラスは省略しています。また、パッケージ毎にクラスを色分けしています。
動かし方
ソースコードは実際に動かすことができます。興味があれば、ぜひ動かしてみてください。
動作条件
- Windows PC を使用
- NXT BIOS を使用
- ETロボコン 2011 ~ 2014 の「二輪倒立振子ロボット」を使用
- ETロボコンのレプリカコース、もしくは、サンプルコースを使用
開発環境の準備
下記のページを参考に、PC と NXT に必要なソフトウェアを入れてください。
https://lejos-osek.sourceforge.net/jp/installation_nb.htm
走行体の組み立て
ETロボコン 2011 ~ 2014(ビギナーコース)で配布された「二輪倒立振子ロボット」の組み立て手順書に従って組み立ててください。特に、モジュールの接続ポートには気を付けてください。
- ポートA : 尻尾モータ
- ポートB : 右モータ
- ポートC : 左モータ
- ポート1 : ジャイロセンサ
- ポート2 : 超音波センサ
- ポート3 : 光センサ
- ポート4 : タッチセンサ
ビルド
ダウンロードしたソースコードをビルドしてください。
- ソースコードをダウンロードし、パスにスペースを含まない任意の場所に解凍します。
例 > C:/ET2013_KagakuNoYousei_OpenSource - Makefile を開き、Cygwin をインストールした場所に合わせて、NXTOSEK_ROOT と TOPPERS_OSEK_ROOT_SG を変更します。C:/Cygwin にインストールした場合は、変更不要です。
# nxtOSEKルートディレクトリ NXTOSEK_ROOT = /cygdrive/c/cygwin/nxtOSEK # toppers_osekディレクトリ ※DOS形式 TOPPERS_OSEK_ROOT_SG = C:/cygwin/nxtOSEK/toppers_osek
- Cygwin を起動し、cd コマンドを使って、ソースコードを解凍したディレクトリに移動します。
$ cd C:/ET2013_KagakuNoYousei_OpenSource
- make all を実行し、ビルドします。バイナリイメージができれば OK です。
$ make all ...(省略)... Generating binary image file: et2013_rom.bin ←これが表示されればOK /cygdrive/c/ET2013_KagakunoYousei_OpenSource $
走行体へアップロード
NXT を READY 状態(プログラムアップロード待ち状態)にし、プログラムをアップロードしてください。
- NXT の電源を入れます。
- オレンジボタンと左ボタンを同時に押します。その後、NXTの電源が落ちます。
- 再度、NXT の電源を入れます。NXT が READY 状態(プログラムアップロード待ち状態)になることを確認します。
- PC と NXT を USB ケーブルで接続します。
- Cygwin を起動し、cd コマンドを使って、ソースコードを解凍したディレクトリに移動します。
$ cd C:/ET2013_KagakuNoYousei_OpenSource
- sh ./appflash.sh を実行し、プログラムを NXT へアップロードします。"Successful completion of uploading" と最後に表示されれば、成功です。
$ sh ./appflash.sh
- NXT が FINISHED 状態になったことを確認し、NXT の電源を落とします。
走行スタート
黒ライン、白ライン、灰色マーカの光センサ値をキャリブレーションし、走行をスタートしてください。
- NXT の電源を入れます。
- NXT の右ボタンを押し、プログラムを実行します。
- ディスプレイに「Connect by BT or press RUN button」と表示されるので、右ボタンを押します。
- 走行体の光センサを黒ライン上にくるように置き、タッチセンサを押します(音が 1 回鳴ります)。この時、走行体とコース面は垂直にします。
- 同様に、走行体の光センサを白ライン上にくるように置き、タッチセンサを押します(音が 1 回鳴ります)。
- 同様に、走行体の光センサを灰色マーカ上にくるように置き、タッチセンサを押します(音が 1 回鳴ります)。
- タッチセンサを押し、尻尾が下がるのを確認したら、黒ラインの左エッジに走行体を設置します。
- タッチセンサを押し、走行準備モードにします。
- タッチセンサを押し、走行をスタートします。
うまく倒立しない場合は
走行体がうまく倒立せず、ブレたり、倒れたりする場合は、ジャイロセンサのオフセット値を変更してみてください。
- Cygwin を起動し、cd コマンドを使って、nxtOSEK/samples_c/helloworld に移動します。
例 > cd C:/Cygwin/nxtOSEK/samples_c/helloworld - 上の記述を参考に、「ビルド」と「走行体へアップロード」を行います。
- NXT の電源を入れます。
- NXT の右ボタンを押し、プログラムを実行します。
- 走行体を寝かせ、完全に停止させます。
- この時のジャイロセンサの値(=オフセット値)を確認します。
- RunMethod/Vertical.cpp を開き、36行目のジャイロオフセット値を変更します。
float GYRO_OFFSET=611; //ジャイロオフセット値 signed char forward; //前後進命令