본문 바로가기

Project/일지

Gazebo에 객체 수동으로 불러오기

인식에 사용한 객체 모델링을 gazebo에 불러올 차례

 

stl파일을 블렌더에 import 해서 dae로 저장한다.

블렌더에서 모델의 중심점을 정하면 편하다. 처음엔 origin을 객체의 중심에 맞추면 되는 줄 알았는데, blender 월드 중심에 맞추고 ctrl+a로 변환을 해주어야 바뀐다. 객체 색상 또한 블렌더에서 바꾸면 편하다.

stl파일도 바로 사용은 가능하지만 색상 정보가 없다고 한다.


폴더 아래 처럼 구성

~/. gazebo/models/Cir_50x20

    |-- model.config

    |-- model.sdf

    |-- meshes

        |-- Cir_50x20.dae

config파일과 sdf파일을 작성한다

model.config

<?xml version="1.0"?>
<model>
    <name>Cir_50x20</name>
    <version>1.0</version>
    <sdf version="1.6">model.sdf</sdf>
    <author>
       <name>Your Name</name>
       <email>your.email@example.com</email>
    </author>
    <description>
       A circular model.
    </description>
</model>

 

model.sdf

<?xml version="1.0" ?>
<sdf version="1.6">
    <model name="Cir_50x20">
      <static>false</static>
      <link name="base_link">
        <collision name="collision">
          <geometry>
            <mesh>
              <uri>model://Cir_50x20/meshes/Cir_50x20.dae</uri>
            </mesh>
          </geometry>
        </collision>
        <visual name="visual">
          <geometry>
            <mesh>
              <uri>model://Cir_50x20/meshes/Cir_50x20.dae</uri>
            </mesh>
          </geometry>
        </visual>
      </link>
    </model>
</sdf>

 

여기까지 하면 gazebo의 insert탭에서 직접 객체를 추가할 수 있다.

 

제작했던 맵에 불러오기

 

로봇과 함께

 

오브젝트가 너무 움직임이 심하다

객체 SDF에 관성 모멘트 추가

SDF 파일에서의 관성 모멘트

SDF 파일에서 <inertia> 태그 내에는 다음과 같은 요소가 포함된다

  • ixx, iyy, izz: 주축(main axes)을 따른 관성 모멘트.
  • ixy, ixz, iyz: 비대각성분(off-diagonal components), 이는 물체의 형태가 비대칭일 때 중요해진다.

반지름이 25mm, 높이가 20mm이며, 질량이 3kg인 원기둥의 경우, 관성 모멘트는 다음과 같은 공식을 사용하여 계산할 수 있다.

 

원기둥의 관성 모멘트 공식

  1. Iz=(1/2)mr^2   : Z축(원기둥의 높이를 따라 있는 축) 주위의 회전에 대한 관성 모멘트
  2. Ix=Iy=(1/12)m(3r^2+h^2)    : X축과 Y축(원기둥의 반지름을 따라 있는 축) 주위의 회전에 대한 관성 모멘트
  • 여기서
    • m은 원기둥의 질량 (3kg)
    • r은 원기둥의 반지름 (0.025m, 미터 단위로 변환)
    • h은 원기둥의 높이 (0.02m, 미터 단위로 변환)

계산

  1. Z축 주위의 관성 모멘트:
  2. Iz= 0.0009375 kg·m^2
  3. X축 및 Y축 주위의 관성 모멘트:
  4. Ix=Iy= 0.00056875 kg·m^2

SDF에 다음 내용 추가

<inertial>
    <mass>3.0</mass>
    <inertia>
        <ixx>0.00056875</ixx>
        <ixy>0.0</ixy>
        <ixz>0.0</ixz>
        <iyy>0.00056875</iyy>
        <iyz>0.0</iyz>
        <izz>0.0009375</izz>
    </inertia>
</inertial>

 

터미널 명령으로 객체 불러오기

rosrun gazebo_ros spawn_model -file ~/.gazebo/models/Cir_50x20/model.sdf -sdf -model cir_model -x 0 -y 0 -z 0.5

 

불러온 객체 제거하기

rosservice call /gazebo/delete_model "model_name: 'cir_model'"

 

불러온 객체 위치정보 수정하기

rosservice call /gazebo/set_model_state "model_state:
  model_name: 'cir_model'
  pose:
    position:
      x: 2.0
      y: 2.0
      z: 0.5
    orientation:
      x: 0.0
      y: 0.0
      z: 0.0
      w: 1.0
  twist:
    linear:
      x: 0.0
      y: 0.0
      z: 0.0
    angular:
      x: 0.0
      y: 0.0
      z: 0.0
  reference_frame: 'world'"

 

+한줄 버전

rosservice call /gazebo/set_model_state "{model_state: {model_name: 'cir_model', pose: {position: {x: 2.0, y: 2.0, z: 0.5}, orientation: {x: 0.0, y: 0.0, z: 0.0, w: 1.0}}}}"

 

 

수동으로 객체 불러오기에 성공했으니 다음엔 위 명령어들을 이용해 객체인식 정보를 토대로 자동 불러오기를 진행하겠다.

'Project > 일지' 카테고리의 다른 글

ur10e - gazebo  (1) 2024.09.20
Opencv 객체 인식 - Gazebo 객체 소환 동기화  (0) 2024.06.07
Gazebo-ROS-UR5 환경 세팅  (0) 2024.05.17
NVIDIA드라이버 재설치  (0) 2024.05.17
객체 검출 및 형태 분석  (0) 2024.05.15