AWS DeepRacer
=============================
###### tags: `AWS`, `ドキュメント`
AWS DeepRacerに関するメモです。
注意点
-----------------------------
1. クローンしたモデルを学習させるとき、ActionSpaceの設定を変更しない.
2. RewarGraphは途中までの結果しか表示しないため、常にEvaluationをする.
3. 1つのモデルにつき複数のコースは走れない。
4. 負報酬を与えない。また、ゼロ報酬は1e-3など小さな値を報酬とする。
5. 作りたいモデルがネットに落ちている場合があるので、一度探してみる。
6. 状態値の "progress" は定義域が 0~100 である.
7. Evaluation中の動画は後から見れないので録画をする.
8. バーチャル大会にモデルを提出できない場合がある.
報酬関数
-----------------------------
### 定義
```python
def reward_function(params):
reward = ...
return float(reward)
```
### 状態パラメータ
```python
{
"all_wheels_on_track": Boolean, # flag to indicate if the vehicle is on the track
"x": float, # vehicle's x-coordinate in meters
"y": float, # vehicle's y-coordinate in meters
"distance_from_center": float, # distance in meters from the track center
"is_left_of_center": Boolean, # Flag to indicate if the vehicle is on the left side to the track center or not.
"heading": float, # vehicle's yaw in degrees
"progress": float, # percentage of track completed
"steps": int, # number steps completed
"speed": float, # vehicle's speed in meters per second (m/s)
"steering_angle": float, # vehicle's steering angle in degrees
"track_width": float, # width of the track
"waypoints": [[float, float], … ], # list of [x,y] as milestones along the track center
"closest_waypoints": [int, int] # indices of the two nearest waypoints.
}
```
#### all_wheels_on_track
トラックの内側にいるかどうか
```python=
define reward_function(params):
all_wheels_on_track = params['all_wheels_on_track']
speed = params['speed']
SPEED_THRESHOLD = 1.0
if not all_wheels_on_track:
reward = 1e-3
elif speed < SPEED_THRESHOLD:
reward = 0.5
else:
reward = 1.0
return reward
```
#### closest_waypoints
最も近い2つのWayPointのindex
0 : 現在のwaypoint
1 : 次のwaypoint
```python=
def reward_function(params):
import math
waypoints = params['waypoints']
closest_waypoints = params['closest_waypoints']
heading = params['heading']
reward = 1.0
next_point = waypoints[closest_waypoints[1]]
prev_point = waypoints[closest_waypoints[0]]
track_direction = math.atan2(next_point[1] - prev_point[1], next_point[0] - prev_point[0])
track_direction = math.degrees(track_direction)
direction_diff = abs(track_direction - heading)
if direction_diff > 180:
direction_diff = 360 - direction_diff
DIRECTION_THRESHOLD = 10.0
if direction_diff > DIRECTION_THRESHOLD:
reward *= 0.5
return reward
```
#### distance_from_center
中心線から車両中心までの距離
範囲 : [0, tranck_width/2]
```python=
def reward_function(params):
track_width = params['track_width']
distance_from_center = params['distance_from_center']
marker_1 = 0.1 * track_width
marker_2 = 0.5 * track_width
if distance_from_center <= marker_1:
reward = 1.0
elif distance_from_center <= marker_2:
reward = 0.5
else:
reward = 1e-3
return reward
```
#### heading
x軸から車両の向きベクトルの角度
範囲 : -180 ~ +180
#### is_left_of_center
トラックの中心より左にいる場合True, 右側にいたらFalse
#### progress
トラック完走の割合
範囲 : 0 ~ 100
#### speed
速度
範囲 : 0.0 ~ 5.0
#### steering_angle
タイヤの曲がり具合
範囲 : -30 ~ 30
```python=
def reward_function(params):
steering = abs(params['steering_angle'])
reward = 1.0
STEERING_THRESHOLD = 20.0
if steering > ABS_STEERING_THRESHOLD:
reward *= 0.8
return reward
```
#### steps
ステップ数
範囲 : 0 ~
```python=
def reward_function(params):
steps = params['steps']
progress = params['progress']
TOTAL_NUM_STEPS = 300
reward = 1.0
if (steps % 100) == 0 and progress > (steps / TOTAL_NUM_STEPS) * 100 :
reward += 10.0
return reward
```
#### track_width
トラック幅
#### x, y
環境のx, y座標値
#### waypoints
waypointの座標リスト.二次元リストで定義