이번에는 ROS 2의 TurtleBot3 Simulation 실습을 진행했다. Gazebo에서 TurtleBot3 Burger 모델을 생성하고, 키보드 텔레오퍼레이션을 이용해 로봇의 이동과 회전을 제어했다. 실습 과정에서 발생한 Python 모듈 오류와 Gazebo GUI 오류를 해결하며 시뮬레이션 환경을 구성했다.
TurtleBot3 Simulation은 Gazebo 시뮬레이터에서 가상의 로봇을 생성하고, ROS 2를 통해 로봇의 동작을 제어하는 실습이다.
이번 실습에서는 TurtleBot3 Burger 모델과 turtlebot3_world 월드를 사용했다.
먼저 ROS 2와 워크스페이스 환경을 설정했다.
source /opt/ros/humble/setup.zsh
source ~/turtlebot3_ws/install/setup.zsh
이후 다음 명령어로 시뮬레이션을 실행했다.
ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py
실행 과정에서 Gazebo 화면에 로봇이 나타나지 않는 문제가 발생했다. 로봇 생성 상태와 서비스 목록을 확인하고, 관련 오류를 해결하는 과정을 진행했다.
로봇을 생성하는 과정에서 다음 오류가 발생했다.
ModuleNotFoundError: No module named 'lxml'
spawn_entity.py는 Gazebo에 로봇 모델을 생성하는 데 사용되는 스크립트이다. 해당 스크립트에서 lxml 모듈을 불러오지 못해 로봇 생성이 중단되었다.
처음에는 모듈 설치 여부를 확인했으며, 시스템 Python에서는 lxml이 정상적으로 설치되어 있는 것을 확인했다.
문제는 Conda의 (base) 환경에서 Python 3.14가 사용되고 있었다는 점이었다. 반면, 현재 ROS 2 Humble 워크스페이스는 Python 3.10용 패키지 경로를 사용하고 있었다.
따라서 Conda 환경을 비활성화하고 시스템 Python 환경에서 ROS 2 명령어를 실행했다.
python3 -c "import lxml; print(lxml.__file__)"
확인 결과, 다음 경로에서 모듈을 불러올 수 있었다.
/usr/lib/python3/dist-packages/lxml/__init__.py
이후 로봇 생성 명령어를 다시 실행했고, 정상적으로 생성되었다.
Spawn status: SpawnEntity: Successfully spawned entity [burger]
로봇 생성에는 성공했지만, Gazebo GUI에서 다음 오류가 발생하며 화면이 종료되는 문제가 있었다.
Assertion `px != 0' failed.
로그를 확인한 결과, 로봇 생성 과정은 정상적으로 진행되었지만 Gazebo GUI 클라이언트인 gzclient가 카메라 관련 오류로 종료되고 있었다.
이를 해결하기 위해 Gazebo 서버와 GUI를 분리해서 실행했다.
먼저 Gazebo 서버를 실행했다.
ros2 launch gazebo_ros gzserver.launch.py \
world:=/home/namseungjoo/turtlebot3_ws/install/turtlebot3_gazebo/share/turtlebot3_gazebo/worlds/turtlebot3_world.world
서버 실행 후 새 터미널에서 GUI를 실행했다.
gzclient
서버와 GUI를 분리한 결과 Gazebo 화면이 정상적으로 열렸고, 생성된 TurtleBot3 Burger 모델을 확인할 수 있었다.

Gazebo에서 로봇을 생성한 다음, 키보드 텔레오퍼레이션을 이용해 로봇을 직접 제어했다.
텔레오퍼레이션은 키보드 입력을 통해 로봇의 이동 속도와 회전 속도를 조절하는 방식이다.
먼저 TurtleBot3 모델을 설정했다.
export TURTLEBOT3_MODEL=burger
이후 다음 명령어를 실행했다.
ros2 run turtlebot3_teleop teleop_keyboard
실행하면 터미널에 현재 선속도와 각속도가 표시되며, 키보드 입력에 따라 속도 값이 변경된다.
주요 조작 키는 다음과 같다.
w, x: 선속도 증가 및 감소a, d: 각속도 증가 및 감소s: 강제 정지Space: 강제 정지Ctrl + C: 프로그램 종료키보드 입력에 따라 로봇의 전진, 후진, 회전 동작을 확인했다.

Gazebo 화면에서는 로봇의 LiDAR 센서가 주변 환경을 측정하는 모습도 확인할 수 있었다. 파란색으로 표시된 선들은 센서의 거리 측정 결과를 시각화한 것이다.
이번 실습에서는 Gazebo에서 TurtleBot3 Burger 모델을 생성하고, 키보드 텔레오퍼레이션을 통해 로봇의 이동과 회전을 제어했다.
실습 중 발생한 lxml 오류는 Conda Python 환경과 시스템 Python 환경의 차이를 확인하여 해결했다. 또한 Gazebo 서버와 GUI를 분리해 실행하면서 화면 관련 오류를 우회하고 시뮬레이션을 정상적으로 진행할 수 있었다.
이를 통해 ROS 2에서 로봇 모델을 생성하는 과정과 Gazebo 시뮬레이션 환경, 키보드 입력을 이용한 로봇 제어 과정을 직접 확인할 수 있었다.