라인 트레이서를 ChainerRL로 구현

검은 선을 따라 이동하는 로봇 시뮬레이션 (라인 트레이서)을 ChainerRL (DQN)을 사용하여 구현했습니다.

학습 결과를 시각화한 것이 다음과 같습니다.



이런 식으로 에이전트 (녹색 구슬)가 검은 선을 따라가는 것을 알 수 있다고 생각합니다.
바삭 바삭하고 움직이는 파란색 선은 상담원이 진행하는 방법 (속도)을 나타냅니다.

코드는 여기에서 업하고 있습니다.
htps : // 기주 b. 코 m / s ぉ w 신 g ぇ / ぃね T 라세

그리기는 모두 cv2 모듈을 사용합니다. 화상 처리가 아니고 화상 묘화를 위해서 cv2를 메인으로 사용하는 것은 오랜만이라고 할까, 별로 보지 않는 것 같은 생각이 듭니다.
사실은 PyQt라든지 wxPython을 사용하는 것이 정공법일지도 모릅니다. (뭐, 이번에는 cv2만으로 부족한 정도의 태스크였을 뿐입니다)

에이전트 설계



lineTrace.py
    def update(self, act_num):
        # act num に応じて方向転換する
        act_list = (np.pi / 3.0, np.pi/ 4.0, np.pi/ 6.0, 0.0, -np.pi / 6.0, -np.pi/ 4.0, -np.pi / 3.0)
        #  :
        # <略>

행동은 왼쪽 방향으로 진행하는 것이 3단계, 오른쪽 방향으로 진행하는 것이 3단계, 직진과 합계 7개 준비했습니다.
따라서 DQN에서 신경망의 출력 유닛은 7개가 됩니다.

환경 로드



lineTrace.py
        # フィールド画像の読み込み
        # フィールド画像には白の中に黒線があるものを想定する
        self.field = cv2.imread("field/field.png")
        #  :
        # <略>

환경은 PNG 이미지로 준비하고 그것을 읽었습니다.
github에도 필드 이미지를 올리고 있습니다. 이 방법으로 이미지를 만들면 다양한 영역에서 에이전트를 실행할 수 있습니다.

상태 얻기



lineTrace.py의 Agent 클래스의 get_state() 메소드에 구현되어 있습니다.
에이전트가 얻을 수 있는 상태는 에이전트의 전방에 있는 센서 어레이로부터 취득되는, 각 센서의 값(0 or 1)의 리스트가 됩니다.

라인 트레이서에 대해서는 이하의 사이트 등을 참고해 주세요.
h tp // w w. ct. 아 c. jp/메 ch/유메 2/유메 2. htm

위의 사이트에서는 센서가 2개 있고 어떤 센서가 검은 선에 있는지를 감지하여 다음 행동을 결정하고 있습니다.
제 프로그램에는 센서가 9개 준비되어 있습니다.
센서의 수는 lineTrace.py 의 LineTrace 클래스의 init() 메소드의 obs_space 변수로 설정할 수 있습니다.

학습 및 테스트 방법



학습은 dqn.py에서 구현됩니다.
내용은, 이하의 사이트에 써 있는 코드를 카피&페이스트 해, 조금 재작성한 것 뿐입니다.
htps : // 기주 b. 이 m / pf 네 t / 챠네 rl / b ぉ b / 뭐 r / 에 mp ぇ s / 쿠이 cks rt / 쿠이 cks rt. 이 pyn b

테스트는 dqn-test.py에서 할 수 있습니다.
github에는 학습된 모델도 올리고 있으므로 곧 실행할 수 있다고 생각합니다.

좋은 웹페이지 즐겨찾기