개인 프로젝트

2021-2+ Moveit!입문 #1 tf2

InculPark 2021. 12. 23. 15:43
반응형

[Moveit! 공부 1]]

 

원래대로면 이전에 rviz로 urdf를 실행시켜보고 moveit을 이용해 표윤석 박사님의 강의에 나온 방법을 따라서 gazebo에서 manipulator를 moveit으로 구동하는 게 계획이었다.

 

 

하지만 실패했다.....

 

 

Moveit으로 urdf를 불러와 파일들을 생성시키는 것은 성공했는데 계속 생성된 gazebo.launch를 실행시키면

 

Unable to call parseURDF on robot model 

parse as old deprecated model file failed

 

이런 오류가 났다....

 

 

구글링도 해보고 이것저것 건드려봤는데 도저히 될 기미가 보이지 않았다..

 

 

그래서 아예 moveit tutorial로 기초부터 공부하려고 한다.

 

 

https://ros-planning.github.io/moveit_tutorials/

 

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

위의 사이트의 내용을 토대로 공부하려고 한다.

 

 

 

 

 

 

-----------------------------------------------

2021.12.22 

 

위의 moveit tutorial을 토대로 공부하는데 너무 오류도 많이 나고 막히는 게 많았다..

 

 

결정적으로 tutorial을 하면서 설치한 패키지들이 충돌을 일으킨 건지 버전을 잘못 설치한 건지 catkin make 명령이 되지 않는 지경에 이르렀다.

 

 

그래서 패키지를 삭제하다 명령어를 잘못 입력해서 우분투 자체랑 그동안 했던 것을 다 날려먹었다...

 

 

다행히 어제 하루 종일 복구해서 개발 환경이랑 ros_arm의 urdf는 복구했다.

 

 

 

 

하여튼 위의 tutorial이 아닌 다른 한국분이 tutorial을 한국어로 잘 설명해주신 것을 찾아서 그걸 공부해보려 한다.

 

 

moveit설명도 잘 되어 있다는 거 같고 추가로 ros의 기초 개념과 구조를 복습하기에도 좋은 거 같다.

 

 

처음의 ros_arm 계획에서 크게 바뀌었다.

 

https://www.notion.so/byeongkyu/ROS-73000a9914684ac89ed8a835c6963b5e

 

ROS 로봇 프로그래밍

ROS1 (Robot Operating System)에 대한 전반적인 이해 및 다양한 도구 활용 방법 습득 실제 로봇 모델링 및 시뮬레이션 Navigation, MoveIt! 등 로봇 제어를 위한 프레임웍 실습

www.notion.so

 

 

 

 

 

 

----------------------------------------------------------------------------

 

해당 강의의 [ROS Beginner]는 아는 내용이라 간략하고 훑고 [ROS Beginner2]부터 시작했다.

 

 

이전 ros강의처럼 배운 것들을 간략하게 정리했다.

 

 

 

 

2.1 tf2

중요한 내용인 거 같은데 블로그 자료로는 잘 감이 안 와서 추가로 몇 개의 블로그를 더 찾아 공부했다.

 

https://velog.io/@richard7714/ROS-Navigation-tf

 

ROS Navigation - tf

http://wiki.ros.org/navigation/Tutorials/RobotSetup/TF

velog.io

 

●Tf는 각 link마다 갖는 좌표계(이하 frame)의 관계를 토대로 사이의 좌표변환을 해주는 것(패키지?)이다. URDF 작성 때의 개념과 같은 개념인 것 같다. 

 

 

●ros_arm을 예로 들면 arm2의 끝부분의 좌표는 arm2 frame에선 (0.006,0,0)이지만 world_frame에선 top_base와 arm1의 회전에 따라 다른데 이 arm2의 (0.006,0,0)을 다른 frame(world frame포함) 기준으로 바꿔주는 것을 tf가 한다.

 

 

●위 블로그의 예제 실습(cpp이라 완벽하게 이해는 못했지만 대강 구조와 작동방식은 배웠다. 나중에 python기반으로 작성하는 법도 찾아서 실습해봐야겠다.)

 

직접 만든 ros_arm의 tf tree

 

 

 

 

 

 

2.2~2.3 URDF 이해하기 ~ 로봇팔 (LBR iiwa 14 R820) 모델링

●check urdf는 xacro에 대해서는 에러 발생---> xacro를 urdf로 바꿔서 check_urdf사용

 

 

●urdf의 collision 부분은 간단해야 연산 측면에서 빠름

  └ visual과 같은 stl, dae를 사용하기보다 적당한 크기의 기본 도형(육면체, 구 등)을 사용하는 것을 추천

 

 

 

 

 

 

2.3 URDF를 이용해 로봇 만들기

강의에서 제공하는 mobile manipulator를 다운로드하여 실습하려고 했더니 계속 에러가 났다..

 

 

혹시 해서 launch 파일도 ros_arm의 것으로 수정해보기도 했지만 막 해결되지 않았다....

 

 

내가 만든 ros_arm이 비슷한 구조이긴 하니까 실습 ros_arm으로 하기로 하고 개념에 집중했다.

 

 

 

 

그동안 rviz launch파일을 그냥 예제를 가져와서 사용하기만 했는데 이 ch에서 그 구조를 배울 수 있었다.

 

 

로봇의 urdf는 robot_description이라는 parameter로 parameter server에 올라간다.

param name="robot_description" command="$(find xacro)/xacro --inorder $(arg model)"/>

그래서 rviz의 robot_model을 보면 Robot_description 항목에 launch파일 parameter server에 올린 robot_description이 선택되어 있다.

 

 

rviz는 이 parameter에 올라간 urdf를 시각화해주는 것이다.

 

 

robot_state_publisher라는 node는 robot_description parameter를 가져와서 tf로 바꿔준다.

<node pkg="robot_state_publisher" type="robot_state_publisher" name="robot_state_publisher"/>

 

 

+) 여기서 궁금한 점이 하나 생겼었다. robot_state_publisher를 실행시키지 않고 rviz로 robot description을 가져오면 그냥 link만 joint 없이 겹쳐서 나오는데 그러면 'robot_state_publisher는 urdf를 parameter server에서 읽고 tf로 변환해서 다시 robot_description이라는 이름의 parameter로 server에 올리는 것인지?'이다.

 

 

parameter를 잘못 이해한 건지 뭔지는 잘 모르겠지만 궁금하다....

 

 

robot_state_publisher 노드를 뜯어보려고 했는데 roscd로 package를 찾아도 src directory도 없고 소스코드도 없다.....

 

 

나중에 한번 자세히 조사해봐야 할 거 같다.

 

 

 

 

추가로 joint_state_publisher node 또한 robot_description parameter를 읽어 fixed가 아닌 joint를 찾아 임시로 움직여볼 수 있게 해주는 것이다.

<node pkg="joint_state_publisher_gui" type="joint_state_publisher_gui" name="joint_state_publisher"/>

 

 

 

 

 

 

========================================================================

정확한 정보 전달보단 공부 겸 기록에 초점을 둔 글입니다.

틀린 내용이 있을 수 있습니다.

틀린 내용이나 다른 문제가 있으면 댓글에 남겨주시면 감사하겠습니다.   : )

========================================================================

반응형