지난 시간에 로봇을 만드는 실습을 진행하였다.
이번시간에는 Gazebo에서 로봇을 스폰하는 방법에 대해서 알아보겠다.
🚀empty_world.launch
<?xml version= "1.0" ?>
<launch>
<include file= "$(find gazebo_ros)/launch/empty_world.launch">
<arg name = "paused" value = "false"/>
<arg name = "use_sim_time" value = "true"/>
<arg name = "gui" value = "true"/>
<arg name = "headless" value = "false"/>
<arg name = "debug" value = "false"/>
</include>
</launch>
월드를 생성하는 launch 파일.
월드의 속성을 정의할 수 있다.
🚀spawn_robot.launch
<?xml version= "1.0" ?>
<launch>
<param name="robot_description" command = "cat '$(find robot_description)/urdf/robot.urdf'"/>
<arg name = "x" default = "0"/>
<arg name = "y" default = "0"/>
<arg name = "z" default = "0.5"/>
<node name = "mybot_spawn" pkg ="gazebo_ros" type ="spawn_model" output ="screen"
args = "-urdf -param robot_description -model my_robot -x $(arg x) -y $(arg y) -z $(arg z)" />
</launch>
로봇을 스폰할 위치를 정의해준다.
그리고 empty_world
를 먼저 launch 하고 spawn_robot
를 launch 하면 된다.
위와 같이 모델링한 자동차 모형이 Gazebo에 등장 하는 것을 확인 할 수 있다.
같은 로봇을 월드에서 여러번 불러올려면 어떻게 해야할까?
위 과정으로 한번더 spawn 을 launch 하면 에러가 나타나면서 로봇이 월드에 스폰할 수 없다고 나온다.
이유는 중복되는 model_name
을 가지는 객체를 소환 할 수 없기 때문이다.
위 문제를 해결하기 위해 아래와 같이 모델네임을 정의 할 수 있게 런치파일을 수정하면 된다.
🚀spawn_robot.launch
<?xml version= "1.0" ?>
<launch>
<param name="robot_description" command="cat '$(find robot_description)/urdf/robot.urdf'" />
<arg name="model_name" default="my_robot"/>
<arg name="x" default="0"/>
<arg name="y" default="0"/>
<arg name="z" default="0.5"/>
<node name="mybot_spawn" pkg="gazebo_ros" type="spawn_model" output="screen"
args="-urdf -param robot_description -model $(arg model_name) -x $(arg x) -y $(arg y) -z $(arg z)" />
</launch>
$roslaunch spawn.launch x:=6 model_name:=second
터미널 명령어로 model_name
을 선언하여 launch하면 이상없이 아래의 사진처럼 로봇을 스폰 할 수 있다.