[Autonomous Ship] A* Algorithm 자체 개발(7) : ROS용 패키지 개발(2021.08.05.)

한은기·2021년 8월 5일
0

Study) NAOE

목록 보기
11/11

ROS & Ubunto용 알고리즘 개발

  • 본디 시뮬레이션을 완성한 뒤 천천히 개발할 예정이었으나, KABOAT2021 대회에 사용하던 DWA 알고리즘이 사용에 어려움이 있어 급하게 A*를 동원함
  • Terminal 창에서 빠르게 지나가는 텍스트로 상태를 확인하기에 어려움이 많아, PyQt 등을 이용해 시각화를 사용하면 더 좋을 듯함

구현 내용

센서 및 구동기 연동

  1. LiDAR
    1) 대회 DWA 알고리즘에 사용하던 GitHub에서 다운받아둔 패키지 사용
    2) Wall형과 Circle 형 장애물을 따로따로 Publish하던 장애물 필터링 파일을 간략화함
    3) 배의 선수&로컬 위치 기준인 LiDAR의 장애물 좌표는 본 알고리즘에서 상대좌표로 변환하여 Map 위에 좌표로 표시
  2. GPS, IMU
    1) 대회용으로 만들어두었던 파일 및 GitHub 오픈소스 패키지 사용
    2) GPS는 UBlox를 사용
    3) GPS에서 받아온 dd형 좌표는 ENU 좌표계로 변환
    4) 진북을 기준으로 받아오던 IMU는 그대로 진북 기준 bearing으로 사용
  3. Thruster, Servo Motor
    1) PID 제어 코드를 따로 갖던 DWA와는 다르게, 알고리즘에서 Publish 자체를 Servo 회전과 Thruster 출력값으로 바로 설정
    2) 시뮬레이션에서는 '한 Tick에 배가 움직일 거리'를 고정했었던 것처럼, 속도(thruster 출력값)을 고정함
    3) 현재 bearing과 움직여야 하는 각도의 차이를 구하며 P제어를 거쳐 Servo Motor의 회전을 제어함

알고리즘 수정

  1. 당장은 센서들이 수중에 없어 Fake 값을 내놓는 노드를 사용함
    1) 바로 값을 Publish & Subscribe 하는 원리임에도 불구하고 launch 시 값을 받아오는데 Delay가 있음
    2) 알고리즘 코드 자체에서 Delay를 걸어주어 값을 받아올 시간을 확보하거나 잠깐 뜨는 오류를 무시함. 이 부분은 수정 요망
    3) 아직 ROS 를 자유자재로 다루지 못해 rostopic pub으로 배의 현재 위치를 조정해보며 테스트 해보려 했으나 잘 이루어지지는 못했음
  2. Stuck 문제는 임시방편으로 해결. trajectory의 첫 번째 heading 벡터와 두 번째 값의 np.dot연산값이 -1이면, 즉 같은 자리를 반복한다면 trajectory로써 전진하던 한 값만 갖도록 수정. 그러나 이 부분은 다양한 장애물 상황을 가정하고 고쳐나가야 할 필요 있음. 각종 파라미터의 영향도 크기 때문.
  3. 대회에 사용하는 Azimuth Thruster가 후진이 가능하므로 굳이 후진 cost를 높게 줄 필요는 없어보임. 역시 수정 필요한 부분

시각화

  1. Ubuntu에 PyQt5가 작동은 하지만 ROS launch와 함께 사용하기에 애로사항이 많았음. 특히 시뮬레이션 자체가 클래스 관계가 복잡하여 무엇을 어디에 어떻게 사용할지가 매우 배치하기 힘들었음.
  2. 계속 PyQt의 시뮬레이션 창 클래스가 멈추고 다시 시작하길 반복함. 임시방편으로 launch파일에서 시뮬레이션 노드에 파라미터 하나를 꺼놓았으나 이 역시 개선해야 할 부분. (언젠가 오류 없이 되었었는데 어떻게 해결했었는지 까먹었음)
  3. 기존 시뮬레이션에 있던 버튼, SpinBox를 모두 지우고 설정한 파라미터값, 현재 상태만 텍스트로 볼 수 있게 함
  4. Matplotlib를 사용해도 보았으나 plt.show()함수를 그리면 반복문이 돌지 않아 연속적으로 배가 움직일 수가 없었음. 해결 방법을 찾기엔 시간이 부족해 PASS
  5. rqt_plot 등의 기능이 있다고는 했으나 시간관계상 PyQt를 고수
  6. Rviz나 Gazebo 공부의 필요성을 뼈저리게 느낌
  7. 실제로 배가 이동하며 & 센서값이 변동되며 시각화한 그래프가 잘 움직일지 테스트 필요함

여담

  • 저녁 8시부터 익일 4시까지 수면&식사&샤워 두 시간 정도를 빼고 계속 개발만 했음. 창 밖을 보니 날이 밝았다는..
  • 물론 계속 수정을 거듭하겠으나, 시간을 가지고 더 천천히 개발했다면 더 나은 구현이 가능하지 않을까 아쉬움이 매우 깊게 남음
profile
🏫Inha Univ. Naval Architecture and Ocean Engineering & Computer Engineering (Undergraduate) / 🚢Autonomous Vehicles, 💡Machine Learning

0개의 댓글