webots tips 7cm まで。...2020 年6 月1 日 情報テクノロジー実験Ⅰ...
TRANSCRIPT
2020 年 6 月 1 日
情報テクノロジー実験Ⅰ メカトロニクス
Webots Tips
山口博明
<赤外線近接センサ>
シミュレータでは、物体の色に R 成分がないと反応しない。
測定範囲はおよそ 7cm まで。
センサ値と距離の関係は比例の関係ではない。my_controller2_3 を用いてセンサ値と距離の関係を
調べて下さい。
<カメラ>
実機では、カメラのオートバランス機能により、一面単色になるとグレーになる。
そのため、複数の色が画面に映るようにする必要がある。
実機のカメラは、シミュレータのように色が鮮明に写らない。そのため、実機は実機で色判別の閾値
の調整が必要。
色を調べるには:
スナップショットでシミュレーション画像を保存し、それをペイントなどで開く。それから、スポイ
トツールで調べたい色を選択し、色の編集を開いて RGB 値を確認する。
第2回テキスト 32 ページに記載の最初の発展課題を実装し、任意の座標の色をコンソールウィンド
ウに表示する。
カメラを下に向けてライントレースができる。精密機器のため、ロボットのカメラを下に向ける場合
は教員に行ってもらう。Webots でもカメラの向きを変更できる。
(1)File→Open World→e-puck_line.wbt を開く。
(2)エクスプローラ→ドキュメント→my_project→worlds→textures を開く。
(3)”floor”のコピーを作成する。その後、ペイントで”floor”を書き換える。
(4)Webots 上で Reload する。
(5)Webots 上で”RectangleArena”をエクスポートする。エクスポートする時のファイル名は、例え
ば、”RectangleArena_line.wbo”とする。
(6)Webots 上で”File”→”Open World”→”my_e-puck04.wbt”を開く。その後、”RectangleArena.wbo”を
削除した上で、”RectangleArena_line.wbo”をインポートする。
(7)カメラの向きについては e-puck の proto ファイルのパラメータを調整する。
“Robot”→”children”→”DEF EPUCK_CAMERA camera”→”rotation”を開く。
x軸回りで、例えば、-45 度、つまり、-0.785rad 回転させる。
<キーボード>
キーボードを使用するためには、Run の後に、シミュレーションウィンドウをクリックしてアクテ
ィブにする。そうしないとキーボード入力を受け付けない。
<通信途絶>
キャリブレーション後に Bluetooth が通信途絶する場合は、バッテリが少ないか、e-puck のバッテ
リの接触不良の場合が多い。
「バッテリを入れ直す」、「電源を OFF-ON する」を行う。
あるいは、Bluetooth デバイスの相性の場合もある。パソコン搭載の Bluetooth を使用している場合
は、貸し出している Bluetooth アダプタを試すなどして解決する。
<Course Power 上で配付した参考資料>
紙コップは.wbt ファイルのモデルがある(第 4 回を参照、質量などは設定していない)
Webots 上で移動する物体が必要なとき:
第4回で作成した e-puck_only_new.wbo をインポートし、これに所望の形状をした Solid オブジェ
クトを取り付ける。また、所望の動きをするように別途 controller を作成する。
シミュレーション中にオブジェクトの translation を変更して、移動させることも可能だが、その場
合は、シミュレーションの完成度の評価に加点しない。
使用可能なヘッダファイルについて:
"C:¥Program Files¥Webots¥msys64¥usr¥include"以下にあるヘッダファイルはインクルード可能。
自作のヘッダファイルについて:
自作のヘッダファイルをインクルードする際、パスを指定しない場合は.c ファイルと同じフォルダ
を参照する。
自作のヘッダファイルに加えて、自作のソースファイル(分割)を使用する場合は、第4回テキスト
の 4-6 節に記載の作業が必要。
ファイル入出力について:
fopen()する際、パスを指定しない場合は.c ファイルと同じフォルダのファイルを開く。
参考:my_controller1_1_fileIO.c,input.txt
<Webots 特有のプログラミングにおける非推奨操作と対応>
コントローラの動作とシミュレーションウィンドウのツールバーは密接に関わっている。そのため、例
えビルドできたとしても、誤作動を起こすコーディングが存在する。
一定時間待機させるため、do{~}while()の中で無限ループ while(1)や sleep()を組み込む。
(対処方法)時刻の取得と時刻に応じた条件分岐を用いる。
異なった動作をさせるため、do{~}while()の中や、前後に do{~}while()を追加する。
(対処方法)条件分岐のみで実現できるよう、工夫する。
ヒント:my_controller3_2 では mode と云う変数を使って、直進動作とその場旋回動作を切り替えて
いる。
動作を強制終了させるため、}while(wb_robot_step(TIME_STEP)!=-1);に終了条件を追加する。
(対処方法)車輪の角速度を 0 に設定することで疑似的に終了状態とする。