인식에 사용한 객체 모델링을 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인 원기둥의 경우, 관성 모멘트는 다음과 같은 공식을 사용하여 계산할 수 있다.
원기둥의 관성 모멘트 공식
- Iz=(1/2)mr^2 : Z축(원기둥의 높이를 따라 있는 축) 주위의 회전에 대한 관성 모멘트
- Ix=Iy=(1/12)m(3r^2+h^2) : X축과 Y축(원기둥의 반지름을 따라 있는 축) 주위의 회전에 대한 관성 모멘트
- 여기서
- m은 원기둥의 질량 (3kg)
- r은 원기둥의 반지름 (0.025m, 미터 단위로 변환)
- h은 원기둥의 높이 (0.02m, 미터 단위로 변환)
계산
- Z축 주위의 관성 모멘트:
- Iz= 0.0009375 kg·m^2
- X축 및 Y축 주위의 관성 모멘트:
- 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 |