런치와 로봇 스폰
명령 한 줄에 세계와 로봇이 함께 뜨는 비결은?
띄우기
런치 한 줄이면 뜹니다
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는 로봇을 넣고 끝나서 목록에 없습니다.
다음 편