Gravity compensation - modulabs/gazebo-tutorial GitHub Wiki

Prerequisites

์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ๋Œ๋ฆฌ๊ธฐ ์œ„ํ•ด ์ถ”๊ฐ€์ ์ธ 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

Overview

์—ฌ๊ธฐ์—์„œ๋Š” ์ค‘๋ ฅ๋ณด์ƒ์„ ์œ„ํ•ด ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋Š”์ง€์™€ ์ด๋ฅผ ์ด์šฉํ•ด PID join controller๋ฅผ ๋ณด์™„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณธ๋‹ค. ์ด์ƒ์ ์œผ๋กœ ์ค‘๋ ฅ๋ณด์ƒ์€ ์ค‘๋ ฅ์— ์˜ํ•œ ๋กœ๋ด‡ ๋งํฌ์˜ ๊ฐ€์†์„ ๋ง‰์•„์ค€๋‹ค. ์—ฌ๊ธฐ์„œ๋Š” ์„ ํ˜• ์•ก์ธ„์—์ดํ„ฐ๋ฅผ ์ด์šฉํ•˜์—ฌ 0.1kg์˜ ์งˆ๋Ÿ‰์„ ๊ฐ€์ง„ ๋ฌผ์ฒด๋ฅผ PID ํ”ผ๋“œ๋ฐฑ์„ ์ด์šฉํ•˜์—ฌ ์ œ์–ดํ•˜๊ณ  ์ค‘๋ ฅ๋ณด์ƒ์ด ์–ด๋–ป๊ฒŒ ์ œ์–ด๋ฅผ ํ–ฅ์ƒ์‹œํ‚ค๋Š”์ง€ ์•Œ์•„๋ณธ๋‹ค.

PID Control

P Control

  1. gazebo -u ๋ฅผ ํ†ตํ•ด pause ์ƒํƒœ๋กœ ๊ฐ€์ œ๋ณด๋ฅผ ์‹คํ–‰์‹œํ‚จ ํ›„ Mass on rails ๋ชจ๋ธ์„ ์‚ฝ์ž…ํ•œ๋‹ค. aa
  2. ์˜ค๋ฅธ์ชฝ์—์„œ ํŒจ๋„์„ ๋“œ๋ž˜๊ทธ ํ•œ ํ›„ Position ํƒญ์—์„œ target position 1, proportional gain 2, ๋‚˜๋จธ์ง€ gain ์„ 0์œผ๋กœ ์„ค์ •ํ•œ๋‹ค aa3. Unpauseํ•œ๋‹ค.

๋ฌผ์ฒด๋Š” ์›€์ง์ด๊ธด ํ–ˆ์ง€๋งŒ ๋ชฉํ‘œํ–ˆ๋˜ ์œ„์น˜๋กœ๋ถ€ํ„ฐ ์กฐ๊ธˆ ๋–จ์–ด์ ธ ์žˆ๋‹ค. P gain์„ ์ฆ๊ฐ€์‹œํ‚ค๋ฉด ๋ชฉํ‘œ์— ๊ฐ€๊น๊ฒŒ ๋‹ค๊ฐ€๊ฐ€์ง€๋งŒ ์•ˆ์ •๋  ๋•Œ ๊นŒ์ง€ ์ง„ํญ๊ณผ ์‹œ๊ฐ„๋„ ์ฆ๊ฐ€ํ•˜๊ฒŒ ๋œ๋‹ค. aa

Plotting

โ€ป Plotting ๊ธฐ๋Šฅ์€ gazebo 8.0 ์ดํ›„ ๋ฒ„์ „๋ถ€ํ„ฐ ์กด์žฌํ•œ๋‹ค.

  • ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ puaseํ•˜๊ณ  ctrl + R ์„ ํ†ตํ•ด ๋ฆฌ์…‹ํ•œ๋‹ค.
  • Window ๋ฉ”๋‰ด์˜ Plot์„ ์„ ํƒํ•œ๋‹ค.
  • MODELS ํƒญ์„ ์„ ํƒํ•œ๋‹ค.
  • mass_on_rails > mass > Pose > Position์—์„œ z๋ฅผ ๊ทธ๋ž˜ํ”„๋กœ ๋“œ๋ž˜๊ทธ ์‹œํ‚จ๋‹ค.
  • Joint control parameter๋ฅผ ์„ธํŒ…ํ•˜๊ณ  unpause ํ•œ๋‹ค.

๋‹ค๋ฅธ ๊ทธ๋ž˜ํ”„๋ฅผ ์ถ”๊ฐ€์‹œํ‚ค๊ณ  ์‹ถ์œผ๋ฉด ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ pauseํ•˜๊ณ  ๋ฆฌ์…‹์‹œํ‚จ๋‹ค. ๋‹ค์‹œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ์กฐ์ •ํ•˜๊ณ  unpauseํ•œ๋‹ค. aa

PD Control

D gain์„ ์ถ”๊ฐ€์‹œํ‚ด์œผ๋กœ์จ ์ง„๋™์„ ์–ต์ œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ฏธ๋ถ„ term์€ ์—๋Ÿฌ์˜ ๋ณ€ํ™”์œจ์— ๋น„๋ก€ํ•˜๊ณ  ์„ ํ˜• ๋Œํ•‘์„ ์ œ๊ณตํ•œ๋‹ค. ๊ฒŒ์ธ์„ ์ ์ ˆํžˆ ์„ค์ •ํ•˜์—ฌ ์‹œ์Šคํ…œ์˜ ๊ณ ์œ  ์ง„๋™์ˆ˜์™€ ๊ฐ์‡ ๋น„๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋‹ค. 1์˜ ๊ฐ์‡  ๋น„์œจ๊ณผ 10 rad / s์˜ ๊ณ ์œ  ์ง„๋™์ˆ˜๋ฅผ ์„ ํƒํ•˜๋ฉด 0.1kg ์งˆ๋Ÿ‰์„ ๊ฐ์•ˆํ–ˆ์„๋•Œ P gain๊ณผ D gain์€ ๊ฐ๊ฐ 10 ๋ฐ 2์ด๋‹ค. ์ด์ œ ์งˆ๋Ÿ‰์ด ๋น„๊ต์  ๋นจ๋ฆฌ ๋ชฉํ‘œ ์œ„์น˜ ๊ทผ์ฒ˜์— ์ •์ฐฉํ•˜์ง€๋งŒ ์ผ๋ถ€ ์ •์ƒ ์ƒํƒœ ์˜ค๋ฅ˜๊ฐ€ ๊ด€์ฐฐ ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์—ฌ์ „ํžˆ ๊ฐœ์„ ์˜ ์—ฌ์ง€๊ฐ€ ์žˆ๋‹ค.

PID Control

์ ๋ถ„ term์€ ์ •์ƒ์ƒํƒœ์˜ ์—๋Ÿฌ๋ฅผ ์ œ๊ฑฐํ•  ์ˆ˜ ์žˆ๋‹ค.

  1. P, I, D gain์„ ๊ฐ๊ฐ 10, 1, 2๋กœ ์„ค์ •ํ•œ๋‹ค. ใ…ใ…

Gravity Compensation

PID ์ œ์–ด๊ธฐ๋Š” ์ด์ œ ์ž˜ ์ž‘๋™ํ•˜์ง€๋งŒ ๋†’์€ ๊ฒŒ์ธ์— ์˜์กดํ•˜๊ณ  ์žˆ๋‹ค. ์ค‘๋ ฅ ๋ณด์ƒ์€ ์ปจํŠธ๋กค๋Ÿฌ์˜ ์„ฑ๋Šฅ์ €ํ•˜ ์—†์ด ๊ฒŒ์ธ์„ ์ค„์ด๋Š”๋ฐ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋‹ค.

Demonstration

'mass_on_rails' ์—์„œ ์ค‘๋ ฅ์€ ์ œ์–ด๊ธฐ๊ฐ€ ๊ทน๋ณตํ•ด์•ผ๋  ์ฃผ๋œ ํ•ญ๋ชฉ์ด๋‹ค. ๋งŒ์•ฝ ์ค‘๋ ฅ๋ณด์ƒ์„ ํ•˜๋ฉด PID gain์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

  1. Gazebo ์‹œ๋ฎฌ๋ ˆ์ด์…˜์„ ์‹คํ–‰์‹œํ‚จ๋‹ค.
gazebo -u --verbose worlds/gravity_compensation.world
  1. Target position 1, P, I, D gain์„ ๊ฐ๊ฐ 0.4, 0, 0,4 ์ž…๋ ฅํ•œ๋‹ค.
  2. Unpause ํ•œ๋‹ค.

์ค‘๋ ฅ๋ณด์ƒ์„ ์ด์šฉํ•ด ๋ฌผ์ฒด๊ฐ€ ๋” ๋‚ฎ์€ ๊ฒŒ์ธ์—์„œ ์ˆ˜๋ ดํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ๋ชจ๋ธ์ด ๋งˆ์ฐฐ๋ ฅ๊ณผ I gain 0์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์•ฝ๊ฐ„์˜ ์ •์ƒ์ƒํƒœ ์˜ค์ฐจ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ใ…ใ…

Using the Plugin

์•„๋ž˜ ์ฝ”๋“œ์—์„œ ์–ด๋–ป๊ฒŒ 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๋ฅผ ํ•„์š”๋กœ ํ•œ๋‹ค.

Model Error

์ค‘๋ ฅ๋ณด์ƒ์„ ์‹ค์ œ ๋กœ๋ด‡์— ์ ์šฉํ•˜์˜€์„ ๋•Œ ๋ชจ๋ธ๊ณผ ์‹ค์ œ์ ์ธ ๋กœ๋ด‡์˜ ์ฐจ์ด์— ๋”ฐ๋ผ ๋‹ค์–‘ํ•œ ์—๋Ÿฌ๋ฅผ ๋ณด์ž„์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค.ํ”Œ๋Ÿฌ๊ทธ์ธ๊ณผ ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ ๋‹ค๋ฅธ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์€ ๋ชจ๋ธ ์—๋Ÿฌ์˜ ํšจ๊ณผ๋ฅผ ๊ณต๋ถ€ํ•˜๋Š”๋ฐ ์œ ์šฉํ•˜๋‹ค. ๋งŒ์•ฝ ์‹ค์ œ ์งˆ๋Ÿ‰์ด ๋ชจ๋ธ๊ณผ ๋‹ค๋ฅด๋‹ค๋Š”๊ฒƒ์„ ์˜ˆ์ƒํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์‹œ๋ฎฌ๋ ˆ์ด์…˜์—์„œ ๋ชจ๋ธ์„ ์—…๋ฐ์ดํŠธ ์‹œ์ผœ์ฃผ๋ฉด ๋œ๋‹ค.

  1. ๋ชจ๋ธ์œ„์—์„œ ์˜ค๋ฅธ์ชฝ ๋งˆ์šฐ์Šค ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋’ค Edit Model์„ ํด๋ฆญํ•œ๋‹ค.
  2. ์™ผ์ชฝ ํŒจ๋„์—์„œ Model์„ ์„ ํƒํ•œ ๋’ค mass๋ฅผ ๋”๋ธ”ํด๋ฆญํ•˜๊ณ  0.09๋ฅผ ์ž…๋ ฅํ•œ๋‹ค.
  3. ๋ชจ๋ธ ์—๋””ํ„ฐ๋ฅผ ๋‚˜์˜ค๋ฉด ์ฆ‰์‹œ ์ €์žฅ๋œ๋‹ค.
  4. ๋ชจ๋ธ์„ ์„ ํƒํ•˜๊ณ  ์กฐ์ธํŠธ ์ปจํŠธ๋กค๋Ÿฌ์— ํŒŒ๋ผ๋ฏธํ„ฐ์— ๋“ค์–ด๊ฐ„๋‹ค.
  5. Unpause ํ•œ๋‹ค.

๋‹ค๋ฅธ ์งˆ๋Ÿ‰์—์„œ ์˜ค๋ฒ„์ŠˆํŒ…์ด ๋” ์ปค์ง์„ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋งŒ์•ฝ ์‹ค์ œ์ƒํ™ฉ์—์„œ 0.01kg์˜ ์˜ค์ฐจ๊ฐ€ ์žˆ์—ˆ๋‹ค๋ฉด PID ๊ฒŒ์ธ์„ ์กฐ์ •์„ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค. ใ…ใ…

Robonaut

์ค‘๋ ฅ๋ณด์ƒ์€ ๋” ๋ณต์žกํ•œ ์˜ˆ์—์„œ๋„ ์‚ฌ์šฉ๋  ์ˆ˜ ์žˆ๋‹ค. aa

<?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>
โš ๏ธ **GitHub.com Fallback** โš ๏ธ