[Autonomous Ship] A* Algorithm 자체 개발(5) : 시뮬레이션 구현(2021.07.31.)

한은기·2021년 7월 31일
0

Study) NAOE

목록 보기
9/11

Simulator 제작 with PyQt5

2단계 제작 목표

  • 픽셀로 일일히 지정하지 않는 GUI 제작
  • 초기 레아아웃 배치 완성하기
  • 본 알고리즘과 연결 및 작동 여부 테스트

개발 현황

  • 전체 창 크기만 픽셀로 고정하고 나머지는 GridLayout으로 배치
  • 그래픽 뷰에 장애물, 시작 위치, 현재 배 위치, 도착 위치, 지난 경로, 탐색 중인 최적 경로 표시
  • 사용자가 조정할 수 있는 값으로서 시작 위치, 시작 heading vecor, 도착 위치, 장애물 탐색 범위, 예측 범위, 이동 단위, 도착 인정 범위 등을 설정함
  • 직전에 누른 버튼이 무엇인지 Status에 표시함
  • 알고리즘에 '거쳐온 경로'를 표시하도록 변수 추가함
  • 알고리즘과 연결해 실시간으로 경로 표시 및 이동이 잘 되고 있음을 확인! (생각보다 잘 움직여서 놀랐다는...!)

Simulator & Algorithm Connect

  • 다양한 장애물 배치 상황을 가정해 시뮬레이션을 실시하며 알고리즘 검증. 장애물로 쭉 막힌 길에서도 비교적 잘 빠져나간 것을 확인함!

  • 특정 상황에서 추정 trajectory가 1 정도로 짧아지고(본디 최대 5), 같은 자리에 stuck되며 왔다갔다를 반복하며 무한 loop에 빠짐. cost 조정 시 해결이 되는 경우도 있지만 아닌 경우도 있음


추후 계획

Simulator 수정 및 보완

  1. Simulator에 Gain 값 조정할 수 있게 설정
  2. 서로 다른 값으로 분사된 초깃값 통일
  3. Reset, Pause 기능 잘 안 되는 것 해결
  4. 초기 heading이 잘 들어가는지 확인
  5. obstacle, 시작점, 도착점도 마우스로 찍어서 설정할 수 있게 하는 기능
  6. 닫기 버튼 누르면 전체 프로세스가 종료되게 하기
  7. trajectory 그릴 때 마지막 점까지 그릴 수 있도록 하기
  8. 배 위치를 배 모양(오각형)으로 바꾸기
  9. heading vector 방향 표시하기
  10. Status Bar에 마우스 위치 표시하기
  11. 참고한 코드에 Offset과 scale을 이용하는데 그 정체를 알아내고 알맞게 사용하기
  12. GridLayout 조금 더 보기 좋게 만들기

알고리즘 수정 및 보완

  1. 특정 조건에서 Stuck 되는 것 : 알고리즘 문제인지, gain 값 문제인지 확인. 일정 시간/횟수 동안 Stuck 되었을 때 따로 처리하는 코드 추가
  2. heading vector을 변경했을 때 normalize해야 함
  3. 넘파이 배열을 스마트하게 쓸 수 있는 방법 강구
  4. 선수 회전에서 각도가 마이너스로 잘 들어가는지, 180도 이상인 둔각에서는 잘 되는지 필시 확인
  5. h 휴리스틱에도 gain 값 곱해주는 것 고려
  6. 경계선 line out 체크하는 함수에서 오른쪽 벡터와 선이 아예 일치할 경우 등 예외처리 살피기
  7. heading 방향으로 장애물 자동 할당 기능(실시간 장애물 탐지 위해)

Source Code

GitHub(실시간 업데이트) : AutonomousShipAlgorithm/A_star

profile
🏫Inha Univ. Naval Architecture and Ocean Engineering & Computer Engineering (Undergraduate) / 🚢Autonomous Vehicles, 💡Machine Learning

0개의 댓글