티스토리 뷰

이번 글은 약 7개월 동안 pykin이라는 라이브러리를 개발해 온 과정과 공부할 때 도움되었던 자료를 공유하고자 한다.

학부생 수준의 코드로 짜여 있기 때문에 라이브러리 라고 하기엔 부끄럽지만, 라이브러리 결과가 아닌 과정에 초점을 두려 한다.

아직 수정할 부분과 구현해야 하는 부분이 많이 남아 있음에도, 더 이상 블로그 글을 미루지 않기 위해 지금 구현된 내용으로 글을 쓰려 한다.

 

GitHub - jdj2261/pykin: Python robot's kinematics and planning library

Python robot's kinematics and planning library. Contribute to jdj2261/pykin development by creating an account on GitHub.

github.com

 

첫번째 글에서 소개한 것처럼 필자의 최종 목표는 Mujoco에서 Task and Motion Planning을 진행하는 것이다.

 

Task and Motion Planning 연구 목적은 어떤 작업이 주어졌을 때, 로봇의 모션 플래닝 알고리즘을 통해 그 작업을 수행하기 위함이다. 이 연구와 관련하여, 최근 카이스트 AI 대학원의 김범준 교수님께서 발표하신 영상을 적극 추천한다.

https://www.youtube.com/watch?v=TOw4w9KJb9Q 

 

모션 플래닝 뿐만 아니라 로봇공학을 공부할 때 기본적으로 Kinematics를 알아야 한다. 수학에서 사칙 연산과 같은 느낌이다.

구글링을 해보면 워낙 잘 나와 있어서 쉽게 이해할 수 있는데, 개인적으로 도움이 많이 되었던 블로그는 아래의 블로그이다.

 

로봇 기구학: 정기구학(Forward kinematics)과 역기구학(Inverse kinematics)

1.1 로봇 기구학: 정기구학(Forward kinematics)과 역기구학(Inverse kinematics) 1.2 로봇 말단부의 위치에 대한 역기구학 1.3 로봇 말단부의 위치와 자세에 대한 역기구학 1.4 로봇 말단부의 위치와 자세에 대

blog.daum.net

Kinematics를 공부하면서 노트에 정리하거나 블로그에 정리하는 것도 좋은 방법이지만, 필자의 경우 직접 구현을 해 보는것이 가장 기억에 남았다. 

사실, 교수님께서 인턴 기간동안 라이브러리를 만들어 보면 나중에 많은 도움이 될 것이라는 의견을 주셔서 시작하게 되었다. 

 

그래서 작년 여름 방학동안 진행했던 과제는 6 자유도 매니퓰레이터의 Inverse Kinematics 해를 구하는 라이브러리를 만드는 것이었다. 학부 때, 로보틱스를 전공했지만 머릿 속에 남아 있는게 없어서 밑바닥부터 시작하였다.

 

우선, 필자처럼 처음 공부하려는 학생들을 위해 도움되었던 자료(교재, 유튜브 영상, 블로그, Github)를 공유하려 한다.

정말 많은 자료들이 있지만, 글 내용이 길어질 수 있으므로 핵심이 되는 자료를 공유하겠다.

Kinematics 공부할 때 도움되었던 자료

1. 교재

우선 필자의 경험으로 로보틱스 공부를 위한 세 개의 교재를 추천한다.

1.  Introduction to Robotics (John J. Craig)

http://www.mech.sharif.ir/c/document_library/get_file?uuid=5a4bb247-1430-4e46-942c-d692dead831f&groupId=14040 

 

2. Introduction to Humanoid Robotics (Shuuji Kajita)

https://link.springer.com/book/10.1007/978-3-642-54536-8

 

3. Modern Robotics (KEVIN M. LYNCH, FRANK C. PARK)

http://hades.mech.northwestern.edu/images/7/7f/MR.pdf

 

위 교재 모두 추천한 이유가 있다.

첫 번째는 로보틱스 입문을 위한 교과서이며, 실제로 학부 때 이 책으로 수업을 들었다.

 

두 번째는 라이브러리를 개발할 때 참고한 서적이다. 매틀랩으로 짜여 있는 예제 코드가 나와 있어서 실제 개발할 때 많은 도움이 되었다. 아래 주소를 들어가보면 책에나와 있는 매틀랩 코드가 정리 되어있다.

 

GitHub - s-kajita/IntroductionToHumanoidRobotics: Matlab code for a Springer book "Introduction to Humanoid Robotics"

Matlab code for a Springer book "Introduction to Humanoid Robotics" - GitHub - s-kajita/IntroductionToHumanoidRobotics: Matlab code for a Springer book "Introduction to Humanoid Robo...

github.com

 

마지막으로 우연히 MIT 공대 Russ Tedrake 교수님의 매니퓰레이터 강의를 유튜브로 라이브 송출하는 영상을 보게 되었는데, 꽉 막혀있던 혈관이 뚫린 느낌을 받았다. (물론 영어를 못 해서 라이브로 강의를 들었을 때 이해가 제대로 안 됐지만, 계속 반복해서 보다 보니 어떤 내용인지 짐작할 수 있었다.) 이 수업의 주 교재가 Modern Robotics 이다.

아래는 교수님 연구실에서 정리한 블로그인데 정말 많은 도움이 되었다.

 

Robotic Manipulation

I've always loved robots, but it's only relatively recently that I've turned my attention to robotic manipulation. I particularly like the challenge of building robots that can master physics to achieve human/animal-like dexterity and agility. It was passi

manipulation.csail.mit.edu

아래 주소는 유튜브 주소이다.

 

underactuated

Online course content from Russ Tedrake @ MIT Includes: - MIT 6.832 - Underactuated Robotics (Spring) - MIT 6.881 - Robotic Manipulation (Fall)

www.youtube.com

 

정말 유명한 책들이다 보니, 구글링을 해서 PDF 파일로 볼 수 있었지만, 두 번째 책은.. 돈을 내야 했던 것 같다. 두 번째 책이 궁금하신 분들은 댓글로 이메일 주소를 남겨 주시면 공유하려고 한다.

 

2. 유튜브 강의

비대면 수업 진행할 때 녹화했던 영상을 유튜브에 올려주신 덕분에 양질의 강의들을 쉽게 들을 수 있었고, 이해가 안되거나 막힐 때 마다 반복해서 시청하였다. 주어진 시간이 부족하다면 아래 강의들 중 하나를 선택해 몇 배속해서 듣는 것을 추천한다. 쉽게 설명해 주시기 때문에 충분히 이해 가능하다. 필자는 송재복 교수님 강의를 주로 들었다.

 

1. 고려대학교 기계공학부 송재복 교수님 강의 (로봇공학)

https://www.youtube.com/channel/UCl-b60XKl2zxvBv3uiVvvbw/videos

2. 목원대학교 로봇학부 양정연 교수님 강의 (robotics)

https://www.youtube.com/playlist?list=PL3Ax8f2laJ6uD3Rdze-Er0jTnt_QUAjdx 

3. 한국항공대학교 항공우주기계공학부 권상주 교수님 강의 (로봇공학)

https://www.youtube.com/playlist?list=PLxbCaZP0x-lt9EBgb-ERjW1W-wJNRd5XL 

4. 경희대학교 전자공학과 김동한 교수님 강의 (로봇제어공학)

https://www.youtube.com/playlist?list=PLP4rlEcTzeFIPNSRRndLCA4uk0BNdoOU9 

 

3. 블로그

1.ropiens (https://ropiens.tistory.com/)

지금 필자가 쓰고 있는 블로그이며, 로보틱스 뿐만 아니라 딥러닝이나 강화학습에 대해서 정리한 블로그 중 가장 눈높이에 맞는 블로그였다. 실제 연구하고 있는 대학원생과 직장인 분들이 공부하면서 정리한 내용이고, 삽질의 흔적들로 보이는 글들이 넘쳐난다.

어떤 글이든 읽으면 도움이 될 것이라 확신한다.

 

2.미니멀공대생 블로그 (https://m.blog.naver.com/PostList.naver?blogId=nswve )

이 블로그에서 활발하게 활동하시는 분(미니멀공대생)의 개인 블로그이다. 

이제 대학원 생활을 시작하는 필자에게 공부 방향과 팁에 대해 도움이 되었다.

 

3. 오로카 (https://cafe.naver.com/openrt/10561)

로봇을 공부하게 되면 알 수 밖에 없는 국내 최대, 최고의 카페이다. 말이 필요 없다.

 

4. Github (라이브러리 및 코드)

처음부터 무턱대고 라이브러리 개발을 하다보면 많은 어려움 끝에 포기할 확률이 높다.

따라서 잘 구현되어 있고 사용자들이 많은 라이브러리를 참고하는 게 좋다. 든든한 방패와 같은 느낌이다.

 

1. moveit (https://github.com/ros-planning/moveit)

 

GitHub - ros-planning/moveit: The MoveIt motion planning framework

:robot: The MoveIt motion planning framework. Contribute to ros-planning/moveit development by creating an account on GitHub.

github.com

매니퓰레이터의 모션 플래닝을 위한 오픈소스 기반 통합 라이브러리이다. ROS를 사용하는 이유이지 않을까라는 생각이 든다. 

사용법만 아는것도 공부가 될 것이며, 튜토리얼이 워낙 잘 되어있기 때문에 익숙해 지는 것은 시간 문제라고 본다.

ROS indigo 시절부터 배포된 라이브러리이기에 최적화가 잘 되어 있을 것이다. 그만큼 코드 양도 방대해서, 하나하나 들여다 보는게 힘들다. 필자는 구현에 어려움이 있을 때마다 참고하였다.

아래는 Moveit 튜토리얼이며 Ubuntu가 설치된 환경이라면 한 번쯤은 다뤄보는 것을 추천한다.

 

MoveIt Tutorials — moveit_tutorials Noetic documentation

These tutorials will quickly get you, and your robot, using the MoveIt Motion Planning Framework. In these tutorials, the Franka Emika Panda robot is used as a quick-start demo. Alternatively, you can easily use any robot that has already been configured t

ros-planning.github.io

2. pykdl (https://github.com/orocos/orocos_kinematics_dynamics)

 

GitHub - orocos/orocos_kinematics_dynamics: Orocos Kinematics and Dynamics C++ library

Orocos Kinematics and Dynamics C++ library. Contribute to orocos/orocos_kinematics_dynamics development by creating an account on GitHub.

github.com

orocos에서 만든 로봇의 키네마틱스와 다이나믹스를 다루기 위한 라이브러리이다. moveit에서도 kdl 라이브러리를 이용하여 FK, jacobian, IK를 구하고 있다. 추가적으로 아래 페이지를 들어가 보면, Moveit 패키지는 Collision 체크를 확인하기 위해서 FCL 라이브러리를 이용한다는 것도 알 수 있다.

 

Kinematics — MoveIt Documentation: Galactic documentation

The Kinematics Plugin MoveIt uses a plugin infrastructure, especially targeted towards allowing users to write their own inverse kinematics algorithms. Forward kinematics and finding jacobians is integrated within the RobotState class itself. The default i

moveit.picknik.ai

pykdl은 c++ 기반으로 짜여진 kdl 라이브러리를 python으로 사용할 수 있도록 wrapping한 것이다.

아래의 페이지들은 pykdl을 이용한 매니퓰레이터(panda, baxter, sawyer 로봇) 예제이다.

어떤 식으로 짜야할 지 감이 잡힐 것이다.

3. ikpy (https://github.com/Phylliade/ikpy)

 

GitHub - Phylliade/ikpy: An Inverse Kinematics library aiming performance and modularity

An Inverse Kinematics library aiming performance and modularity - GitHub - Phylliade/ikpy: An Inverse Kinematics library aiming performance and modularity

github.com

이 라이브러리는 inverse kinematics를 계산해주는 것 뿐만 아니라 로봇의 link, joint, end effector의 자세를 시각화해준다.

튜토리얼도 잘 만들어졌고, ikpy를 사용하시는 분들이 많다. 이 라이브러리를 사용한 데모 영상도 볼 수 있다.

필자의 라이브러리 컨셉도 ikpy 라이브러리와 비슷하다고 볼 수 있으며, 시각화를 구현할 때 참고하였다.

 

보시다시피 특별한 자료들은 없고, 구글링 하면 나오는 자료들이다.

위 자료들로도 충분히 이해가 가능할 것이라 보고, 여기까지 Kinematics를 공부하면서 도움되었던 자료 정리를 마치고자 한다.

 

다음 챕터는 pykin 라이브러리의 구성 및 Kinematics 예제에 대한 글이 될 것이며, 코드를 보고 궁금하거나 수정해야 할 부분이 있다면 댓글로 꼭 남겨주시길 바란다. 더 나은 라이브러리를 만드는게 앞으로의 목표이기도 하다.

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30