필요 패키지 설치 확인
sudo apt install ros-foxy-gazebo-ros-pkgs
라이다 센서 URDF
<!-- 파일명 예: my_lidar_robot.urdf.xacro (xacro 사용 시) 또는 my_lidar_robot.urdf -->
<robot name="my_lidar_robot" xmlns:xacro="http://ros.org/wiki/xacro">
<!-- 로봇 기본 바디(링크) -->
<link name="base_link">
<visual>
<geometry>
<box size="0.3 0.3 0.1"/>
</geometry>
<material name="grey"/>
</visual>
</link>
<!-- 라이다 센서가 위치할 링크 -->
<link name="lidar_link">
<visual>
<geometry>
<cylinder length="0.05" radius="0.05"/>
</geometry>
<material name="black"/>
</visual>
</link>
<!-- base_link와 lidar_link를 연결하는 조인트 -->
<joint name="lidar_joint" type="fixed">
<parent link="base_link"/>
<child link="lidar_link"/>
<origin xyz="0 0 0.1" rpy="0 0 0"/> <!-- 라이다가 base_link 위에 0.1m 정도 올라간 위치 -->
</joint>
<!-- Gazebo 플러그인: ROS 2 레이저 센서 (libgazebo_ros_laser.so) -->
<gazebo>
<plugin name="my_laser_plugin" filename="libgazebo_ros_laser.so">
<!-- ROS 노드 네임스페이스 / 토픽 설정 -->
<ros>
<!-- 로봇 자체에 대한 네임스페이스를 지정할 수도 있음 (필수 아님) -->
<namespace>/</namespace>
</ros>
<!-- 스캔 토픽 이름 -->
<topicName>/scan</topicName>
<!-- 레이저 센서가 장착된 링크 -->
<frameName>lidar_link</frameName>
<!-- 센서 업데이트 주기 (Hz) -->
<update_rate>10</update_rate>
<!-- 가로 방향으로 몇 개의 빔을 쏠 것인지 -->
<horizontal_samples>720</horizontal_samples>
<!-- FOV: 최소/최대 각도 (라디안 단위) -->
<horizontal_min_angle>-1.5708</horizontal_min_angle> <!-- -90도 -->
<horizontal_max_angle>1.5708</horizontal_max_angle> <!-- +90도 -->
<!-- 레이저 측정 거리 범위 -->
<range_min>0.12</range_min>
<range_max>3.5</range_max>
</plugin>
</gazebo>
</robot>
빈 월드 실행
# 터미널 1
ros2 launch gazebo_ros empty_world.launch.py
라이다 로봇 스폰
위에서 만든 my_lidar_robot.urdf 파일을 Gazebo에 스폰하려면, ROS 2에서 제공하는 spawn_entity.py 스크립트를 사용.
# 터미널 2
ros2 run gazebo_ros spawn_entity.py \
-entity my_lidar_robot \
-file /경로/내_URDF_또는_SDF_파일/my_lidar_robot.urdf \
-x 0.0 -y 0.0 -z 0.0
LaserScan 토픽 확인
ros2 topic list
아래와 같이 나옴
ros2 topic
echo /scan
Rviz2에서 시작화가능
rviz2
By topic -> /scan -> LaserScan 추가
추가 예제
sudo apt update
sudo apt install ros-foxy-turtlebot3* \
ros-foxy-slam-toolbox \
ros-foxy-navigation2 \
ros-foxy-nav2-bringup