Webots講座3:自動運転シミュレータ (Python)

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]ボタンを再度クリックしてみてください.

ハンズオン

  1. リファレンスを読んで,Webotsの自動運転用のシミュレーションソフトウェアの概要やAPIを理解しよう.
  2. サンプルコード12,13行目のコメントを外して,ロボットカーを走らせてみよう.
  3. サンプルコードのAPIだけを使って,ロボットカーをできるだけ遠くまで走らせてみよう.

終わり

 

コメント

タイトルとURLをコピーしました