このページは金沢工業大学大学院機械工学専攻ロボット知能工学特論のサポートページです。第10週はファイナルプロジェクトで使用するワールドCityでロボットカーを動かす簡単なプログラム演習を行います.
なお,ファイナルプロジェクトでは上図に示すワールドでロボットカーにMCLを実装します.
レファレンス
ワールドの作成
- 次のWebots作業用ディレクトリを作成する.
- C:\ユーザー\ユーザ名\webots
- Webotsを起動する.
- Cityワールドを開く
- [ファイル]→[Open Sample World…]→[vehicles]→[city.wbt]
- ワールドを開くとロボットカーが走り出すので,[Pause]ボタンをクリックして,[Reset Simulation]ボタンをクリックして,ロボットをスタート地点に戻す.
- ワールドをrobot_car.wbtという名前で保存する.
- [ファイル]→[ワールドファイルを名前を付けて保存する…]
- \webots\robot_car\world\robot_car.wbtという名前で保存する.
- [ファイル]→[ワールドファイルを名前を付けて保存する…]
コントローラの作成
- [ウィザード]→[新規ロボットのコントローラ…]から以下を選択する.
- 言語選択:Python
- コントローラの選択:robot_car
- シミュレーション窓の右横にエディタが開き,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]の表示
- 上のソースコードを説明します.説明をコメントとして記入しているので,ほとんど説明は不要かと思います.これは直進するだけのプログラムです.12,13行目でコメントアウトしている部分は,ステアリンク角度をcos関数で変化させています.driver.getTime()はシミュレーションがスタートしてからの経過時間[s]です.
コントローラの設定
- シミュレーション窓の左欄からBmwX5→controller”autonomouos_vehecle”をクリックする.
- Select controllerから上で作成したrobot_carを選択して保存する.
実 行
- Reset Simulationボタン→Runボタン
- トップ図のようにロボットが直進して,ターミナルに経過時間が表示される.
ハンズオン
- リファレンスを読んで,Webotsの自動運転用のシミュレーションソフトウェアの概要やAPIを理解しよう.
- サンプルコード12,13行目のコメントを外して,ロボットカーを走らせてみよう.
- サンプルコードのAPIだけを使って,ロボットカーをできるだけ遠くまで走らせてみよう.
終わり
コメント