R-BIZ

RVIZ 자율주행 챌린지: wall_following

우기빌리 2023. 10. 17. 17:17

중요하다 싶은 것들, 수정한 것들을 위주로 타이핑해본다.

 

우리의 고려 요소는 아래 4가지로 구분된다:

1. 시뮬레이션과 실제 로봇 크기 차이

2. self.DIRECTION이 어느 각도에서 값을 받아오느냐

3. obstacle라고 인식하는 각도와 거리는 얼마큼 할 것인가, condition이 obstacle로 가는 조건은 무엇이냐

4. condition이 obstacle일 땐 어떤 행동을 취해주느냐

 

1. 시뮬레이션과 실제 로봇 크기 차이

시뮬레이션과 실제 로봇 크기 차이로 인해 생기는 차이는 꽤나 크다.

우선 주행하는 속도(speed)부터 시작하여, 유사시 취해야되는 각도 이동(angle), 감지 거리(scan_dist)등을 고려해야된다.

 

scan 거리값을 데이터로 받아들일 때 주로 사용하는 변수로서, 이 값에 따라 로봇의 condition을 forward, close, maintaining, far 그리고 obstacle 등으로 설정한다

 

그림으로 스캔 범위를 보면 다음과 같다.

유효값

 

로봇이 벽과 일정한 거리를 두게 하기 위해서는 scan_dist 값과 이와 연관된 offset 값을 키워야됐다.

좌) 실제 로봇 우) 시뮬레이션 리모

 

2. 시뮬레이션 상에서 데이터를 받는 각도와 실제 로봇에서 데이터를 받는 각도가 달랐다.

이는 우리가 어느 각도까지 값을 받을 것인가를 직접 데이터를 출력해보면서 확인할 수 있었기 때문에 angle_distance 값을 바꿔가며 적정 값을 확인할 수 있었다.

좌) 수정 전, 우) 수정 후

 물론 해당 각도(angle1, angle2)는 angel_distance로 계산된 값이며 스캔 거리 값에도 영향을 받는다. 하지만 대회 폭이 그리 넓지 않다는 점을 고려하였을 때 라이다 스캔 거리 값은 작을수록 좋았고, 이 또한 angle을 얻는 값에 영향을 주었을 것으로 예상된다.

 

3. obstacle라고 인식하는 각도와 거리는 얼마큼 할 것인가 & condition이 obstacle로 바뀌는 조건은 무엇으로 할 것인가

 '전방 장애물 인식은 잘 하도록, condition이 obstcle로 바뀌는 데에는 어느 정도 조건이 붙도록' 로봇이 벽과 이루는 각도가 좁음에도 불구하고 obstacle로 인식하지 않은 경우 로봇은 벽과 충돌하는 것은 당연한 조건이었다. 하지만 또 condition이 필요이상으로 obstacle로 변하는 상황도 예방해야됐다. 그래서 도출한 결론은 로봇이 가장 예민하게 전방 사물을 감지하는 각도를 찾고, 버퍼를 활용해 일정 obstacle index 양 이상을 감지해야지만 condition이 바뀌도록(= 조건을 더 까다롭게 만듦으로) 하여 해당 문제를 해결할 수 있었다.

좌) 수정 전, 우) 수정 후

4. condition이 obstacle일 땐 어떤 행동을 취해줄 것인가

 condition = 'obstacle' 일 때 가장 고려해야될 것은 각도를 얼마나 틀어줄 것인가 이다. 가장 신경써야되는 부분은 코스가 'ㄱ'자일 경우인데 이럴 경우 로봇이 과하게 방향을 틀어서 다음 이동을 할 때 타고 갈 벽을 찾지 못하는 상황이 발생하기 때문이다. 해당 값 역시 실제 로봇에 적용해보았을 때 적절한 값을 확인할 수 있었다.

좌) 수정 전, 우) 수정 후

기타 문제점:

 로봇에 적용하였을 때 생기는 self.condition = "close"와 self.DIRECTION = LEFT 의 행방불명. 중복된 조건으로 인해서, 혹은 시뮬레이션 상에서 데이터를 얻는 속도와 실제 로봇에서 데이터를 얻는 속도의 차이에서 생기는 오차로 인해 발생한 문제로 간주된다.

하지만 이는 반대로 DIRECTION = RIGHT 와 self.condition = "far"은 잘 나온다는 뜻이 되었고 각 상황에서 방향(각도)와 속도의 적절 값을 입력해주면 되었기에 큰 문제가 되진 않았지만 작은 이슈로 발생하여 적어본다. 

 

최종 결과 영상:

gazebo simulation

gazebo_simulator: limo
real_world: scout_mini

 

대회 주행

*

대회는 왼쪽 벽을 기준삼아 이동해야됐기에 실제 적용 코드는 이와 다르다.

좌) LEFT, 우) RIGHT

 물론 해당 코드를 바꿔주면 기준 벽이 세워지는 것은 맞지만 세부 파라미터 값은 동일하지 않다. 이는 위에서 말한 고려사항들을 참고하여 수정하면 큰 어려움 없이 진행된다.