+) 12강 서비스 로봇은 간단한 설명 위주라 따로 복습은 하지 않았다.
●13강
https://www.youtube.com/watch?v=5c7s4jgB00k
표윤석 박사님의 ROS강의 마지막 챕터였다.
●Keyword
-Manipulation, MoveIt!, KDL, OMPL, [Base, Link, Joint, End effect], xyz+rpy, 작업공간, 관절 공간, forward Kinematics, Inverse Kinematics, URDF,. xacro, OpenManipulator, MoveIt setup assistant
●Study
앞 강의와는 달리 기계공학의 한 부분을 간략하게 설명하는 것으로 강의를 시작하셨다.
매니퓰레이터의 종류와 특징을 설명하시고 지난 학기(2-1)에 들었던 기구학(Kinematics)에서 배웠던 내용을 설명하셨다.
그중 내가 새로 배운 것만 정리해보면
-말단 장치(End effector) : Manipulator의 끝 부분으로 잡기, 드릴 등 특정 기능을 수행하게 하거나 모듈형으로 만들어 교체가 가능하게 하는 부분
-xyz-rpy : 자유도를 표현하는 변수에서 xyz는 알고 회전은 그냥 Θx, Θy, Θz로 썼었는데 Roll, Pitch, Yaw로 쓰는 용어가 있었다. 그냥 x축 회전=Θx=r, y축 회전=Θy=p, z 축 회전=Θz=y이다. 두 글자를 한 글자로 줄이니 쓰기는 훨씬 편하겠다.
-작업공간(work/task space), 관절공간(joint space) : 작업공간은 실제 로봇이 움직이는 영역을 xyz의 3차원에 나타낸 공간이고 관절 공간은 로봇의 joint의 각각의 각도(Θ1,Θ2,Θ3.... Θn)로 나타낸 가상의 n차 공간을 나타낸다.
-정 기구학(Forward Kinematics) : 로봇의 joint의 각도(관절 공간)가 주어졌을 때 이를 이용해 말단 장치나 특정 부위의 위치 및 자세(xyz-rpy)를 구하는 것. xyz-rpy는 Θ들에 대해 unique solution을 가진다. 역 기구학에 비해 계산이 쉽다.
-역 기구학(Inverse Kinematics) : 로봇의 말단 장치나 특정 부위의 위치 및 자세가 주어졌을 때 각 joint의 각도들(Θ)을 구하는 것. 정기 구 학과 달리 Θ들은 unique하지 않고 가능한 경우가 많다. 정 기구학에 비해 계산이 매우 복잡하고 어렵다.(사실상 손으로 불가능)
+) 작업/관절 공간, 정/역 기구학은 강의와 아래 블로그를 참고했다. 위의 정리들은 내가 정리했기에 용어나 개념이 정확하지 않을 수 있다. 단지 내가 이해한 대로 적은 것이다.
http://t-robotics.blogspot.com/2013/07/joint-space.html#.YS255nX7SV4
로봇이 움직이는 공간, Joint Space
로봇, 로보틱스, 로봇공학, 로봇 뉴스, robotics, 로봇 수학, 로봇 물리, 로봇 제어, 인공지능, 관절공간, joint space, 작업공간, task space
t-robotics.blogspot.com
기구학과 용어를 정리하고서는 바로 Moveit에 대한 설명으로 넘어갔다.
Manipulator 제어는 센싱, 계획, 실행과 그 과정에서 복잡한 역 기구학, 동역학 계산이 들어가서 매우 어려웠다.
그래서 이를 간단하고 쉽게 할 수 있는 Moveit을 사용하는 거라고 하셨다.
Moveit은 이를 위해 KDL(Kinematics and Dynamics Library), OMPL(Open Motion Planning Library)을 제공한다.
Moveit은 Manipulator의 정보를 SRDF로 받는데 이는 URDF를 작성한 후 Moveit Setup Assistant로 바꿔주면 된다.
이외에도 URDF는 Gazebo에서 쓰는 SDF로도 변환할 수 있다.
즉 우리는 URDF를 잘 작성하기만 하면 Moveit, Rviz(URDF사용), Gazebo를 모두 사용할 수 있다.
URDF는 xml형식으로 작성되며 link, joint의 물리적 정보를 포함한다. 또한 stl, dae 같은 3d 모델링 파일을 포함시킬 수 있다.
이론 설명을 어느 정도 한 후에는 실습으로 넘어갔다.
URDF 작성
1. 패키지 안에 urdf폴더를 만들고, 그 폴더 안에 이름.urdf로 문서를 하나 만든다.
$cs (catin_ws/src로 이동)
$catkin_create_pkg 패키지이름 urdf
*우선 urdf의존성을 갖는 패키지를 catkin으로 만들고 urdf 디렉터리와 파일을 만든다.
*강의에선 예시를 복붙 했지만 추후 ROSwiki의 urdf tutorial을 추가로 혼자 해볼 예정이다.
2. URDF작성이 끝난 후 urdf를 검사한다.
$check_urdf 이름.urdf
$urdf_to_graphiz 이름.urdf
*작성한 urdf에 오류가 없는지 검사하는 과정이다. check_urdf는 터미널상에 urdf에 문제가 없는지 결과가 나오고 urdf_to_graphiz는 그 urdf를 간단한 그래픽으로 .pdf형식으로 저장해준다.
3. URDF모델 확인 및 테스트
강의에서 시키는 대로 launch파일을 작성한 후 roslaunch로 실행
*강의의 launch파일에서 약간 수정을 해야 작동한다. (noetic기준 2021/08/31)
우선
<node pkg="joint_state_publisher" type="joint_state_publisher" name="joint_state_publisher" />
<node pkg="robot_state_publisher" type="state_publisher" name="robot_state_publisher" />
를
<node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher" />
<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher" />
업데이트하면서 노드와 패키지의 이름이 바뀐 거 같다.
정상적으로 roslaunch가 되었으면 joint의 각도를 바꿀 수 있는 창이 뜬다.
4. rviz로 URDF모델 확인
$rviz
add → robot model , Fixed frame → Base
*rviz로 모델을 불러온 후 이전에 킨 창에서 joint를 움직이면 manipulator가 움직인다.
*rqt_graph를 이용해 보면 joint_state_publisher(joint조절 창)에서 각도 값을 publish 하면 robot_state_publisher는 이를 subscribe 해서 계산해 tf메시지로 rviz의 로봇 모델에 publish 하는 구조이다.
*저 tf메시지가 궁금해서 ROSwiki에서 찾아봤더니 내가 예상한 xyz-rpy가 아닌 xyzw의 쿼터니언(Quaternion) 좌표계로 위치와 자세를 전송하고 있었다. c2345 회의 때도 언급되었던 그 좌표계였다. 좀 더 좌표변환의 한 방법으로 xyz-rpy를 xyzw로 표현할 수 있는 방법인 거 같다.(확실X)
+) 메시지를 좀 더 뒤져보니 vector3로 translation(평행이동)을, quaternoion으로 rotation(회전)을 전송하고 있었다. 이 부분은 확실히 공부가 필요하겠다.
좌표변환(tf)과 행렬에 대해서 공부를 제대로 해봐야 할거 같다.
이 이후 부분은 실습을 해보려 해도 계속 오류가 나서 제대로 못했다...
그래서 표윤석 박사님의 ROS강의는 사실상 여기까지이다.
ROS에 대해 기초를 잡고 용어를 배워서 확실히 ROSwiki를 읽거나 다른 자료를 읽는 데에 어려움이 상당히 많이 없어졌다.
이후로는 ROSwiki의 Tutorial 실습과 그 외 이론적인 부분을 공부하려고 한다.
개강해서 방학 때처럼 자주는 못 올려도 틈틈이 공부하고 정리해서 올려야겠다.
===============================================================================
정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.
틀린 내용이 있을 수 있습니다.
틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다. : )
===============================================================================
'팀 프로젝트' 카테고리의 다른 글
C-2345 자세 제어 4족보행 로봇 #14 (Joint publish node 제작, URDF Gazebo에 올리기-정리X) (0) | 2021.09.19 |
---|---|
C-2345 자세 제어 4족보행 로봇 #13 (ROS URDF, Xacro Turorial) (0) | 2021.09.06 |
C-2345 자세 제어 4족보행 로봇 #11 (ROS 10, 11강-모바일 로봇, SLAM, Navigation) (0) | 2021.08.29 |
C-2345 자세 제어 4족보행 로봇 #10 (ROS 이기종 디바이스 간의 통신 실습) (0) | 2021.08.26 |
C-2345 자세 제어 4족보행 로봇 #9 (ROS 9강-임베디드 시스템, rosserial 실습) (0) | 2021.08.23 |