아래 github 코드를 스터디해보자~~
https://github.com/PaulDanielML/MuJoCo_RL_UR5
아래 github 코드를 스터디해보자~~
https://github.com/PaulDanielML/MuJoCo_RL_UR5
예전엔 tensorflow 가 좋아보였는데, 요즘은 왠지 pytorch 가 대세가 된 것 같아보임.
tensorflow 도 맛보기정도만 했지만, pytorch 를 배워보자~~~
tensorflow 로 된 A3C 예제를 pytorch 로 바꿔봤는데 학습이 안되네 ㅋㅋㅋ
멀티 프로세스 관련해서 뭔가가 잘못한 거 같은데~~
pytorch 와 강화학습 공부 삼매경~~ 이번엔 강화학습으로 자율제어까지 끝을 봐보는 걸 목표로~~
ROS2 여전히 애매한 초보자에게는 모바일 로봇용 패키지를 어떻게 사용해야 할지 잘 모르겠더라~~~
런닝커브를 빠르게 뛰어넘을 필요가 있어서, 어쩔수 없이 (전략적으로) 머니를 써서 초기 단계를 뛰어넘기로 했다!!
- 쓸만한 텍스트북이 없으니, 유료 강의를 찾게되었음..
- 마침 강의가 할인을 하고 있었던게 지름신이 강림하게한 큰 동기부여였을 것 같네
그러하여, 리뷰 평을 살짝 훑어보고 선택을 하게된 건 바로 이 강의 (Udemy)
결론적으로 평하자면, 강의 결제에 사용한 돈이 아깝지 않았도다~~~
드디어 모바일 로봇을 ROS2 로 개발할 환경을 갖출 지식을 확보했다는 점에서 내 머니는 가치있게 소모되었다...
- 강의 뒷부분은 살짝 지루했지만, 한두번 정도 더 볼 예정~~
큰 마음먹고 ROS2를 소스빌드로 WSL2에서 구동되도록 환경을 구축해놨다. (Microsoft 만세~~~ 윈도우에서 우분투 되게 해줘서 고마워~~~)
모바일 로봇쪽 패키지의 소스코드를 분석하거나, 직접 알고리즘을 구현해보는 등의 셀프 스터디를 이제 시작할 준비가 완료되었다..... 이제부터가 진정한 시작이군....To be continued~~~
Ref.
_01. https://nbviewer.org/github/niosus/notebooks/blob/master/icp.ipynb
위의 노트북에는 그림이 일부 안보이길래 보충..
ICP 의 자세한 내용은 위의 링크나 다른 곳에 잘 설명 혹은 자료가 많은 것 같다.
자율 주행(?)/SLAM 에 ICP 알고리즘이 나와서 Study~~~中
- 오픈소스와 유용한 자료 기여자분들께 감사~~~~
※ 진입장벽이 힘들지만, 시간이 지나면 괜찮아질거라 믿는다 !!!
※ 아직 Study 중이라, 오류가 있을수도 있다... 그럴쑤 있어~~~암~~
※ 기술 블로그도 시간과 노~~오~~력, 정~~성이 필요한 것 같다. 내멋대로 작성하는 느낌인데 이것도 어쩔 수 없오~~~ 훌륭한 블로거는 다른 분들에게 양보하겠다!!!
그림 1은 ICP 설명을 위한 data 이다.
- Q 는 true data set, P 는 Q 에 회전 및 병진을 가한 data set
ICP 는 회전과 병진을 찾는 알고리즘인 것 같은데..... (아직 study 중...)
- P = Rot * Q + translation
자, ICP 를 공부하기 위한 샘플 데이터는 준비되었다...
ICP 에는 데이터의 무게중심(?)을 구하는 과정이 있다.
- 무게중심은 평균인 것 같은데...
- 회전을 찾기 용이하기 위해서 P 와 Q 를 origin 으로 이동시키는 역할로 보임...
- 그림 2는 무게중심을 제외한 전처리 후의 그래프이다.
- 느낌상, bias 를 제거하는 것 뉘앙스의 전처리와 유사해 보임
ICP 의 기본로직은 알고리즘 이름에도 표현되어 있듯이 Closest 포인트를 찾아서 반복하는 것이다.
- 어떤 유투브에서는 Data Association 으로 표현하기도 하던데, P와 Q 의 correspondence 를 찾는 과정이다.
- 간단하다, 이중 for 문을 돌면서, P와 각 요소와 Q의 각 요소의 Euclidean distance 를 비교하여 가장 가까운 포인트들을 C = { i, j } 쌍으로 저장함
* 예제는 2차원이므로 Euclidean distance !! 코드는 결국 norm (P - Q) 형태 !!
- 그림 3은 P 집합과 Q 집합의 corrspondence pair 를 회색 선으로 나타낸 그림
SVD 를 이용하여 회전과 병진을 찾는다.
- SVD 방식은 좀 더 자료등을 찾아봐서 이해가 필요한데..
- P_correct = R_found * P + t_found
- 그림 4는 P_correct 와 Q 의 그래프
- 이전보다 P와 Q 가 정렬이 되긴 했다.
관련 책 정보:
- 만들면서 배우는 인터프리터
- 컴파일러 만들기
인터프리터와 컴파일러에 대한 기본 정보 파악
실제로 코딩을 해보면서 동작 확인
추후 코드를 다듬어보면서, 활용할 부분이 있을지 고민 중....
Ref.
1. https://github.com/kjyv/FloBaRoID
https://www.hindawi.com/journals/mpe/2015/879581/
http://ctms.engin.umich.edu/CTMS/index.php?aux=Activities_Pendulum
PySINDy: A Python package for the Sparse Identification of Nonlinear Dynamics from Data
Python 프로그래밍 강좌
https://dojang.io/course/view.php?id=7
Python GUI programming
https://wikidocs.net/book/2165
Python-based control
https://apmonitor.com/pdc/index.php/Main/DynamicModeling
https://towardsdatascience.com/a-beginners-guide-to-simulating-dynamical-systems-with-python-a29bc27ad9b1
https://scipython.com/blog/the-double-pendulum/
https://skill-lync.com/projects/Simulation-of-a-Simple-Pendulum-on-Python-95518