// it's for Latex

pages

[SLAM] How to study SLAM? / 어떻게 SLAM을 공부할 것인가?

목적 : 석사 기간동안 SLAM 및 Navigation에 대한 이해(이론 및 논문)와 실습(프로그래밍), 그리고 이를 기반으로한 개발.

이를 위해선 다음과 같은 요소들을 고려해야 한다.

- 어떠한 제품을 만든 회사에서 제공한 라이브러리는 그대로 이용해야 한다. 내가 라이브러리가 존재하는 하드웨어에 대해서 새로이 라이브러리를 만드는 것은 불필요한 일이며, 하드웨어 종류에 따라서는 매우 어려운 일이다.

- 그렇다면 내가 "프로그래밍" 해야 하는 부분은 이러한 센서(라이브러리)를 이용한 알고리즘이다.

또한 위 내용을 바탕으로 다음과 같은 이슈들에 대해 결정을 해야한다.

- 어떤 프레임워크(혹은 언어)를 써서 개발할 것인가?

1. MRPT(C++)
 사이트 : https://www.mrpt.org/

 MRPT는 Mobile Robot Programming Toolkit으로써 C++ 언어 기반의 Programming Toolkit이다. 매우 다양한 algorithm을 Class화 해 놓았다. MRPT의 가~~~장~~~ 큰 특징은 자체적인 사이트를 만들어서 해당 Programming Toolkit에 대한 Tutorial을 굉장히 잘 만들어 놓은 것이다. 여기서 Tutorial은 단순히 Program 사용법에 대한 내용이 아닌 SLAM의 기초부터 시작하여 각각 이론에 대한 내용을 명시(Reference Paper도 명시)함과 동시에 해당 이론을 C++ 언어를 이용하여 어떻게 구현하였는지 명시하였다는 것이 정말 대단한 부분이다.

 위와 같은 라이브러리들에 의존하여 mrpt는 구성된다.

 MRPT로 SLAM을 진행한다면 다양한 SLAM에 대한 이론과 이론을 프로그램으로 구현하는 방법에 대해서 정말 자세하게 알 수 있게 될 것이다. 이것은 정말 큰 장점이지만, 정해진 기간 내에 주어진 일을 마쳐야 하는 석사로써 MRPT가 최선인가 하는 의문은 있다. 시간이 그만큼 오래 걸리기 때문이다. 여기에 추가적으로 앞으로 내가 진행할 연구는 내가 하나의 알고리즘을 컴팩트하게 개발한다기 보다는 다양한 논문을 탐색하고 해당 논문의 내용을 참고하여 내 연구에 결합하는 방식이 될 것이다.(물론 다양한 알고리즘의 결합 또한 컴팩트 하게 진행되어야 한다.) 이러한 내용을 고려했을 때에 만약 내 연구의 베이스 프레임워크를 MRPT로 한다면, 차후에 내 연구 내용과 타인의 연구 내용을 결합할 때에 타인의 연구 내용이 MRPT가 아닌 matlab이나 python 등을 사용하였을 때, 나는 matlab이나 python 언어를 c++ 언어로 다시 변환해야 한다. 예전에 matlab 언어를 c++ 언어로 변환 시도한 경험이 있는데, 결국 실패했다. 알고리즘에 따라 난이도가 다르겠지만 slam algorithm의 언어를 변환하는 작업은 결코 쉽지 않을 것이다. 

2. PythonRobotics (python)
 사이트 : https://atsushisakai.github.io/PythonRobotics/
            https://github.com/AtsushiSakai/PythonRobotics
 책 : Probabilistic Robotics

 으음... Python이다... Python의 강력한 장점은 역시 복잡한 연산에 유리한 모듈들이 많다는 것이다... 그리고 가시성 또한 c++에 비해 뛰어나다.(개인적인 체감일 수 있다.) 솔직히 개인적으로는 Python을 이용해 개발 및 연구를 진행하는 것이 더 유리하다고 생각한다... 위 사이트 https://atsushisakai.github.io/PythonRobotics/에는 자세한 프로그래밍 내용은 없지만 뛰어난 가시성으로 각각의 메소드가 어떤 방식인지 알 수 있다. 하지만 자세한 코드의 내용은 알 수 없는데, 이는 깃허브 사이트인 https://github.com/AtsushiSakai/PythonRobotics에 들어가면 각 document에 .ipynb 확장자 명의 파일을 확인하면 이론과 소스코드에 대해 매우 자세히 설명해 놓은 것을 확인할 수 있다. 무엇보다 python의 MRPT 보다 강력한 점은 python의 경우에는 기본적인 수학관련 모듈로부터 시작하여 자신만의 모듈을 만들어 내어 사용하는 과정이 c++에 비해 비교적 쉽게 이루어 진다는 것이다. 이러한 내용을 생각하였을 때, 역시 python을 이용해 개발하는 것이 좋겠다는 생각이 든다. 하지만 MRPT와 같이 다른 언어와의 변환 작업이 어렵다는 단점이 있다.

3. OpenSLAM
 OpenSLAM은 전 세계의 SLAM 관련 Project를 모아 놓은 것으로써, 1, 2번의 내용을 숙지한 이후에 연구개발을 진행할 때에 참고할 수 있을 것 같다.

4. ROS
 책 : Learning ROS for Robotics Programming /
Effective Robotics Programming with ROS

 좀 긴 길을 돌아오긴 했지만, 석사 1학기동안 내가 SLAM 및 Navigation에 이용하려 했던 platform은 ROS였다. 하지만 지금에 와서 이러한 글을 쓰게 된 것은 ROS의 벽 때문이었던 것 같다. ROS는 SLAM과 Navigation과 같은 작업을 단 몇 줄 만에 "너무나도 쉽게" 작업할 수 있도록 만들었다. 하지만 SLAM과 Navigation Programming에 대한, 그리고 ROS에 대한 제대로 된 이해가 없이 몇 줄 만으로 SLAM과 Navigation을 실행하는 것은 아무의미가 없다. 정말 아무 의미가 없는 것이다. 내가 이해하고 만든 소스코드가 아니면 혹은 내가 그 코드를 완벽하게 이해하지 않으면 의미가 없는 것이다. 물론 내가 완성된 ROS Launch 파일을 역으로 분석해가며 공부해갈 수도 있지만 그것은 "어렵고 비효율 적"이다. 내가 한번이라도 어느정도 베이스부터 SLAM ROS Launch까지 프로그래밍을 했다면 역으로 분석하는 것이 좀 어렵고 오래 걸리더라도 가능할 지도 모르지만 나는 아직 한번도 SLAM 프로그램을 ROS Launch까지 끌어올린 적이 없다. 그러므로 나는 ROS의 베이스부터 프로그래밍 하는 것이 필요하다고 생각한다.
 하지만 그 전에 앞서 C++, Python 개별 파트를 두고 ROS를 사용하여야 하는가? 라는 질문이 온다면 내 결론은 다음과 같다. "앞으로의 연구에서는 다양한 언어로 이루어진 많은 프로젝트의 소스코드를 참고해야 할 것이고, 그렇기에 하나의 언어에만 치중해서는 안된다." 라는 것이다. 그런 의미에서 ROS는 언어에 관계없이 서로 통일된 프로토콜로 통신할 수 있다는 것에 큰 장점을 지닌다.

결론

연구에 있어서, 아니 연구를 위해서 ROS는 필요 불가결 하다고 본다.
하지만 Main Language는 Python로 하여, 주된 개발에 효율을 높이도록 한다.
연구 순서는 다음과 같이 볼 수 있겠다.
1. 하드웨어 선정 (프레임 및 서브제어기(Arduino or Atmega or ArmCore))
2. 각 모듈 모델링 및 설정(프레임같은 경우 3D 모델링이 필요, 센서같은 경우 모델링과 센서 파라미터 값 설정이 필요. 이 때, ROS를 통해 이미 제공되는 모델링 파일 및 센서 설정 파일이 있다면 사용하고 없다면 직접 만들어 사용한다.(왠만하면 ROS 제공되는 제품을 사용하자. 하드웨어 및 센서는 잘 사용하는 것이 중요하지 제로베이스부터 모델링과 프로그래밍 하는 것이 중요하진 않다.)
3. 위의 센서를 이용해 Localization을 해본다.
4. 위의 센서를 이용해 Mapping을 해본다.
5. 위의 센서를 이용해 SLAM을 해본다.
6. 위의 센서를 이용해 Navigation을 해본다.
7. 이 후는 연구의 향방을 보고 결정한다.

Learning ros prograimming 책을 활용하자.


댓글 없음:

댓글 쓰기