런치와 로봇 스폰

명령 한 줄에 세계와 로봇이 함께 뜨는 비결은?

띄우기

런치 한 줄이면 뜹니다

2편까지 마쳤다면 ros2 launch turtlebot3_gazebo turtlebot3_world.launch.py 한 줄로 Gazebo 창과 로봇이 뜹니다. 처음 띄울 때는 준비하느라 시간이 더 걸릴 수 있습니다.

빈 바닥만 있는 empty_world.launch.py도 있습니다.

런치 안

런치 하나가 넷을 부릅니다

이 런치 파일은 다른 런치 파일 넷을 불러옵니다(10강 7편의 IncludeLaunchDescription). Gazebo는 물리를 계산하는 서버와 창을 그리는 클라이언트로 나뉘어 따로 뜹니다.

서버는 -r -s(바로 시작, 서버만), 화면은 -g(GUI만) 인자로 띄웁니다.

스폰

로봇은 create가 넣습니다

모델을 월드에 넣는 일을 스폰(spawn)이라고 합니다. ros_gz_sim 패키지의 create가 실행 중인 Gazebo에 모델 파일을 이름(burger)과 위치를 붙여 넣습니다.

변수 이름은 urdf_path지만 실제로는 model.sdf 파일을 가리킵니다. 위치는 월드 런치가 x=-2.0, y=-0.5로 넘깁니다.

스폰과 함께

브리지도 같이 뜹니다

같은 스폰 런치에는 노드가 하나 더 있습니다. create는 로봇을 넣고 바로 끝나지만, ros_gz_bridge의 parameter_bridge는 계속 돌며 Gazebo와 ROS 토픽을 잇습니다. 설정 파일은 6편에서 뜯어봅니다.

burger에는 카메라가 없어서 이미지 브리지는 띄우지 않습니다.

환경 변수

TURTLEBOT3_MODEL로 고릅니다

런치 파일은 환경 변수 TURTLEBOT3_MODEL을 읽어 모델 파일, 브리지 설정, URDF 경로를 만듭니다. 2편에서 ~/.bashrc에 burger를 적어 둔 이유입니다.

변수가 없으면 런치가 KeyError로 바로 멈춥니다. 새 터미널이 ~/.bashrc를 읽었는지 확인합니다.

확인

Gazebo는 노드 목록에 없습니다

새 터미널에서 ros2 node list를 쳐 보면 노드는 둘뿐입니다. Gazebo 자체는 ROS 노드가 아닙니다. 그런데도 /scan 같은 토픽이 보이는 것은 /ros_gz_bridge 노드가 대신 올려 주기 때문입니다.

출력 일부만 보였습니다. create는 로봇을 넣고 끝나서 목록에 없습니다.

다음 편

이제 이 로봇을 키보드로 몰아 볼까요?

4편키보드로 몰아 보자 14강 목록