Skip to content

Gravity compensation

Jinho-So edited this page Mar 8, 2018 · 14 revisions

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>

Table of Contents




Clone this wiki locally