Make a model - modulabs/gazebo-tutorial GitHub Wiki
์ด๋ฒ ํํ ๋ฆฌ์ผ์ SDF ๋ชจ๋ธ์ ๊ฐ์ฒด์ ๋ํ ์ธ๋ถ์ฌํญ๋ค์ ์์ ํ๋ค.
SDF ๋ชจ๋ธ๋ค์ ๋จ์ํ ํํ์์ ๋ณต์กํ ๋ก๋ด๊น์ง ๋ํ๋ผ ์ ์๋ค. ์ด๊ฒ์ <model> SDF tag์ ์ฐ๊ด ๋์ด ์๊ณ ์ด๊ฒ์ ๋งํฌ, ์กฐ์ธํธ ์ถฉ๋ ๊ฐ์ฒด, ์๊ฐ์ ์ธ ์์, ํ๋ฌ๊ทธ์ธ๋ค์ ๋ชจ์์ด๋ค. ๋ชจ๋ธ ํ์ผ์ ์์ฑํ๋ ๊ฒ์ ์ํ๋ ๋ชจ๋ธ์ ๋ณต์ก์ฑ์ ์์กดํ๊ธฐ ๋๋ฌธ์ ์ด๋ ค์ธ ์ ์๋ค. ์ด๋ฒ ํ์ด์ง๋ ๋น์ ์ ๋ชจ๋ธ์ ์ด๋ป๊ฒ ๋ง๋ค ์ ์๋์ง์ ๊ดํด ๋ช๊ฐ์ง ํ์ ์ ๊ณตํ ๊ฒ์ด๋ค.
link๋ ๋ชจ๋ธ์ ํ๋์ body์ ๋ฌผ๋ฆฌ์ ์ธ ์ ๋ณด๋ฅผ ๋ด๊ณ ์๋ค. ์ด๊ฒ์ wheel๋ ์ ์๊ฑฐ๋ joint ์ฐ๊ฒฐ์์ ํ๋์ link์ผ ์ ์๋ค. ๊ฐ link๋ ๋ง์ ์ถฉ๋๊ณผ ์๊ฐ์ ์์๋ฅผ ํฌํจํ๋ค. ์ฑ๋ฅ๊ณผ ์์ ์ฑ์ ํฅ์์ํค๊ธฐ ์ํด ๋น์ ์ ๋ชจ๋ธ์์ Link์ ์๋ฅผ ๊ฐ์์ํค๋๋ก ๋ ธ๋ ฅํด์ผ ํ๋ค. ์๋ฅผ ๋ค์ด ํ์ ๋ชจ๋ธ์ 5๊ฐ์ link(๋ค๋ฆฌ:4๊ฐ, ์ํ:1๊ฐ)๊ฐ ์กฐ์ธํธ๋ฅผ ํตํด ์ฐ๊ฒฐ ๋์ด ์๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ๋ชน์ ๋ณต์กํ๋ค. ํนํ ๊ฐ ์กฐ์ธํธ๋ค์ ๊ฒฐ์ฝ ์์ง์ด์ง ์๊ธฐ ๋๋ฌธ์ ๋์ ํ์๋ 1๊ฐ link์ 5๊ฐ ์ถฉ๋ ์์๋ก ๋ง๋ค์ด์ผ ํ๋ค.
collision ์์๋ ์ถฉ๋ ์ฒดํฌ๋ฅผ ํ๊ธฐ ์ํด ์ฌ์ฉ๋๋ ๊ธฐํํ ๊ตฌ์กฐ๋ฅผ ํฌํจํ๋ค. ์ด๊ฒ์ ๋จ์ํ ํํ(์ ํธ ๋๋ค.)๊ฐ ๋ ์ ๋ ์๊ณ ์ผ๊ฐํ ๋ฉ์๊ฐ(๋ ๋ง์ ์์์ด ์๋ชจ๋๋ค.) ๋ ์ ์๋ค. ํ๋์ Link๋ ๋ง์ ์ถฉ๋ ์์๋ฅผ ํฌํจํ๋ค.
visual ์์๋ link์ ํํธ๋ค์ ์๊ฐ์ ์ผ๋ก ํ๋ดํฐ๊ธฐ ์ํด ์ฌ์ฉ๋๋ค. ํ๋์ link๋ 0๊ฐ ํน์ ๊ทธ ์ด์์ visual ์์๋ฅผ ๊ฐ์ง๋ค.
inertial ์์๋ Link์ ์ง๋๊ณผ ํ์ ๊ด์ฑ ํ๋ ฌ๊ณผ ๊ฐ์ ๋์ญํ ์ ๋ณด๋ฅผ ๋ฌ์ฌํ๋ค.
์ผ์๋ ํ๋ฌ๊ทธ์ธ๋ค์์ ์ฌ์ฉ๋๋ world๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ํ๋ํ๋ค. ํ๋์ link๋ 0๊ฐ ํน์ ๊ทธ ์ด์์ sensor๋ฅผ ๊ฐ์ง๋ค.
light ์์๋ link์ ๋ถ์ด ์๋ light ์์ค๋ฅผ ๋ฌ์ฌํ๋ค. ํ๋์ link๋ 0๊ฐ ํน์ ๊ทธ ์ด์์ light์ ๊ฐ์ง๋ค.
ํ๋์ joint๋ ๋๊ฐ์ link๋ฅผ ์ฐ๊ฒฐํ๋ค. ๋ถ๋ชจ ์์๊ด๊ณ๊ฐ ์ถ์ ํ์ ๊ณผ ์กฐ์ธํธ์ ๋ฆฌ๋ฐ๋ฑ๊ณผ ๊ฐ์ ๋ค๋ฅธ ํ๋ผ๋ฏธํฐ๋ค์ ๋ฐ๋ผ ํ์ฑ๋๋ค.
ํ๋์ plugin์ ํ๋์ ๋ชจ๋ธ์ ์ ์ดํ๊ธฐ ์ํด ์ 3์์ ์ํด ์์ฑ๋ ๊ณต์ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
์ด๋ฒ ์คํ ์์ ๋น์ ์ ๋ชจ๋ธ์ ๊ตฌ์ถํ๋๋ฐ ํ์ํ 3D mesh ํ์ผ์ ์ฐพ๋ ๋ฐฉ๋ฒ์ ๋ํด ์ด์ผ๊ธฐํ๊ฒ ๋ค. ๊ฐ์ ๋ณด๋ ๋ฐ์ค, ๊ตฌ, ์ค๋ฆฐ๋์ ๊ฐ์ ๊ฐ๋จํ ํํ์ ์ ํธ๋ฅผ ์ ๊ณตํ๋ค. ๋ง์ฝ ๋น์ ์ ๋ชจ๋ธ์ด ํจ์ฌ ๋ณต์กํ ํํ๋ฅผ ํ์๋ก ํ๋ค๊ณ ํ๋ค๋ฉด ๊ณ์ ํด์ ์ฝ์ด๋ผ.
Meshes๋ค์ ๋ค์ํ ๊ณณ์์ ์ป์ ์ ์๋ค. Google's 3D warehouse๋ ์ข์ 3D ๋ชจ๋ธ์ ์ ์ฅ์ ์ด๋ค. ์ด ๋์ ์ผ๋ก ๋น์ ์ ์ด๋ฏธ ํ์ํ ํ์ผ๋ค์ ๊ฐ์ง๊ณ ์๋ค. ๋ง์ง๋ง์ผ๋ก ๋น์ ์ Blender ํน์ Sketchup๊ณผ ๊ฐ์ 3D ๋ชจ๋ธ ๋ง๋๋ ๊ฒ์ ํ์ฉํ์ฌ ๋น์ ์์ ๋ง์ mesh๋ค์ ๋ง๋ค ์ ์๋ค. ๊ฐ์ ๋ณด๋ STL, Collada, OBJ๋ก ํฌ๋งท์ด ๋ meshํ์ผ๋ค์ ํ์๋ก ํ๋ค.
-
Tip : mesh๋ฅผ ์์ ์ ์ผํฐ์ ์์น ์ํค๋๋ก ์ด๋ ์ํค๊ธฐ ์ํด์ ๋น์ ์ 3D ๋ชจ๋ธ๋ง ์ํํธ์จ์ด๋ฅผ ์ฌ์ฉํด๋ผ. ์ด๊ฒ์ ๊ฐ์ ๋ณด์์ ๋ชจ๋ธ์ ์์น์ํค๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์ฝ๊ฒ ๋ ๊ฒ ์ด๋ค.
-
Tip : Collada, OBJ ํ์ผ ํฌ๋งท์ ๋น์ ์ด material์ mesh์ ๋ถ์ด๋ ๊ฒ์ ํ์ฉํ๋ค. ์ด๋ฐ ๋ฉ์นด๋์ฆ์ ํ์ฉํ๋ ๊ฒ์ ๋น์ ์ mesh์ ์๊ฐ์ ์ธ ๋ชจ์ต์ ํฅ์ ์ํจ๋ค.
-
Tip : mesh๋ฅผ ๋จ์ํ ์์ผ๋ผ. ์ด๊ฒ์ ๋น์ ์ด ์ถฉ๋ ์์๋ก์ mesh๋ฅผ ์ฌ์ฉํ ์์ ์ด๋ผ๋ฉด ๋ง๋ ๋ง์ด๋ค. ์ถฉ๋ ์์๋ก ์ ์์ค์ ๋ค๊ฐํ mesh๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๊ฐ์ ์์๋ก ๊ณ ์์ ์ ๋ค๊ฐํ mesh๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์ผ๋ฐ์ ์ธ ๊ดํ์ด๋ค. ํจ์ฌ ๋ ๋์ ์ต๊ด์ ์ถฉ๋ ์์๋ก ์ด๋ฏธ ์ ๊ณตํ๋ ํํ(๋ฐ์ค, ๊ตฌ, ์ค๋ฆฐ๋) ์ค ํ๋๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด๋ค.
-
Tip : Onshape๋ ์น๊ธฐ๋ฐ ์บ๋ ์ํํธ์จ์ด๋ก ๋ฐ์ดํฐ๋ฅผ exportํ ๋ Collada์ STL ํฌ๋งท์ ์ง์ํด ์ค๋๋ค. ์ด๋ฅผ ์ด์ฉํ๋ฉด ๊ฐ๋จํ ๋ชจ๋ธ์ ์์ฝ๊ฒ ์ ์ํ ์ ์์ต๋๋ค.
์์ฃผ ๋จ์ํ ๋ชจ๋ธ ํ์ผ์ ๋ง๋๋ ๊ฒ์ผ๋ก ์์ํ๊ฑฐ๋ ๊ธฐ์กด ๋ชจ๋ธ ํ์ผ์ ๋ณต์ฌํด๋ผ. ์ฌ๊ธฐ์ ํต์ฌ์ ๋น์ ์ด ์๊ณ ์๋ ์์ ์ด๋ ๋งค์ฐ ์ฝ๊ฒ ๋๋ฒ๊น ํ ์ ์๋ ๊ฒ์ผ๋ก ์์ํ๋ ๊ฒ์ด๋ค. ์ฌ๊ธฐ ๋งค์ฐ ๊ฐ๋จํ๊ณ ์ต์ํ์ ๋ฐ์ค ๋ชจ๋ธ์ด ์๋ค. ์ด ๋ฐ์ค ๋ชจ๋ธ์ ๋จ์ ์ฌ์ด์ฆ์ ์ถฉ๋ ๊ธฐ๊ตฌํ์ ํํ๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ๋จ์ ๊ด์ฑ ํ๋ ฌ์ ๊ฐ์ง๋ค.
box.sdf ๋ชจ๋ธ ํ์ผ์ ์์ฑํด๋ผ.
$ gedit box.sdf
box.sdf ํ์ผ์ ๋ค์์ ๋ด์ฉ์ ๋ณต์ฌํด๋ผ.
<?xml version='1.0'?>
<sdf version="1.4">
<model name="my_model">
<pose>0 0 0.5 0 0 0</pose>
<static>true</static>
<link name="link">
<inertial>
<mass>1.0</mass>
<inertia> <!-- inertias are tricky to compute -->
<!-- http://gazebosim.org/tutorials?tut=inertia&cat=build_robot -->
<ixx>0.083</ixx> <!-- for a box: ixx = 0.083 * mass * (y*y + z*z) -->
<ixy>0.0</ixy> <!-- for a box: ixy = 0 -->
<ixz>0.0</ixz> <!-- for a box: ixz = 0 -->
<iyy>0.083</iyy> <!-- for a box: iyy = 0.083 * mass * (x*x + z*z) -->
<iyz>0.0</iyz> <!-- for a box: iyz = 0 -->
<izz>0.083</izz> <!-- for a box: izz = 0.083 * mass * (x*x + y*y) -->
</inertia>
</inertial>
<collision name="collision">
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
</collision>
<visual name="visual">
<geometry>
<box>
<size>1 1 1</size>
</box>
</geometry>
</visual>
</link>
</model>
</sdf>๋ฐ์ค ๊ธฐ๊ตฌ์ ์์ ์ ๋ฐ์ค ๊ธฐ๊ตฌํ์ ์ค์ฌ์ ์์นํด ์๋ค. ๋ฐ์ค์ ๋ฐ๋ฅ์ด ์ง๋ฉด์ ๋์ด์ ๊ฐ๋๋ก ํ๊ธฐ์ํด์ <pose>0 0 0.5 0 0 0</pose>์ด ์ถ๊ฐ ๋์ด์ผ ํ๋ค.
- Tip : ์์ ์์ ๋ simple box model์ static์ผ๋ก ์ค์ ํ์๋ค. ์ด๊ฒ์ ๋ชจ๋ธ์ ์์ง์ด์ง ๋ชปํ๋๋ก ํ๋ค. ์ด ํน์ง์ ๋ชจ๋ธ์ ์์ฑํ๋ ์ค์ ์ ์ฉํ๋ค. ์ผ๋จ ๋น์ ์ ๋ชจ๋ธ ์์ฑ์ด ์๋ฃ๋๊ณ ๋ํ ๋น์ ์ ๋ชจ๋ธ์ด ์์ง์ผ ์ ์๋๋ก ํ๊ธฐ ์ํ๋ค๋ฉด ํ๊ทธ๋ฅผ false๋ฅผ ๋ฐ๊พธ์ด๋ผ.
.sdf ํ์ผ๋ก ์ผ์ ํ๋ฉด์ ์ฒ์ฒํ ํจ์ฌ ๋ณต์กํ ๋ชจ๋ธ๋ก ์ถ๊ฐ๋ฅผ ์์ํด๋ผ. ๊ฐ ์๋ก์ด ์ถ๊ฐ์ ํจ๊ป ๋น์ ์ ๋ชจ๋ธ์ด ์ ํํ๋๋ก graphical client๋ฅผ ์ฌ์ฉํด์ ๋ชจ๋ธ์ ๋ก๋ํด๋ผ. ์ฌ๊ธฐ์ ํน์ง๋ค์ ์ถ๊ฐํ๊ธฐ ์ํด ์ข์ ์์๋ฅผ ์ ์ํ๋ค.
- link ์ถ๊ฐ
- collision ์์ ์ค์
- visual ์์ ์ค์
- inertial properties ์ค์ (ํ์)
- 1๋ก ๋์๊ฐ๋ผ ๋ชจ๋ link๋ค์ด ์ถ๊ฐ ๋ ๋๊น์ง
- ํ์ํ๋ค๋ฉด ๋ชจ๋ joint๋ฅผ ์ถ๊ฐํด๋ผ.
- ํ์ํ๋ค๋ฉด ๋ชจ๋ plugin์ ์ถ๊ฐํด๋ผ.