Webots講座の3回目です.demura.netのサーバーを引っ越していたので,少し連載が遅くなりました.今まで少しアクセスが集中すると503エラーが多発して,ご不便をおかけしていたと思います.新サーバーに引っ越したので状況が改善されると思います.引き続き,demura.netをよろしくお願いします。
さて,今回は,Webotsの自動運転シミュレータを使ってBMW X5をPython言語により直進させるところまでを学びます.BMWのオーナーになった気分でやっていきましょう!
レファレンス
ユーザインタフェース
- 上図に示すWebotsのユーザインタフェース(GUI)は最上部のメニューと次の4つのウインドウで構成されています.これからの説明で使いますので覚えておきましょう.
- シーンツリー:現在のワールドを構成しているものを階層状に表示
- 3Dウインドウ:3次元シミュレーションの表示と操作
- テキストエディタ:ソースコードの編集とビルド.
- コンソール:コントローラプログラムとビルドの出力
プロジェクトの作成
- まず,次のWebots作業用ディレクトリを作成する.
- C:\ユーザー\ユーザ名\webots
- Webotsを起動する.
- Webots講座2で実施した新規プロジェクトする方法でrobot_carプロジェクトを作成する.
- ディレクトリの選択:C:\ユーザー\ユーザ名\webots\robot_car
- World settings: 後で上書きするのでデフォルトで良い.
ワールドの作成
- 既存のワールドをインポートする機能はないようなので,既存のワールドcity.wbtを開いてから上で作成したrobot_car.wbtに上書き保存する方法を使う.
- メニューからcity.wbtワールドを開く
- [ファイル]→[Open Sample World…]→[vehicles]→[city.wbt]
- ワールドを開くとロボットカーが走り出すので,[Pause]ボタンをクリックしてから,[Reset]ボタンをクリックする.シミュレーションがリセットされて,ロボットカーがスタート地点に戻る.
- ワールドをrobot_car.wbtという名前で保存する.
- [ファイル]→[ワールドファイルを名前を付けて保存する…]
- \webots\robot_car\world\robot_car.wbt
- [ファイル]→[ワールドファイルを名前を付けて保存する…]
コントローラの作成
- Webots講座2で実施した新規ロボットのコントローラ作成と同じ要領です.
- メニューの [ウィザード]→[新規ロボットのコントローラ…]から以下を選択する.
- 言語選択:Python
- コントローラの選択:robot_car
- 3Dウインドウの右横にテキストエディタが開き,robot_car.pyが表示される.雛形コードの中身を全部消して,次のサンプルコードと置き換え保存する.
import math # mathモジュールのインポート from vehicle import Driver # vehcleモジュールからDriverクラスのインポート driver = Driver() # Driverクラスのインスタンスを生成 steer_angle = 0 # ステアリング角に0[°]を代入 speed = 20 # 速度に20[km/h]を代入 driver.setSteeringAngle(steer_angle) # ステアリング角度の設定 driver.setCruisingSpeed(speed) # 巡行速度の設定 while driver.step() != -1: # driver.step()はシミュレーションの1ステップを進めるAPI #angle = 0.3 * math.cos(driver.getTime()) #driver.setSteeringAngle(angle) print("time=%f" %driver.getTime()) # シミュレーション時間[s]の表示
- 上のソースコードを説明します.説明をコメントとして記入しているので,ほとんど説明は不要かと思います.これは直進するだけのプログラムです.11行目のdriver.step()でシミュレーションを1ステップ進めます.進める時間はワールドでデフォルト値(シーンツリーのWorldInfo→basicTimeStep)を使います.この例では10[ms]となっています.12,13行目でコメントアウトしている部分は,ステアリンク角度をcos関数で変化させています.driver.getTime()はシミュレーションがスタートしてからの経過時間[s]です.
コントローラの設定
- シーンツリーからBmwX5→controller”autonomouos_vehecle”をクリックする.
- Select controllerから上で作成した”robot_car”を選択して保存する.
実 行
- Pythonの場合はビルドする必要がないので,[Reset]ボタンをクリックしてシミュレーションをリセットしてから,[Run]ボタンをクリックして実行します.なお,[Run]ボタンはクリックされると[Pause]ボタンに変わります.シミュレーションを一時停止したいときは[Pause]ボタンを教えてください.
- ロボットが直進して,ターミナルに経過時間が表示されれば成功.成功するとロボットカーが直進し,コンソールウインドウにシミュレーションの経過時間が表示されます.動かない場合は,[Reset]ボタンをクリックしてから,[Run]ボタンを再度クリックしてみてください.
ハンズオン
- リファレンスを読んで,Webotsの自動運転用のシミュレーションソフトウェアの概要やAPIを理解しよう.
- サンプルコード12,13行目のコメントを外して,ロボットカーを走らせてみよう.
- サンプルコードのAPIだけを使って,ロボットカーをできるだけ遠くまで走らせてみよう.
終わり
コメント