Closed CAI23sbP closed 9 months ago
@CAI23sbP 우선 학습은 진행이 되고있는게 맞습니다. 120 epoch를 학습하게되면 약 24시간 정도 걸릴 것 같네요.
그리고 현재 codebase는 학습단계에서 rviz로 시각화하는 것을 고려하고 있지 않습니다. 혹시 시각화를 원하시면 다음과 같은 수정이 필요할 것 같아요. 혹시 시도해보시겠어요?
train_low_level.py
에 필요한 수정사항:
RosEnv
사용을 위해 아래 줄 추가.
from nav_gym_env.ros_env import RosEnv
path collector에 들어가는 env에 RosEnv 씌우기 e.g.,
expl_path_collector = GoalConditionedPathCollector(
RosEnv(expl_env),
expl_policy,
observation_key=observation_key,
desired_goal_key=desired_goal_key,
)
eval_path_collector = GoalConditionedPathCollector(
RosEnv(eval_env),
eval_policy,
observation_key=observation_key,
desired_goal_key=desired_goal_key,
)
hrl_nv/reward_randomize_env.py
에 필요한 수정사항:
NavGymRewardRandomizeEnv 클래스에 아래 function들 정의
@property
def map_info(self):
return self._wrapped_env.map_info
@property
def robot(self):
return self._wrapped_env.robot
@property
def humans(self):
return self._wrapped_env.humans
@property
def num_scan_stack(self):
return self._wrapped_env.num_scan_stack
@property
def prev_obs(self):
return self._wrapped_env.prev_obs
위 수정 단계를 거치고 위의 step 1, 2, 3를 수행 해보시겠어요?
(그리고 mujuco는 따로 필요하지 않습니다. 기존에 rlkit codebase에서 필요로해서, 관련 부분은 주석처리 했던 것으로 기억합니다.)
@leekwoon 안녕하세요!. 항상 친절하시고 빠른 답변 감사드립니다. 네 제공하신 단계별로 수행하니 rviz 상에서 visualization이 되는 것을 확인했습니다. 하지만 map을 python을 통해 실시간으로 생성하다보니 world.yaml 없기 때문에 map이 visualization 되지 않는거 같습니다.
따라서 해당 링크를 참고하여 다음과 같이 visualization 을 실시했습니다.
감사합니다!.
If you want to visualize training code. you must input self.render
in this file
change from
`
def step(self, action):
self.steps_since_reset += 1
action = np.array(action)
if self.min_turning_radius > 0:
if action[0] >= 0:
# Set the minimum linear velocity to satisfy the minimum turning radius
action[0] = max(action[0], np.abs(action[1]) * self.min_turning_radius)
else:
action[0] = min(action[0], -np.abs(action[1]) * self.min_turning_radius)
`
to
`
def step(self, action):
self.steps_since_reset += 1
self.render()
action = np.array(action)
if self.min_turning_radius > 0:
if action[0] >= 0:
# Set the minimum linear velocity to satisfy the minimum turning radius
action[0] = max(action[0], np.abs(action[1]) * self.min_turning_radius)
else:
action[0] = min(action[0], -np.abs(action[1]) * self.min_turning_radius)
`
and you must modify def render
in the file
from
`
if mode == 'human':
img = self.map_info['data'].copy().astype(np.float32)
img[img == 0] = 1 # free space -> white
img[img == 100] = 0 # obstacle -> black
img = cv2.merge([img, img, img])
`
to
`
if mode == 'human':
img = self.map_info['data'].copy().astype(np.float32)
img = img.T
img[img == 0] = 1 # free space -> white
img[img == 100] = 0 # obstacle -> black
img = cv2.merge([img, img, img])
`
확인해보니 RosEnv
에서 reset
할때마다 reset_map_service
로 맵을 업데이트 해서 rviz에서 시각화가 가능한걸로 보입니다.
rviz시각화가 cv2로 시각화 하는것보다 빨라서 학습속도에 덜 영향을 줄 거 같아서 rviz 시각화를 추천드려요~
@leekwoon 감사합니다. 알려주신 방법대로 해볼게요!
@leekwoon 안녕하세요!. 새로운 문제가 1개와 질문 1개가 있어서 왔습니다. 첫 번째로 이번에는 제공하신 docs를 기반으로 코드를 돌렸을 때의 문제입니다. 학습이 진행되지 않는 문제입니다 저의 실행 과정은 아래와 같습니다. step 1 :
roslaunch nav_gym start_nav_gym.launch
step 2 :roslaunch nav_gym view_robot.launch
step 3 :python -m examples.train_low_level --base_logdir /tmp --seed 0
위 3단계를 실행했음에도 map tf가 발행이 되지 않는 문제가 있었습니다. 따라서 해당 문제의 결과로 rviz에는 다음과 같이 나옵니다.코드를 분석하여 map tf를 발행해주는 file을 발견했습니다.
map tf
문제는 이를 통해서 해결된 듯 보였지만 코드 구조상 아래와 같이 되어 있었기 때문에 학습을 위한 충분한 step이 진행되지 않고 코드가 종료되는 문제가 있었습니다. 더구나 학습과 관련된 코드가 존재하지 않아 학습이 진행되지 않는 것으로 보입니다. 또한 다음과 같이 rviz 상에서 scan 값이 제대로 나오지 않는 것을 확인했습니다. 이번에는file을 실행하지 않고 12분 정도 기다려 보니 아래와 같이 학습이 되는 것과 action 값 그리고 observation 값이 각각 나오는 것을 확인 했습니다만, 현재 정확하게 학습이 진행되고 있는지 의문입니다. 여기에 추가적으로 학습시 rviz로 확인할 수 없는지도 궁금합니다.두 번째 mujoco가 환경에 설치되어 있어야 하는지궁금합니다. 이에 대한 질문은 하단과 같이 step 3을 실행시 나온 log 때문입니다.