프로젝트 정리/소프트웨어 공학

11/28 변경 사항

오늘은 저번 포스팅에서 말했던 문제들 중 두개의 문제를 해결했다.

 

  • 로봇의 오동작을 구현했다. 로봇은 앞으로 한 칸 이동하라는 명령을 받았을 때 각각 10퍼센트의 확률로 제자리에 가만히 있거나 앞으로 두 칸 움직일 수 있다. 로봇의 전방 한칸이나 두칸 앞에 위험 지역이 있거나 현재 위치에서 두칸 앞으로 간다면 맵 밖으로 벗어나는 경우 오동작들이 일어나지 않게 설계했다.
#로봇을 앞으로 한 칸 이동시킨다. 로봇이 움직이지 않거나, 앞으로 두 칸 움직일 가능성이 있다.
    def moveForward(self):
        inPlaceProp=0.8
        twoStepProp=0.9

        dir=moveDirection[self.direction]
        checkSpot=((self.position[0]+dir[0], self.position[1]+dir[1]), (self.position[0]+2*dir[0], self.position[1]+2*dir[1]))
        checkE=False
        checkE=self.checkError(checkSpot[0])
        checkE=self.checkError(checkSpot[1])

        if checkE==True:
            inPlaceProp=1 #한칸 또는 두칸 앞에 위험 지역이 있을 경우에는 오작동 배제

        bugProp=np.random.rand()
        if bugProp>inPlaceProp:
            if bugProp>twoStepProp:
                self.position += 2*np.array(moveDirection[self.direction]) # bugProp값이 0.9 이상이면 두칸 앞으로 이동
            #bugProp값이 0.8~0.9 사이인 경우 움직이지 않음.
        else:
            self.position+=np.array(moveDirection[self.direction]) #정상 동작

        self.position=list(self.position)
        if inPlaceProp==1: inPlaceProp=0.8

 

  • 맵의 크기가 커졌을 때 아이콘들이 작아져 잘 보이지 않는 현상을 해결했다. 맵의 가로, 세로 길이가 모두 10을 초과하면 맵을 확대하여 표시하는 형식으로 바꾸었다. 추가로 x축과 y축에 좌표 정보를 넣어주어 혼동을 방지했다.

저번 포스팅에 적었진 않았지만 추가로 해결한 문제도 있다.

  • 기존에는 plot의 범위와 맵의 범위가 같아 맵 외곽쪽에서 로봇의 방향을 나타내는 화살표가 잘리는 문제점이 있었다. 이를 해결하기 위해 plot의 범위를 맵의 범위보다 크게 하고 맵의 외곽선을 만들어주었다. 이를 통해서 화살표가 잘리는 문제점은 해결할 수 있었지만, 경로를 새로 그리기 위해 기존 경로를 지울 때마다 외곽선도 같이 지워진다는 문제가 새로 생겨났다. 이는 경로를 새로 그릴 때마다 외곽선을 다시 그려주는 식으로 해결했다.

새롭게 추가한 기능은 다음과 같다.

  • 맵을 나타내는 plot 옆에 로봇의 현재 위치, 로봇 동작 정보(정지, 회전, 앞으로 한 칸 이동, 앞으로 두 칸 이동), 남은 목표 지점의 갯수를 나타나게 했다. 다만 로봇 동작 정보 표시는 아직 제대로 동작하지 않는다. 텍스트를 바꿀 때 딜레이가 걸리는 것 같은데, 왜 그런지는 좀 더 조사해봐야 할 것 같다.

 

새로운 기능을 추가한 현재 상태는 아래의 동영상에 나와있다.

 

20X20 맵.