Pular para o conteúdo principal

🏗️ Gazebo Fortress

Objetivo do Módulo

Dominar o Gazebo: criar mundos, simular física e integrar com ROS2.


📦 Instalação

Ubuntu 22.04 + ROS2 Humble

# Gazebo já vem com ROS2 Desktop
sudo apt install ros-humble-desktop-full

# Pacotes extras
sudo apt install ros-humble-gazebo-ros-pkgs
sudo apt install ros-humble-gazebo-plugins

# Verificar instalação
gazebo --version
# Gazebo multi-robot simulator, version 11.10.2

🌍 Criar Seu Primeiro Mundo

Mundo Básico (XML SDF)

<?xml version="1.0" ?>
<sdf version="1.6">
<world name="humanoid_lab">
<!-- Sol -->
<include>
<uri>model://sun</uri>
</include>

<!-- Chão -->
<include>
<uri>model://ground_plane</uri>
</include>

<!-- Caixa para manipular -->
<model name="box1">
<pose>2 0 0.5 0 0 0</pose>
<link name="link">
<collision name="collision">
<geometry>
<box><size>0.5 0.5 0.5</size></box>
</geometry>
</collision>
<visual name="visual">
<geometry>
<box><size>0.5 0.5 0.5</size></box>
</geometry>
</visual>
</link>
</model>
</world>
</sdf>

Salvar: ~/gazebo_ws/worlds/lab.world

Lançar:

gazebo ~/gazebo_ws/worlds/lab.world

🤖 Importar Modelo de Humanoide

Opção 1: Modelos Prontos

# Baixar Unitree H1 (exemplo)
cd ~/.gazebo/models
git clone https://github.com/unitreerobotics/unitree_ros.git

# Incluir no mundo
<include>
<uri>model://unitree_h1</uri>
<pose>0 0 1 0 0 0</pose>
</include>

Opção 2: Converter URDF → SDF

# Se você tem URDF do robô
gz sdf -p robot.urdf > robot.sdf

⚙️ Física e Plugins

Configurar Motor

<plugin name="joint_controller" filename="libgazebo_ros_joint_state_publisher.so">
<ros>
<namespace>/robot</namespace>
<remapping>joint_states:=joint_states</remapping>
</ros>
<update_rate>100</update_rate>
<joint_name>left_knee</joint_name>
</plugin>

Controlar via ROS2

import rclpy
from sensor_msgs.msg import JointState

node = rclpy.create_node('joint_commander')
pub = node.create_publisher(JointState, '/robot/joint_commands', 10)

msg = JointState()
msg.name = ['left_knee']
msg.position = [1.57] # 90 graus

pub.publish(msg)

📹 Câmera Simulada

<sensor name="camera" type="camera">
<camera>
<horizontal_fov>1.57</horizontal_fov>
<image>
<width>1280</width>
<height>720</height>
</image>
</camera>
<plugin name="camera_controller" filename="libgazebo_ros_camera.so">
<ros>
<namespace>/robot</namespace>
<remapping>image_raw:=camera/image_raw</remapping>
</ros>
</plugin>
</sensor>

Ver imagem:

ros2 run rqt_image_view rqt_image_view /robot/camera/image_raw

🎮 Teleoperação

# Terminal 1: Lançar Gazebo com robô
gazebo my_world.world

# Terminal 2: Teleop
ros2 run teleop_twist_keyboard teleop_twist_keyboard --ros-args -r /cmd_vel:=/robot/cmd_vel

🔗 Próximos Passos

Próximo Módulo

🎥 NVIDIA Isaac Sim →

Ray tracing, IA e sim-to-real transfer.