このガイドは、システム同定から強化学習までの全実験に必要なソフトウェア環境を、Windows PC に構築するための手順を説明する。主な構成要素は Webots シミュレータと Anaconda (Python) である。
強化学習の実験 (第6回) で使用するロボットシミュレータ Webots をインストールする。
全ての実験で使用する Python スクリプトを実行するために、Anaconda または Miniconda を使用して Python 環境を管理する。(すでにインストール済みの場合はこのセクションをスキップし、セクション3に進むこと)
conda コマンドが使えるようになるため便利である。conda コマンドを使用するのが基本となる。conda コマンドが見つからない場合
conda コマンドを使用すること。conda が認識されない場合:
C:\Users\YourName\anaconda3\Scripts, C:\Users\YourName\anaconda3\Library\bin, C:\Users\YourName\anaconda3\condabin などが必要になるが、具体的なパスはインストール場所やバージョンにより異なる。)実験に必要なライブラリを他の Python プロジェクトと分離し、バージョンの衝突を防ぐために、専用の環境を作成することを強く推奨する。
control_lab という名前で Python 3.9 (推奨例) の環境を作成する:
conda create --name control_lab python=3.9
(作成を確認するプロンプトが出たら `y` を入力して Enter)
conda activate control_lab
(プロンプトの先頭に (control_lab) と表示されれば成功だ)
以降の Python パッケージのインストールは、必ずこの control_lab 環境がアクティブな状態で行うこと。
実験で使用するライブラリをインストールする。
control_lab 環境を有効化すること:
conda activate control_lab
conda install numpy scipy matplotlib
(インストールを確認されたら `y` を入力)
pip install gymnasium stable-baselines3 torch torchvision torchaudio
(stable-baselines3 本体と、PyTorch 等の関連ライブラリをインストールする。もし PyTorch のインストールで問題が出る場合は、PyTorch 公式サイト の指示に従って別途インストールを試みること。)
control_lab 環境がアクティブなことを確認する ((control_lab) が先頭に表示)。python --versionconda list
(リストに表示され、バージョン情報が出ていれば OK。hidapi は別セクションでインストールする場合あり)
python と入力)、ライブラリが import できるか試す:
import numpy as np
import matplotlib.pyplot as plt
import scipy
import gymnasium as gym
import stable_baselines3
import torch
exit()
(エラーなくプロンプトに戻れば成功)
【重要】この設定を行わないと、Webots は正しい Python 環境(control_lab)を見つけられず、コントローラースクリプトがライブラリ不足でエラーになる。
control_lab 環境の Python パスを確認する
conda activate control_lab
(プロンプト先頭に (control_lab) が表示されることを確認)
where python
(もし複数のパスが表示されたら、通常は anaconda3\envs\control_lab 内のパスが対象)
または、より確実に実行ファイルパスを得るには:
python -c "import sys; print(sys.executable)"
C:\Users\YourName\anaconda3\envs\control_lab\python.exe (Windows 例)
Tools (ツール) -> Preferences... (設定...) を選択する。General (一般) タブを選択する。Python command (Python コマンド) という名前の入力フィールドを探す。python.exe) まで含まれていることを確認する。OK または Apply ボタンをクリックして設定を保存し、Preferences ウィンドウを閉じる。
(図:Webots 設定画面での Python パス設定手順)
control_lab 環境の Python を使用して実行するようになる。
もし設定後も Python ライブラリが見つからないエラーが出る場合は、パスが正しいか、Conda 環境が壊れていないかなどを再確認すること。
このセクションでは、Webots が正しく設定され(セクション6)、作成した Conda 環境 (control_lab) を認識し、その環境にインストールされた Python パッケージ (numpy, matplotlib, scipy, gymnasium, stable_baselines3, torch) を Webots のコントローラースクリプト内から正常に import できるかを最終確認する。
【前提】このテストを行う前に、必ずセクション6の手順を完了し、Webots の Preferences で Python パスが正しく control_lab 環境の python.exe (または相当するもの) に設定されていることを確認すること。
テスト用 Python コード (コピーして使用):
# Copyright 1996-2024 Cyberbotics Ltd.
# ... (license details) ...
"""
This controller primarily tests if required Python packages
(numpy, matplotlib, scipy, gymnasium, stable_baselines3, torch)
are installed and accessible by the Python environment used by Webots.
It incorporates the basic structure of the original 'driver' example
but focuses on the import checks first.
"""
# --- Add these import statements to test your environment ---
print("--- Starting Check: Importing Required Packages ---")
import sys # Needed for sys.exit() on failure
all_imports_successful = True # Flag to track success
try:
import numpy as np
print("[ OK ] Successfully imported numpy")
# Optional basic check:
# _ = np.array([1, 2])
# print("[ OK ] numpy basic functionality check passed")
# Import matplotlib.pyplot as requested
import matplotlib.pyplot as plt
print("[ OK ] Successfully imported matplotlib.pyplot")
# Note: Using plt functions directly might be complex here,
# but the import itself tests installation.
import scipy
print("[ OK ] Successfully imported scipy")
# Optional basic check:
# from scipy import constants
# _ = constants.pi
# print("[ OK ] scipy basic functionality check passed")
import gymnasium as gym
print("[ OK ] Successfully imported gymnasium")
# Optional basic check:
# _ = gym.spaces.Discrete(2)
# print("[ OK ] gymnasium basic functionality check passed")
import stable_baselines3
print("[ OK ] Successfully imported stable_baselines3")
# Optional basic check:
# _ = stable_baselines3.A2C
# print("[ OK ] stable_baselines3 basic functionality check passed")
import torch
print("[ OK ] Successfully imported torch")
# Optional basic check:
# _ = torch.tensor([1.0, 2.0])
# print("[ OK ] torch basic functionality check passed")
print("\n--- Check Complete: All specified packages imported successfully! ---")
except ImportError as e:
all_imports_successful = False # Mark failure
print(f"\n!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
print(f"[FAIL] FAILED TO IMPORT A REQUIRED PACKAGE: {e}")
print(f" Error Type: {type(e)}")
# e.name often holds the name of the failed module
module_name = getattr(e, 'name', 'Unknown')
print(f" Failed Module: '{module_name}'")
print(f" -> Check if '{module_name}' is installed in the Python environment")
print(f" that Webots is configured to use.")
print(f" -> Verify Path: Webots > Tools > Preferences > Python command")
print(f"!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n")
# Exit the controller script if an import fails - prevents running Supervisor code
sys.exit(f"ImportError: Required package '{module_name}' not found or import failed.")
# --- End of added import test section ---
# --- Original Webots example script structure (optional, runs only if imports succeed) ---
# --- This part might produce warnings if the world doesn't match the example exactly ---
if all_imports_successful:
print("\n[INFO] Imports successful, proceeding with Supervisor initialization (if applicable).")
from controller import Supervisor
# Make sure 'common.py' exists if you are using the original example structure, otherwise define dummy
try:
# This specific example might not need common.py, adjust if needed
pass # from common import common_print
except ImportError:
# Define a dummy function if needed
# def common_print(msg): print(f"Dummy common_print: {msg}")
print("[WARN] 'common.py' not found or not needed for this basic test.")
class Driver (Supervisor):
timeStep = 128 # Or get from world basicTimeStep
def __init__(self):
super(Driver, self).__init__()
self.keyboard = None # Initialize to None
self.timeStep = int(self.getBasicTimeStep()) # Use world timestep
# Safely try to get keyboard (may not exist)
try:
self.keyboard = self.getKeyboard() # Get keyboard device
if self.keyboard: # Check if keyboard was found
self.keyboard.enable(self.timeStep) # Enable keyboard reading
print("[INFO] Keyboard enabled for optional interaction.")
else:
print("[WARN] Keyboard device not found in this world.")
except Exception as e:
print(f"[WARN] Could not initialize keyboard device: {e}")
def run(self):
print("[INFO] Controller 'run' method started.")
print("[INFO] Primary goal (import tests) already passed.")
print("[INFO] This controller will now run passively.")
if self.keyboard:
print("[INFO] You can press keys (if defined below) but main focus was imports.")
# Passive loop to keep controller alive and show simulation running
while self.step(self.timeStep) != -1:
# Optionally add key checks here if needed for further testing
# k = self.keyboard.getKey() if self.keyboard else -1
# if k == ord('I'): print("Info key pressed")
pass # Just keep stepping
print("[INFO] Driver run loop finished or simulation stopped.")
# --- Script execution ---
if all_imports_successful:
print("[INFO] Initializing Driver controller...")
controller = Driver()
print("[INFO] Starting controller run loop (passive)...")
controller.run()
print("[INFO] Controller run loop exited.")
else:
print("[INFO] Script halted due to import errors. Supervisor code was not executed.")
else:
print("[INFO] Script halted before Supervisor initialization due to import errors.")
File -> Open Sample World... を選択する。examples.wbt を選択し、開く:
languages ▶ python ▶ examples.wbtdriver.py の内容が自動的に開かれる。(スクリーンショットで示されている通りである)File -> Save Text File を選択するか、Ctrl+S キーを押す。[ OK ] Successfully imported ... というメッセージが表示され、最後に --- Check Complete: All specified packages imported successfully! --- が表示されていれば、連携は成功である!
--- Starting Check: Importing Required Packages ---
[ OK ] Successfully imported numpy
[ OK ] Successfully imported matplotlib.pyplot
[ OK ] Successfully imported scipy
[ OK ] Successfully imported gymnasium
[ OK ] Successfully imported stable_baselines3
[ OK ] Successfully imported torch
--- Check Complete: All specified packages imported successfully! ---
[INFO] Imports successful, proceeding with Supervisor initialization (if applicable).
... (以降のINFO/WARNメッセージ) ...
[FAIL] FAILED TO IMPORT A REQUIRED PACKAGE: ... というエラーメッセージが表示された場合、そのライブラリの import に失敗している。エラーメッセージに表示されている `Failed Module: 'xxx'` を確認する。
[ OK ] となり、[FAIL] が表示されなければ、Webots と control_lab Python 環境の連携設定は正しく完了しており、必要なライブラリも Webots から利用可能である!これで実験を進める準備が整った。