stl 파일 모델을 Gazebo에 불러와 장애물을 만들어보겠다.
rviz에서는 scene object를 통해 stl파일 모델을 쉽게 불러올 수 있지만
그렇게 불러온다고 Gazebo 상에 물체가 나타나는 것이 안 될뿐만 아니라,
뎁스 카메라가 감지하지 못 하기 때문에 Gazebo에 불러올 줄 알아야 한다.
1. stl 파일을 dae파일 형식으로 변환한다.
Blender 프로그램을 다운 받아서 (https://www.blender.org/download/)
불러오기 (import)로 stl파일을 불러온 뒤
내보내기 (expoert)로 내보낼 때 확장자명을 dae로 저장한다.
사진 오른쪽처럼 위치나 회전 축적을 본인의 입맛에 맞게 바꾸면 된다.
2. Home/.gazebo/models/obstacle/meshes 경로에 dae파일을 넣어준다.
터미널로는 그냥 cd 명령어로 이동가능하고
GUI를 이용하여 파일들을 클릭하며 이동하려고 하면 Home에서 Crtl+H를 누르면 .gazebo 파일이 보인다.
그 뒤에 models/obstacle/meshes 경로는 직접 만들면 된다.
3. sdf파일을 작성한다.
Home/.gazebo/models/obstacle 경로에 model.sdf 파일을 만들고 다음 내용을 넣어준다.
<?xml version='1.0'?>
<sdf version='1.6'>
<model name="obstacle">
<static>true</static>
<link name="link">
<collision name="collision">
<geometry>
<mesh>
<uri>model://obstacle/meshes/my_wheel.dae</uri>
</mesh>
</geometry>
</collision>
<visual name="visual">
<geometry>
<mesh>
<uri>model://obstacle/meshes/my_wheel.dae</uri>
</mesh>
</geometry>
</visual>
</link>
</model>
</sdf>
uri 부분에 dae파일 경로를 넣어주는데 자신의 것에 맞게 수정해준다.
4. config파일을 작성한다.
sdf파일과 동일한 경로에 model.config 파일을 만들고 다음 내용을 입력한다.
<?xml version="1.0" ?>
<model>
<name>obstacle</name>
<version>1.0</version>
<sdf version="1.6">model.sdf</sdf>
<author>
<name></name>
<email></email>
</author>
<description></description>
</model>
여기서는 따로 변경할 내용은 없다.
5. world파일을 작성한다.
catkin_ws/src/자신이 사용 중인 패키지 에 world폴더를 만들고 (launch 파일과 config 파일이 있는 곳)
empty.world 파일을 만들고 다음 내용을 넣어준다.
<?xml version="1.0"?>
<sdf version="1.4">
<world name="default">
<scene>
<ambient>0.4 0.4 0.4 1</ambient>
<background>0.7 0.7 0.7 1</background>
<shadows>true</shadows>
</scene>
<!-- A global light source -->
<include>
<uri>model://sun</uri>
</include>
<!-- A ground plane -->
<include>
<uri>model://ground_plane</uri>
</include>
<include>
<pose> 2.0 -2.0 0.0 0.0 0.0 0.0 </pose>
<uri>model://obstacle</uri>
</include>
<physics type="ode">
<real_time_update_rate>1000.0</real_time_update_rate>
<max_step_size>0.001</max_step_size>
<real_time_factor>1</real_time_factor>
<ode>
<solver>
<type>quick</type>
<iters>150</iters>
<precon_iters>0</precon_iters>
<sor>1.400000</sor>
<use_dynamic_moi_rescaling>1</use_dynamic_moi_rescaling>
</solver>
<constraints>
<cfm>0.00001</cfm>
<erp>0.2</erp>
<contact_max_correcting_vel>2000.000000</contact_max_correcting_vel>
<contact_surface_layer>0.01000</contact_surface_layer>
</constraints>
</ode>
</physics>
</world>
</sdf>
include uri model://obstacle 경로를 자신이 설정한 경로에 맞게 입력해준다.
그리고 위에 pose로 불러오는 모델의 xyz위치 rpy회전을 변경할 수 있다.
6. gazebo.launch 파일을 수정한다.
launch/gazebo.launch 파일을 열어서
<!-- startup simulated world -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" default="worlds/empty.world"/>
<arg name="paused" value="$(arg paused)"/>
<arg name="gui" value="$(arg gazebo_gui)"/>
</include>
다음 내용에서 default로 설정되어 있는 world 경로를
<!-- startup simulated world -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="world_name" value="$(find dyros_ex)/world/empty.world"/>
<arg name="paused" value="$(arg paused)"/>
<arg name="gui" value="$(arg gazebo_gui)"/>
</include>
좀 전에 만든 world경로로 바꿔준다.
그리고 실행하면 된다!
'정나우 > ROS' 카테고리의 다른 글
MoveIt!을 이용한 2-axis Prismatic joint Gazebo에서 구현하기 (0) | 2022.08.04 |
---|---|
[에러해결] start point deviates from current robot state more than 0.01 joint (0) | 2022.07.25 |
무브잇으로 만든 매니퓰레이터에 뎁스카메라 설치하기 (0) | 2022.07.20 |
MoveIt으로 만든 매니퓰레이터 Gazebo와 연동하기 (0) | 2022.07.19 |
URDF, Xacro로 매니퓰레이터 만들기 (0) | 2022.07.18 |
댓글