The relationship among Link, Joint and Axis - modulabs/gazebo-tutorial GitHub Wiki

Overview

이번 μž₯μ—μ„œλŠ” Link, Joint, Axis 관계에 λŒ€ν•΄μ„œ μ„€λͺ… ν•˜λ €κ³  ν•©λ‹ˆλ‹€. μ’€ 더 λͺ…ν™•ν•˜κ²Œ κ·Έ 관계에 λŒ€ν•œ κ°œλ…μ„ μž‘λŠ” 것이 이번μž₯의 λͺ©ν‘œ μž…λ‹ˆλ‹€. μ•žμ„œ νŠœν† λ¦¬μ–Όμ—μ„œ λ§Œλ“€μ—ˆλ˜ λͺ¨λ°”일 λ‘œλ΄‡μ„ ν† λŒ€λ‘œ μ„€λͺ…을 μ§„ν–‰ ν•˜κ² μŠ΅λ‹ˆλ‹€.

1. Link

μœ„ κ·Έλ¦Όμ—μ„œ 보듯이 κ°€μ œλ³΄λ₯Ό μ‹€ν–‰ν•˜λ©΄ 쀑심에 빨간색, μ΄ˆλ‘μƒ‰, νŒŒλž€μƒ‰μ˜ 선이 λ‚˜μ˜€κ²Œ λ˜λŠ”λ° 이λ₯Ό μ „μ—­μ’Œν‘œλ‘œ μ§€μΉ­ ν•˜κ² μŠ΅λ‹ˆλ‹€. 각 각은 μ „μ—­μ’Œν‘œμ˜ X(빨간색), Y(μ΄ˆλ‘μƒ‰), Z(νŒŒλž€μƒ‰)λ₯Ό λ‚˜νƒ€λ‚˜κ²Œ λ©λ‹ˆλ‹€. 링크둜 μ‚¬κ°ν˜•, ꡬ, 원기λ‘₯을 생성 ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œλŠ” μ‚¬μ΄μ¦ˆ 0.4X0.2X0.1(m)인 λ°•μŠ€λ₯Ό ν•˜λ‚˜μ˜ 링크둜 λ§Œλ“€μ—ˆμŠ΅λ‹ˆλ‹€. 기본적으둜 λ§Œλ“€κ³ μž ν•˜λŠ” 링크의 κΈ°ν•˜ν•™μ μΈ 쀑심이 μ „μ—­μ’Œν‘œμ— μžˆλ‹€κ³  μƒκ°ν•˜λ©΄ λ©λ‹ˆλ‹€. κ·Έ μ „μ—­μ’Œν‘œμ—μ„œ Xλ°©ν–₯으둜 0.4m, Yλ°©ν–₯으둜 0.2m, Zλ°©ν–₯으둜 0.1m인 μ‚¬κ°ν˜•μ΄ μƒμ„±λ©λ‹ˆλ‹€.

μœ„ κ·Έλ¦Όμ—μ„œ 보듯이 SDFνŒŒμΌμ— λ‚΄κ°€ μƒμ„±ν•œ Link tag λ‚΄μ˜ <pose>0 0 0 0 0 0</pose>λ₯Ό ν†΅ν•΄μ„œ μœ„μΉ˜λ₯Ό μ‘°μ • ν•  μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€. tagμ•ˆμ— μˆ«μžλŠ” x,y,z,Rx,Ry,Rzλ₯Ό μ˜λ―Έν•©λ‹ˆλ‹€. μ•žμ„œ 기본적으둜 링크λ₯Ό 생성할 λ•ŒλŠ” 링크의 κΈ°ν•˜ν•™μ μΈ 쀑심이 κ°€μ œλ³΄μ˜ μ „μ—­μ’Œν‘œμ— 있게 λ©λ‹ˆλ‹€. 그리고 이 μ „μ—­μ’Œν‘œμ™€ 같은 μ’Œν‘œκ°€ 링크에 λΆ™κ²Œ λ©λ‹ˆλ‹€. 이후 pose tag의 값을 λ³€ν™”μ‹œν‚€κ²Œ 되면 κ°€μ œλ³΄μ˜ μ „μ—­μ’Œν‘œλ₯Ό κΈ°μ€€μœΌλ‘œ 링크의 쀑심에 뢙은 μ’Œν‘œκ°€ μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€. κ°€μ œλ³΄μ—μ„œ Insert νƒ­μ—μ„œ λ‚΄κ°€ λ§Œλ“  λͺ¨λΈμ„ λˆ„λ₯΄λ©΄ μ²˜μŒμ— κ°€μ œλ³΄μ˜ μ „μ—­μ’Œν‘œμ— μœ„μΉ˜ν•˜κ²Œ 되고 이후 λͺ¨λΈμ„ μ΄λ™μ‹œμΌœ λ‚΄κ°€ μ›ν•˜λŠ” μœ„μΉ˜μ— λͺ¨λΈμ„ μœ„μΉ˜ μ‹œν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€. μœ„μ˜ κ·Έλ¦Όμ—μ„œ 번호1은 <pose>0 0 0 0 0 0</pose>으둜 μ–΄λ–€ λ³€ν™”κ°€ μ—†λŠ” μƒνƒœ μž…λ‹ˆλ‹€. 번호2λŠ” <pose>0 0 0.05 0 0 0</pose>둜 zλ°©ν–₯으둜 0.05m 만큼 올린 μƒνƒœμž…λ‹ˆλ‹€. 번호3은 <pose>0 0 0.05 0 0 1.57</pose>만큼 μ΄λ™μ‹œν‚¨ μƒνƒœμž…λ‹ˆλ‹€. μ—¬κΈ°μ„œ νšŒμ „μ€ κ°€μ œλ³΄μ˜ μ „μ—­μ’Œν‘œκ³„ κΈ°μ€€μœΌλ‘œ 링크의 λΆ™μ–΄μžˆλŠ” μ’Œν‘œκ³„λ₯Ό νšŒμ „ν•˜κ²Œ λ©λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œλŠ” μ „μ—­μ’Œν‘œκ³„μ˜ zλ°©ν–₯으둜 1.57만큼 링크의 λΆ™μ–΄μžˆλŠ” μ’Œν‘œλ₯Ό νšŒμ „μ‹œμΌ°μŠ΅λ‹ˆλ‹€. 번호4λŠ” <pose>0 0 0.05 0 1.57 1.57</pose> μ—¬κΈ°μ—μ„œ νšŒμ „μ€ μ „μ—­μ’Œν‘œκ³„μ˜ yλ°©ν–₯으둜 1.57만큼 링크에 λΆ™μ–΄ μžˆλŠ” μ’Œν‘œλ₯Ό νšŒμ „μ‹œν‚€κ³  λ‹€μ‹œ μ „μ—­μ’Œν‘œκ³„μ˜ zλ°©ν–₯으둜 1.57만큼 링크의 μ’Œν‘œκ³„λ₯Ό νšŒμ „μ‹œμΌ°μŠ΅λ‹ˆλ‹€.

2. Link - Link 관계

μœ„ κ·Έλ¦Όμ—μ„œ 번호1은 원기λ‘₯을 ν•˜λ‚˜μ˜ 링크둜 κ·Έλ¦° κ²ƒμœΌλ‘œ μ•žμ„œ μ„€λͺ…ν•œλŒ€λ‘œ 기본적으둜 생성은 원기λ‘₯의 κΈ°ν•˜ν•™μ μΈ 쀑심에 링크 μ’Œν‘œκ³„κ°€ μ „μ—­μ’Œν‘œκ³„μ™€ λ™μΌν•˜κ²Œ λΆ™κ²Œ λ©λ‹ˆλ‹€. 번호2λŠ” μ‚¬κ°ν˜• λ°•μŠ€μ™€, 원기λ‘₯을 각 각 링크둜 κ·Έλ¦° κ²ƒμž…λ‹ˆλ‹€. 졜초 μƒμ„±μ‹œ 두 링크의 κΈ°ν•˜ν•™μ μΈ 쀑심이 κ°€μ œλ³΄μ— μ „μ—­μ’Œν‘œμ— μžˆλ‹€κ³  μƒκ°ν•˜κ² μŠ΅λ‹ˆλ‹€. μ‚¬κ°ν˜• λ°•μŠ€μ˜ Link tag 내에 poseλŠ” <pose>0 0 .1 0 0 0</pose>둜 μ‚¬κ°ν˜• λ°•μŠ€μ˜ 링크 μ’Œν‘œκ³„κ°€ μ „μ—­μ’Œν‘œκ³„ κΈ°μ€€μœΌλ‘œ zλ°©ν–₯으둜 0.1m만큼 μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€. μ™Όμͺ½ 바퀴 원기λ‘₯ Link tag 내에 poseλŠ” <pose>0.1 0.13 0.1 0 1.5707 1.5707</pose>으둜 μ „μ—­μ’Œν‘œκ³„ κΈ°μ€€μœΌλ‘œ 링크의 μ’Œν‘œκ³„λ₯Ό νšŒμ „ν•œ ν›„ x,y,z만큼 μ΄λ™ν•˜κ²Œ λ©λ‹ˆλ‹€. μ΄λ ‡κ²Œ 두 링크의 관계가 μ •ν•΄μ§€κ²Œ 되고 이후 두 링크가 κ²°ν•©λœ λͺ¨λΈμ„ κ°€μ œλ³΄λ‚΄μ—μ„œ μ›ν•˜λŠ” μœ„μΉ˜μ— 놓을 수 있게 λ©λ‹ˆλ‹€.

3. Link - Joint 관계, Joint - Axis 관계

μœ„ κ·Έλ¦Όμ—μ„œ 보듯이 μ™Όμͺ½ 바퀴와 였λ₯Έμͺ½ 바퀴가 각 각의 링크둜 각 링크에 μ‘°μΈνŠΈκ°€ λΆ™μ–΄ 있고 κ·Έ μ‘°μΈνŠΈμ— νšŒμ „μΆ•μ΄ μ„€μ • λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

μ™Όμͺ½ 바퀴에 λΆ™μ–΄ μžˆλŠ” 쑰인트의 SDF μ½”λ“œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

      	<joint type="revolute" name="left_wheel_hinge">
        	<pose>0.03 0 -0.03 0 0 0</pose>
        	
		<child>left_wheel</child>
        	<parent>chassis</parent>
        	<axis>
          		<xyz>0 1 0</xyz>
        	</axis>
      	</joint>

μ΅œμ΄ˆμ— μ‘°μΈνŠΈμ— λΆ™μ–΄ μžˆλŠ” μ’Œν‘œκ³„λŠ” child둜 μ§€μ • 해놓은 μ™Όμͺ½ 바퀴에 λΆ™μ–΄ μžˆλŠ” 링크 μ’Œν‘œκ³„μ™€ λ™μΌν•©λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ pose tagλ₯Ό 보면 μ™Όμͺ½ λ°”ν€΄μ˜ 링크 μ’Œν‘œκ³„ κΈ°μ€€μœΌλ‘œ 쑰인트의 μ’Œν‘œκ³„κ°€ xλ°©ν–₯으둜 0.03m, zλ°©ν–₯으둜 -0.03m 이동 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ£Όμ˜ν•΄μ•Ό ν•  점은 νšŒμ „μΆ•μ€ κ°€μ œλ³΄μ˜ μ „μ—­μ’Œν‘œκ³„ κΈ°μ€€μœΌλ‘œ μ„€μ • λœλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ axis tagλ₯Ό 보면 μ „μ—­μ’Œν‘œκ³„μ˜ xλ°©ν–₯으둜 0m, yλ°©ν–₯으둜 1m, zλ°©ν–₯으둜 0mλ₯Ό κ°€λ₯΄ν‚€λŠ” λ°©ν–₯ 벑터가 쑰인트의 μ’Œν‘œμ— λΆ™κ²Œ 되고 이 λ°©ν–₯벑터λ₯Ό κΈ°μ€€μœΌλ‘œ νšŒμ „μΆ•μ΄ μ„€μ • λ©λ‹ˆλ‹€.

였λ₯Έμͺ½ 바퀴에 λΆ™μ–΄ μžˆλŠ” 쑰인트의 SDF μ½”λ“œλŠ” μ•„λž˜μ™€ κ°™μŠ΅λ‹ˆλ‹€.

      	<joint type="revolute" name="right_wheel_hinge">
        	<pose>0 0 0.03 0 0 0</pose>
        	
		<child>right_wheel</child>
        	<parent>chassis</parent>
        	<axis>
          		<xyz>3 1 0</xyz>
        	</axis>
      	</joint>

μ΅œμ΄ˆμ— μ‘°μΈνŠΈμ— λΆ™μ–΄ μžˆλŠ” μ’Œν‘œκ³„λŠ” child둜 μ§€μ • 해놓은 였λ₯Έμͺ½ 바퀴에 λΆ™μ–΄ μžˆλŠ” 링크 μ’Œν‘œκ³„μ™€ λ™μΌν•©λ‹ˆλ‹€. μ—¬κΈ°μ—μ„œ pose tagλ₯Ό 보면 μ™Όμͺ½ λ°”ν€΄μ˜ 링크 μ’Œν‘œκ³„ κΈ°μ€€μœΌλ‘œ 쑰인트의 μ’Œν‘œκ³„κ°€ zλ°©ν–₯으둜 0.03m 이동 λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

axis tagλ₯Ό 보면 μ „μ—­μ’Œν‘œκ³„μ˜ xλ°©ν–₯으둜 3m, yλ°©ν–₯으둜 1m, zλ°©ν–₯으둜 0mλ₯Ό κ°€λ₯΄ν‚€λŠ” λ°©ν–₯ 벑터가 쑰인트의 μ’Œν‘œμ— λΆ™κ²Œ 되고 이 λ°©ν–₯벑터λ₯Ό κΈ°μ€€μœΌλ‘œ νšŒμ „μΆ•μ΄ μ„€μ • λ©λ‹ˆλ‹€.

⚠️ **GitHub.com Fallback** ⚠️