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

Webots講座の3回目です.今回は,Webotsの自動運転シミュレータを使ってBMW X5をPython言語により直進させるところまでを学びます.BMWのオーナーになった気分でやっていきましょう!

レファレンス


ユーザインタフェース

  • まず,上図に示すWebotsのユーザインタフェース(GUI)を説明します.最上部のメニューと次の4つのウインドウで構成されています.これからの説明で使いますので覚えておきましょう.
    • シーンツリー:現在のワールドを構成しているものを階層状に表示
    • 3Dウインドウ:3次元シミュレーションの表示と操作
    • テキストエディタ:ソースコードの編集とビルド.
    • コンソール:Webotsのログ表示.ビルドの出力とコントローラプログラムの出力.

プロジェクトの作成

  •  まず,次のWebots作業用ディレクトリを作成する.
    • C:\ユーザー\ユーザ名\webots
  • Webotsを起動する.
  • Webots講座2で実施した「新規プロジェクトの作成」の方法でrobot_carプロジェクトを作成する.ディレクトリの選択で\webotsはあるがその下の\robot_carはないので,キーボードから次のように入力する.ユーザー,ユーザ名は自分の環境のものに変える.
    •  ディレクトリの選択:C:\ユーザー\ユーザ名\webots\robot_car
    • World settings: ワールド名をrobot_car.wbtに変更して,他は変えずに「次へ」をクリックする.
    • [結果]窓になるので[完了]をクリックする.

ワールドの作成

  • 既存のワールドをインポートする機能はないようなので,既存のワールドcity.wbtを開いてから上で作成したrobot_car.wbtに上書き保存する方法を使う.
  • メニューからcity.wbtワールドを開く
    • [ファイル]→[Open Sample World…]→[vehicles]→[city.wbt]

  • ワールドを開くとロボットカーが走り出すので,[Pause]ボタンをクリックしてから,[Reset]ボタンをクリックする.シミュレーションがリセットされて,ロボットカーがスタート地点に戻る.
  • 次の要領でワールドをrobot_car.wbtという名前で保存する
    • [ファイル]→[ワールドファイルを名前を付けて保存する…]
      • C:\ユーザー\ユーザ名\webots\robot_car\worlds\robot_car.wbt

コントローラの作成

  • Webots講座2で実施した新規ロボットのコントローラ作成と同じ要領でコントローラを作成する.
  • メニューの [ファイル]→[新規ロボットのコントローラ…]から以下を選択する.
    • 言語選択:Python
    • コントローラの選択:robot_car
    • なお,ここで次のような[質問]窓が開く場合は,[OK]をクリックして必要なファイルを別の場所へ移動する.
    • [プロジェクトのリロケーション]窓が開くので,ターゲットディレクトリを以下のように変更して[コピー]をクリックする.コピーが終わったら[新規コントローラの作成]窓が開くので,言語選択:pythonとコントローラの選択:robot_carを設定する.
      • C:\ユーザー\ユーザー名\webots\vehicles
  • 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″vehicle”→controller”autonomouos_vehecle”をクリックする.
  • Select controllerから上で作成した”robot_car”を[選択]して,メニューの[ファイル]から[ワールドファイルを保存]する.

 

実 行

  • Pythonの場合はビルドする必要がないので,[Reset]ボタンをクリックしてシミュレーションをリセットしてから,[Run]ボタンをクリックして実行します.なお,[Run]ボタンはクリックされると[Pause]ボタンに変わります.シミュレーションを一時停止したいときは[Pause]ボタンを教えてください.
  • ロボットが直進して,ターミナルに経過時間が表示されれば成功.成功するとロボットカーが直進し,コンソールウインドウにシミュレーションの経過時間が表示されます.動かない場合は,[Reset]ボタンをクリックしてから,[Run]ボタンを再度クリックしてみてください.

ハンズオン

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

終わり

 

コメント

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