Gravity compensation - modulabs/gazebo-tutorial GitHub Wiki
์๋ฎฌ๋ ์ด์ ์ ๋๋ฆฌ๊ธฐ ์ํด ์ถ๊ฐ์ ์ธ DART physics and utilities ์ค์น๊ฐ ํ์ํ๋ค.
# Main repository
sudo apt-add-repository ppa:dartsim
sudo apt-get update
sudo apt-get install libdart6-dev
# Optional DART utilities
sudo apt-get install libdart6-utils-urdf-dev
์ฌ๊ธฐ์์๋ ์ค๋ ฅ๋ณด์์ ์ํด ํ๋ฌ๊ทธ์ธ์ ์ฌ์ฉํ๋์ง์ ์ด๋ฅผ ์ด์ฉํด PID join controller๋ฅผ ๋ณด์ํ๋ ๋ฐฉ๋ฒ์ ๋ํด ์์๋ณธ๋ค. ์ด์์ ์ผ๋ก ์ค๋ ฅ๋ณด์์ ์ค๋ ฅ์ ์ํ ๋ก๋ด ๋งํฌ์ ๊ฐ์์ ๋ง์์ค๋ค. ์ฌ๊ธฐ์๋ ์ ํ ์ก์ธ์์ดํฐ๋ฅผ ์ด์ฉํ์ฌ 0.1kg์ ์ง๋์ ๊ฐ์ง ๋ฌผ์ฒด๋ฅผ PID ํผ๋๋ฐฑ์ ์ด์ฉํ์ฌ ์ ์ดํ๊ณ ์ค๋ ฅ๋ณด์์ด ์ด๋ป๊ฒ ์ ์ด๋ฅผ ํฅ์์ํค๋์ง ์์๋ณธ๋ค.
- gazebo -u ๋ฅผ ํตํด pause ์ํ๋ก ๊ฐ์ ๋ณด๋ฅผ ์คํ์ํจ ํ Mass on rails ๋ชจ๋ธ์ ์ฝ์
ํ๋ค.
- ์ค๋ฅธ์ชฝ์์ ํจ๋์ ๋๋๊ทธ ํ ํ Position ํญ์์ target position 1, proportional gain 2, ๋๋จธ์ง gain ์ 0์ผ๋ก ์ค์ ํ๋ค
3. Unpauseํ๋ค.
๋ฌผ์ฒด๋ ์์ง์ด๊ธด ํ์ง๋ง ๋ชฉํํ๋ ์์น๋ก๋ถํฐ ์กฐ๊ธ ๋จ์ด์ ธ ์๋ค. P gain์ ์ฆ๊ฐ์ํค๋ฉด ๋ชฉํ์ ๊ฐ๊น๊ฒ ๋ค๊ฐ๊ฐ์ง๋ง ์์ ๋ ๋ ๊น์ง ์งํญ๊ณผ ์๊ฐ๋ ์ฆ๊ฐํ๊ฒ ๋๋ค.
โป Plotting ๊ธฐ๋ฅ์ gazebo 8.0 ์ดํ ๋ฒ์ ๋ถํฐ ์กด์ฌํ๋ค.
- ์๋ฎฌ๋ ์ด์ ์ puaseํ๊ณ ctrl + R ์ ํตํด ๋ฆฌ์ ํ๋ค.
- Window ๋ฉ๋ด์ Plot์ ์ ํํ๋ค.
- MODELS ํญ์ ์ ํํ๋ค.
- mass_on_rails > mass > Pose > Position์์ z๋ฅผ ๊ทธ๋ํ๋ก ๋๋๊ทธ ์ํจ๋ค.
- Joint control parameter๋ฅผ ์ธํ ํ๊ณ unpause ํ๋ค.
๋ค๋ฅธ ๊ทธ๋ํ๋ฅผ ์ถ๊ฐ์ํค๊ณ ์ถ์ผ๋ฉด ์๋ฎฌ๋ ์ด์
์ pauseํ๊ณ ๋ฆฌ์
์ํจ๋ค. ๋ค์ ํ๋ผ๋ฏธํฐ๋ฅผ ์กฐ์ ํ๊ณ unpauseํ๋ค.
D gain์ ์ถ๊ฐ์ํด์ผ๋ก์จ ์ง๋์ ์ต์ ํ ์ ์๋ค. ๋ฏธ๋ถ term์ ์๋ฌ์ ๋ณํ์จ์ ๋น๋กํ๊ณ ์ ํ ๋ํ์ ์ ๊ณตํ๋ค. ๊ฒ์ธ์ ์ ์ ํ ์ค์ ํ์ฌ ์์คํ ์ ๊ณ ์ ์ง๋์์ ๊ฐ์ ๋น๋ฅผ ์ ํํ ์ ์๋ค. 1์ ๊ฐ์ ๋น์จ๊ณผ 10 rad / s์ ๊ณ ์ ์ง๋์๋ฅผ ์ ํํ๋ฉด 0.1kg ์ง๋์ ๊ฐ์ํ์๋ P gain๊ณผ D gain์ ๊ฐ๊ฐ 10 ๋ฐ 2์ด๋ค. ์ด์ ์ง๋์ด ๋น๊ต์ ๋นจ๋ฆฌ ๋ชฉํ ์์น ๊ทผ์ฒ์ ์ ์ฐฉํ์ง๋ง ์ผ๋ถ ์ ์ ์ํ ์ค๋ฅ๊ฐ ๊ด์ฐฐ ๋ ์ ์๊ธฐ ๋๋ฌธ์ ์ฌ์ ํ ๊ฐ์ ์ ์ฌ์ง๊ฐ ์๋ค.
์ ๋ถ term์ ์ ์์ํ์ ์๋ฌ๋ฅผ ์ ๊ฑฐํ ์ ์๋ค.
- P, I, D gain์ ๊ฐ๊ฐ 10, 1, 2๋ก ์ค์ ํ๋ค.
PID ์ ์ด๊ธฐ๋ ์ด์ ์ ์๋ํ์ง๋ง ๋์ ๊ฒ์ธ์ ์์กดํ๊ณ ์๋ค. ์ค๋ ฅ ๋ณด์์ ์ปจํธ๋กค๋ฌ์ ์ฑ๋ฅ์ ํ ์์ด ๊ฒ์ธ์ ์ค์ด๋๋ฐ ๋์์ด ๋ ์ ์๋ค.
'mass_on_rails' ์์ ์ค๋ ฅ์ ์ ์ด๊ธฐ๊ฐ ๊ทน๋ณตํด์ผ๋ ์ฃผ๋ ํญ๋ชฉ์ด๋ค. ๋ง์ฝ ์ค๋ ฅ๋ณด์์ ํ๋ฉด PID gain์ ์ค์ผ ์ ์๋ค.
- Gazebo ์๋ฎฌ๋ ์ด์ ์ ์คํ์ํจ๋ค.
gazebo -u --verbose worlds/gravity_compensation.world
- Target position 1, P, I, D gain์ ๊ฐ๊ฐ 0.4, 0, 0,4 ์ ๋ ฅํ๋ค.
- Unpause ํ๋ค.
์ค๋ ฅ๋ณด์์ ์ด์ฉํด ๋ฌผ์ฒด๊ฐ ๋ ๋ฎ์ ๊ฒ์ธ์์ ์๋ ดํ๋ ๊ฒ์ ๋ณผ ์ ์๋ค. ๋ชจ๋ธ์ด ๋ง์ฐฐ๋ ฅ๊ณผ I gain 0์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ์ฝ๊ฐ์ ์ ์์ํ ์ค์ฐจ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๊ฒ์ ๋ณผ ์ ์๋ค.
์๋ ์ฝ๋์์ ์ด๋ป๊ฒ gravity_compensation.world์์ ํ๋ฌ๊ทธ์ธ์ ๋ถ๋ฅด๋์ง ์ ์ ์๋ค.
<include>
<uri>model://mass_on_rails</uri>
<plugin name="gravity_compensation" filename="libGravityCompensationPlugin.so">
<uri>model://mass_on_rails</uri>
</plugin>
</include>
'include'๋ ๊ฐ์ ๋ณด๊ฐ world์ model์ ์ถ๊ฐํ๋๋ก ์ํจ๋ค. URI๋ ์ด๋ค ๋ชจ๋ธ์ ์ถ๊ฐํ ๊ฒ์ธ์ง๋ฅผ ๋ํ๋ธ๋ค. 'plugin'์ ์ค๋ ฅ๋ณด์ ํ๋ฌ๊ทธ์ธ์ ์ถ๊ฐ์ํจ๋ค. 'plugin'์ ์ค๋ ฅ๊ณผ Joint effort๋ฅผ ๊ณ์ฐํ๊ธฐ ์ํด ๊ณ ์ ์ ๋ชจ๋ธ URI๋ฅผ ํ์๋ก ํ๋ค.
์ค๋ ฅ๋ณด์์ ์ค์ ๋ก๋ด์ ์ ์ฉํ์์ ๋ ๋ชจ๋ธ๊ณผ ์ค์ ์ ์ธ ๋ก๋ด์ ์ฐจ์ด์ ๋ฐ๋ผ ๋ค์ํ ์๋ฌ๋ฅผ ๋ณด์์ ์ ์ ์๋ค.ํ๋ฌ๊ทธ์ธ๊ณผ ์๋ฎฌ๋ ์ด์ ์์ ๋ค๋ฅธ ๋ชจ๋ธ์ ์ฌ์ฉํ ์ ์๋ ๊ฒ์ ๋ชจ๋ธ ์๋ฌ์ ํจ๊ณผ๋ฅผ ๊ณต๋ถํ๋๋ฐ ์ ์ฉํ๋ค. ๋ง์ฝ ์ค์ ์ง๋์ด ๋ชจ๋ธ๊ณผ ๋ค๋ฅด๋ค๋๊ฒ์ ์์ํ ์ ์๋ค๋ฉด ์๋ฎฌ๋ ์ด์ ์์ ๋ชจ๋ธ์ ์ ๋ฐ์ดํธ ์์ผ์ฃผ๋ฉด ๋๋ค.
- ๋ชจ๋ธ์์์ ์ค๋ฅธ์ชฝ ๋ง์ฐ์ค ๋ฒํผ์ ๋๋ฅธ๋ค Edit Model์ ํด๋ฆญํ๋ค.
- ์ผ์ชฝ ํจ๋์์ Model์ ์ ํํ ๋ค mass๋ฅผ ๋๋ธํด๋ฆญํ๊ณ 0.09๋ฅผ ์ ๋ ฅํ๋ค.
- ๋ชจ๋ธ ์๋ํฐ๋ฅผ ๋์ค๋ฉด ์ฆ์ ์ ์ฅ๋๋ค.
- ๋ชจ๋ธ์ ์ ํํ๊ณ ์กฐ์ธํธ ์ปจํธ๋กค๋ฌ์ ํ๋ผ๋ฏธํฐ์ ๋ค์ด๊ฐ๋ค.
- Unpause ํ๋ค.
๋ค๋ฅธ ์ง๋์์ ์ค๋ฒ์ํ
์ด ๋ ์ปค์ง์ ์ ์ ์๋ค. ๋ง์ฝ ์ค์ ์ํฉ์์ 0.01kg์ ์ค์ฐจ๊ฐ ์์๋ค๋ฉด PID ๊ฒ์ธ์ ์กฐ์ ์ ๊ณ ๋ คํด์ผ ํ๋ค.
์ค๋ ฅ๋ณด์์ ๋ ๋ณต์กํ ์์์๋ ์ฌ์ฉ๋ ์ ์๋ค.
<?xml version="1.0"?>
<sdf version="1.5">
<world name="default">
<include>
<uri>model://ground_plane</uri>
</include>
<include>
<uri>model://sun</uri>
</include>
<include>
<uri>model://r2_description</uri>
<name>r2_grav_comp</name>
<pose>0 -2 0 0 0 0</pose>
<plugin name="gravity_compensation" filename="libGravityCompensationPlugin.so">
<uri>model://r2_description</uri>
</plugin>
</include>
<include>
<uri>model://r2_description</uri>
<pose>2 0 0 0 0 -1.57</pose>
</include>
</world>
</sdf>
3. Unpauseํ๋ค.



