새소식

Navigation/url_navigation_pkg

url_navigation_pkg (1) : 클린 코드, 소프트웨어 요구사항

  • -

URL에 들어오고 나서 좋았던 점 중 하나는 Aswin님의 DreamWaQ Universe 소스코드를 보고 공부할 기회가 있었다는 것이다. 그 코드는 내가 이제껏 봤던 어떤 코드보다 예뻤다. 6~7월은 내내 그 코드를 뜯어보고 사용하면서 보냈다. 그전에는 딱히 클린 코드에 대한 경이로움이나 필요성을 못 느끼면서 살았고, 그 때문에 내가 만든 코드도 정말 되는대로 작성한 것이 대부분이었다. 하지만 DreamWaQ 코드를 보고 난 후에, 잘 조직된 패키지는 참 많은 사람들의 삶의 질을 향상시킨다는 것을 체감했다. 그래서 내가 향후에 만들 패키지도 이와 같이 손쉽게 유지보수되는 영리한 구조를 지녔으면 좋겠다는 생각을 처음으로 했다.

클린 코드는 기술 부채를 최소화하고 가독성과 유지보수성 그리고 타인의 이해도를 높이는 효과적인 코드의 작성 방법에 관한 것이다. 

그리고 나서 연구실의 Navigation 파트, 그 중에서도 GPP/LPP 유지 보수 및 개선 파트를 맡아서 여러가지 일을 하게 되며 연구실의 LPP 부분이 하나의 패키지로 쉽게 관리되지 못 하고 있다고 느꼈다. 특히 논문을 작성할 때는 벤치마크 알고리즘을 쉽게 비교할 수 있는 파이프라인이 필요한데, 기존의 늘 쓰던 알고리즘은 잘 돌지만 다른 비교군 알고리즘을 테스트하기에는 다소 불편함이 있었다. 

현행 사족 자율보행 프레임워크

산재되어있는 기능 및 알고리즘을 통합하고, 도메인(시뮬레이터-Gazebo, IsaacSim, 로봇- Humanoid, Quadruped, Wheeled)이 바뀌어도 config 파일만 변경해서 쓸 수 있는 url_navigation_pkg의 개발 필요성을 느끼게 되었다. 

그래서 몇 가지 소프트웨어 요구사항을 정해놓고 패키지를 개발하고자 한다.

  • 센서 교체 용이
  • 알고리즘 교체 가능
    • 각 알고리즘은 기능만 제공해야 한다. 
    • State machine을 내부에 갖지 않는다. 
  • ROS 독립적
    • ROS1, ROS2, ROS 없이
  • 테스트 용이
    • 센서 없이 로직 테스트 가능하도록
  • 재사용성
    • 동일한 use case를 여러 로봇에서  사용가능하도록

그리고 사용성 관점에서는 다음과 같은 요구 사항이 있다. 

  • task, 로봇, 시뮬레이터는 실행 인자로 받는다. 
    • ex) run_gpp --robot go1 --env real
  • 각 알고리즘의 파라미터는 config 파일에서 관리한다. 
  • core, ros wrapper로 나누어 각 기능별로 분리한다. 
  • 세부  
    • GPP
      • 터레인 맵, 현재 위치, goal을 받아서 waypoint list를 반환한다. 
    •  LPP
      • 각 알고리즘별로 필요한 센서 데이터를 선택적으로 수신한다. 
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.