leekwoon / hrl-nav

[ICRA 2023] Adaptive and Explainable Deployment of Navigation Skills via Hierarchical Deep Reinforcement Learning
MIT License
96 stars 8 forks source link

training issue #3

Closed CAI23sbP closed 9 months ago

CAI23sbP commented 9 months ago

@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에는 다음과 같이 나옵니다. image

코드를 분석하여 map tf를 발행해주는 file을 발견했습니다. map tf 문제는 이를 통해서 해결된 듯 보였지만 코드 구조상 아래와 같이 되어 있었기 때문에 학습을 위한 충분한 step이 진행되지 않고 코드가 종료되는 문제가 있었습니다. 더구나 학습과 관련된 코드가 존재하지 않아 학습이 진행되지 않는 것으로 보입니다. image 또한 다음과 같이 rviz 상에서 scan 값이 제대로 나오지 않는 것을 확인했습니다. image 이번에는file을 실행하지 않고 12분 정도 기다려 보니 아래와 같이 학습이 되는 것과 action 값 그리고 observation 값이 각각 나오는 것을 확인 했습니다만, 현재 정확하게 학습이 진행되고 있는지 의문입니다. 여기에 추가적으로 학습시 rviz로 확인할 수 없는지도 궁금합니다. image

두 번째 mujoco가 환경에 설치되어 있어야 하는지궁금합니다. 이에 대한 질문은 하단과 같이 step 3을 실행시 나온 log 때문입니다. image

leekwoon commented 9 months ago

@CAI23sbP 우선 학습은 진행이 되고있는게 맞습니다. 120 epoch를 학습하게되면 약 24시간 정도 걸릴 것 같네요.

그리고 현재 codebase는 학습단계에서 rviz로 시각화하는 것을 고려하고 있지 않습니다. 혹시 시각화를 원하시면 다음과 같은 수정이 필요할 것 같아요. 혹시 시도해보시겠어요?

train_low_level.py 에 필요한 수정사항:

(그리고 mujuco는 따로 필요하지 않습니다. 기존에 rlkit codebase에서 필요로해서, 관련 부분은 주석처리 했던 것으로 기억합니다.)

CAI23sbP commented 9 months ago

@leekwoon 안녕하세요!. 항상 친절하시고 빠른 답변 감사드립니다. 네 제공하신 단계별로 수행하니 rviz 상에서 visualization이 되는 것을 확인했습니다. 하지만 map을 python을 통해 실시간으로 생성하다보니 world.yaml 없기 때문에 map이 visualization 되지 않는거 같습니다.

따라서 해당 링크를 참고하여 다음과 같이 visualization 을 실시했습니다. image

감사합니다!.

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])

`

leekwoon commented 9 months ago

Screencast2024-01-16135549-ezgif com-video-to-gif-converter

확인해보니 RosEnv 에서 reset할때마다 reset_map_service로 맵을 업데이트 해서 rviz에서 시각화가 가능한걸로 보입니다. rviz시각화가 cv2로 시각화 하는것보다 빨라서 학습속도에 덜 영향을 줄 거 같아서 rviz 시각화를 추천드려요~

CAI23sbP commented 9 months ago

@leekwoon 감사합니다. 알려주신 방법대로 해볼게요!