본문 바로가기

개인 프로젝트

2021-2+ Moveit!입문 #2 Gazebo

반응형

[Moveit! 공부2]

 

2.4~2.4.1 Gazebo, ROS_control

●gazebo에 urdf를 불러오는 방법 : spawn_model node를 사용

$ rosrun gazebo_ros spawn_model -file MYROBOT.urdf -urdf -x 0 -y 0 -z 0 -model MYROBOT

 

터미널에 명령으로 불러올 경우 

 

1. roslaunch로 gazebo가 실행된 상태여야 함(그냥 ros를 거치지 않고 gazebo를 실행시키면 안 됨)

 

2. 아래 명령어를 통해 사용법, 옵션 도움말 확인 가능

$ rosrun gazebo_ros spawn_model -h 

 

3. -urdf : urdf파일로 gazebo에 모델을 불러옴, -sdf면 sdf형식을 불러오는 듯

 

 

 

 

●위의 node를 launch파일로 실행할 경우

<launch>

<include file="$(find gazebo_ros)/launch/empty_world.launch"/>
<arg name="model" default="$(find ros_arm)/urdf/ros_arm.urdf.xacro"/>
<param name="robot_description" command="$(find xacro)/xacro --inorder $(arg model)"/>
<node name="spawn_urdf" pkg="gazebo_ros" type="spawn_model" args="-param robot_description -urdf -model MYROBOT"/>

</launch>

launch파일을 구성할 경우

 

1. 강의 글에는 gazebo 실행 부분이 빠져있어서 <include file~~/>부분으로 추가해줌

 

2. urdf에 link의 <inertial> tag가 꼭 있어야 하고 값이 있어야 함

 

3. urdf에 <gazebo> tag로 gazebo 플러그인 추가

 

4. joint를 움직일 거면 urdf에 <transmission> tag가 있어야 함  

 

 

 

 

 

 

2.4.2 물성치(inertial) 구하기

●그동안은 inertial값을 windows의 inventor에서 link 제작 --> iproperties로 값 확인 --> 사진 or 메모 --> 우분투로 다시 시작 --> urdf에 메모한 값 적용으로 귀찮은 과정을 거쳤는데 그럴 필요가 없었다.

 

 

●온라인에서 onshape로 확인할 수도 있고, Meshlab을 리눅스에 설치해서 확인할 수도 있다.

 

 

 

 

 

 

2.4.3 Gazebo에 불러오기

일단 시키는 대로 했는데 처음으로 안 되는 부분이 나왔다.

 

 

이전에 quadruped 할 때도 비슷한 문제를 겪었던 거 같은데 미묘하게 다른 거 같다.

 

 

URDF상에서는 전혀 문제가 없고 rviz상에서도 문제없이 작동하는 데 gazebo에서만 자꾸 문제가 발생한다.

 

 

 

 

●문제의 요지는 joint type이 revolute로 된 부분만 정상적으로 link가 붙어있지 않고 그냥 바닥에 떨어져 있다는 것이다.

 

 

type을 fixed로 바꿔 실행하면 정상적인 형태로 나온다..

 

 

 

 

●개인적인 추측으로는(정말 그냥 느낌) ros_control과 transmission 쪽에서 고쳐야 할 거 같은데 생각나는 방법을 다 해봐도 해결이 안 됐다..

 

 

일단은 2.5 ros_control까지 진행하고 그래도 안된다면 오로카에 질문을 올려봐야겠다.

문제의 상태

 

revolute joint를 임시로 fixed로 바꾼 경우

 

 

+)

 

위의 문제를 해결 안 하고 다음 장으로 넘어갈 수가 없어서 하루 반 동안 urdf랑 launch파일을 계속 계속 검토했다.

 

 

구글링 하니까 joint의 parent나 child의 inertial이 없을 때 발생하는 문제라고 해서 계속 오타나 뭐가 빠진 게 있나 찾아보고 수정했지만 도저히 안됐다.

 

 

그러다 혹시나 해서 0.0으로 되어있던 <inertial>의 <inertia>에 임의의 값을 넣었더니 갑자기 urdf가 정상적으로 나왔다.

(이전에 quadruped 할 때는 이 부분이 비워져 있어도 됐던 거로 기억해서 일단 비워뒀었다) 

 

 

방법을 알고 있는 것을 몇 시간 동안 빙빙 돌아 찾았다고 생각하니 많이 허무했다...

 

 

그래도 찾았으니 다행이다..

 

 

 

 

 

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

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

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

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

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

반응형