5. rosrun, roslaunch, launch ํ์ผ
rosrun & roslaunch
Node๋ฅผ ์คํ์ํค๋ ๋ฐฉ์์๋ ํฌ๊ฒ ๋๊ฐ์ง๊ฐ ์์ต๋๋ค.
roslaunch <package-name> <lauch-file-name.launch>
$ roslaunch gcamp_gazebo gazebo_world.launch
.xml
2.
rosrun <package-name> <executable-file-name>
$ rosrun teleop_twist_keyboard teleop_twist_keyboard.py
์ด ๋์ ์ฐจ์ด์ ์ ๋ํด ์ด์ผ๊ธฐํด๋ณด์๋ฉด,
rosrun
์ ๋จ ํ๋์ Node๋ฅผ ์คํ์ํค๋
๊ฒ์ด๋ฉฐ,
roslaunch
๋ launch ํ์ผ์ ํตํด ํ๋ฒ์ ์ฌ๋ฌ๊ฐ์
Node๋ฅผ ๋์์ ์คํ์ํฌ ์ ์๋ค๋ ์ ์
๋๋ค.
launch file
์ด๋ฒ์๋ roslaunch
๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ
launch file
์ ๋ํด ์์๋ณด๊ณ ์ ํฉ๋๋ค.
์์ ์์ ์ด๋ ๋ค์ ์์น์ ์กด์ฌํ๊ณ ์์ต๋๋ค.
$ cd ~/gcamp_ws/src/gcamp_ros_basic/gcamp_gazebo
$ l
CMakeLists.txt launch/ meshes/ package.xml rviz/ urdf/ worlds/
๋ค์์ ํ์ผ์ด ๋ฐ๋ก launch ํ์ผ์ธ๋ฐ์. ํ๋ฒ ๋ด์ฉ์ ์ดํด๋ด ์๋ค.
- gazebo_world.launch
<?xml version="1.0" encoding="UTF-8"?>
<launch>
<!-- Robot pose -->
<arg name="x" default="0"/>
<arg name="y" default="0"/>
<arg name="z" default="0"/>
<arg name="roll" default="0"/>
<arg name="pitch" default="0"/>
<arg name="yaw" default="0"/>
<arg name="world_name" default="gcamp_world.world"/>
<arg name="world_file" default="$(find gcamp_gazebo)/worlds/$(arg world_name)"/>
<arg name="model_name" default="tinybot"/>
<arg name="package_name" default="gcamp_gazebo" />
<arg name="path" value="(find $(arg package_name))" />
<arg name="dollar" value="$" />
<!-- Launch other relevant files-->
<include file="$(arg dollar)$(arg path)/launch/robot_description.launch"/>
<!-- Launch Gazebo World -->
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="use_sim_time" value="true"/>
<arg name="debug" value="false"/>
<arg name="gui" value="true" />
<arg name="world_name" value="$(arg world_file)"/>
</include>
<!-- Spawn My Robot -->
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
args="-urdf -param robot_description -model $(arg model_name)
-x $(arg x) -y $(arg y) -z $(arg z)
-R $(arg roll) -P $(arg pitch) -Y $(arg yaw)"/>
<!--launch rviz-->
<node pkg="rviz" type="rviz" name="rviz" args="-d $(arg dollar)$(arg path)/rviz/tinybot.rviz"/>
</launch>
์ฒ์ ๋ณด์ จ๋ค๋ฉด ๋๋ผ์ค ์๋ ์๊ฒ ์ง๋ง, ์ฐจ๊ทผ์ฐจ๊ทผ ์ดํด๋ณด์ฃ .
์ต์ํ์ xml
launchํ์ผ์ xml
์ด๋ผ๋ ๋ฌธ๋ฒ์ ์ฌ์ฉํฉ๋๋ค. html์ ์ฌ์ฉํด๋ณด์
จ๋ค๋ฉด ์ฝ๊ฒ
์ตํ์ค ์ ์์ต๋๋ค.
๊ธฐ๋ณธ ๋ฌธ๋ฒ์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ง๊ณ ๋์ด๊ฐ๊ฒ ์ต๋๋ค.
- line์ ์์๊ณผ ๋, ํ๊ทธ
<tag />
or
<tag (value)>
...
</tag>
ํ line์ /๋ก ์ข ๋ฃ๋จ์ ์๋ ค์ผ ํฉ๋๋ค. ์ด๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์๋ ์์ ๋๊ฐ์ง๊ฐ ์์ต๋๋ค.
2. tag ์ข ๋ฅ
launch
: launch ํ์ผ์์ ์๋ ค์ฃผ๋ tag์ ๋๋ค. html์ body์ ๋น์ทํ๋ค๊ณ ๋ณผ ์ ์์ต๋๋ค.
include
: launch ํ์ผ์์ ๋ค๋ฅธ launchํ์ผ์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ ๋ชจ๋ํ ํด๋์๋ค๋ฉด ๋๊ณ ๋๊ณ ์ฌ์ฉํ ์ ์๊ฒ ์ฃ ?
<include file="$(arg dollar)$(arg path)/launch/robot_description.launch"/>
<include file="$(find gazebo_ros)/launch/empty_world.launch">
node
: ๋จ์ผ node๋ฅผ ์ถ๊ฐํ๊ณ ์ ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉํฉ๋๋ค. ์ง์ ๋ง๋ node๋ฅผ launchํ์ผ๋ก ๋ง๋ค๊ณ ์ ํ๋ ๊ฒฝ์ฐ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค.
<node pkg="rviz" type="rviz" name="rviz" args="-d $(arg dollar)$(arg path)/rviz/tinybot.rviz"/>
pkg, type, name์ ์ฐ์ ๋์ด๊ฐ๊ณ ๋ท๋ถ๋ถ ๊ฐ์ข์์ ์ดํด๋ด ๋๋ค.
arg
: ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์ ๋ณ์๋ฅผ ์ค์ ํ๋ฏ์ด, ์ด ํ์ผ ์์์ ์ฌ์ฉ๋ argument๋ฅผ ์ง์ ํฉ๋๋ค. ๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
# argument ์ค์
<arg name="test_arg" value="Hello"/>
<arg name="test_arg2" default="0"/>
# argument ์ฌ์ฉ
<arg name="package_name" default="gcamp_gazebo" />
<arg name="path" value="(find $(arg package_name))" />
- includeํ๋ launch ํ์ผ์๋ arg๊ฐ ์๋ ๊ฒฝ์ฐ, ๋ค์๊ณผ ๊ฐ์ด ์ด๋ฅผ ์ค์ ํ ์ ์์ต๋๋ค.
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="use_sim_time" value="true"/>
<arg name="debug" value="false"/>
<arg name="gui" value="true" />
<arg name="world_name" value="$(arg world_file)"/>
</include>
์๋ง empty_world.launch
์๋
use_sim_time, debug, gui, world_name๋ผ๋
arg๋ค์ด ์์ ๊ฒ์
๋๋ค.
์ง์ ์ดํด๋ณผ๊น์?
$ roscd gazebo_ros
$ cd launch
$ gedit empty_world.launch
<?xml version="1.0"?>
<launch>
<!-- these are the arguments you can pass this launch file, for example paused:=true -->
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="extra_gazebo_args" default=""/>
<arg name="gui" default="true"/>
<arg name="recording" default="false"/>
<!-- Note that 'headless' is currently non-functional. See gazebo_ros_pkgs issue #491 (-r arg does not disable
rendering, but instead enables recording). The arg definition has been left here to prevent breaking downstream
launch files, but it does nothing. -->
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<arg name="physics" default="ode"/>
<arg name="verbose" default="false"/>
<arg name="output" default="screen"/>
<arg name="world_name" default="worlds/empty.world"/> <!-- Note: the world_name is with respect to GAZEBO_RESOURCE_PATH environmental variable -->
<arg name="respawn_gazebo" default="false"/>
<arg name="use_clock_frequency" default="false"/>
<arg name="pub_clock_frequency" default="100"/>
<arg name="enable_ros_network" default="true" />
<arg name="server_required" default="false"/>
<arg name="gui_required" default="false"/>
(...)
$(find pkg)
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<include file="$(find gazebo_ros)/launch/empty_world.launch">
find <package-name>
์
ํตํด ๋ค๋ฅธ ํจํค์ง์ ์๋ ํ์ผ์ ๊ฐ์ ธ์ฌ ์ ์๊ฒ ๋ฉ๋๋ค!!
3. ์ฃผ์
์ฃผ์์ html๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก <!-- --> ์ฌ์ด์ ์ค๋ ์ฝ๋๋ ๋ฌด์๋ฉ๋๋ค.
๋จ, ์ฃผ์์ฌํญ ํ๋ ์์ต๋๋ค. launch ํ์ผ์ ์ฌ์ฉํ๋ค๋ณด๋ฉด --๊ฐ ์ข ์ข ์ฐ์ด๊ณค ํ๋๋ฐ์. ์ด ๊ฒฝ์ฐ ์ฃผ์์ ์ค๋ฅ๊ฐ ๋๋ ์ฃผ์ํ์๊ธฐ ๋ฐ๋๋๋ค.
์คํ์์ค ํจํค์ง๋ฅผ ์ฌ์ฉํ๊ฒ ๋๋ฉด launch ํ์ผ์ ๋ถ์์ ํตํด ๋ง์ ๊ฒ๋ค์ ํ์ ํ ์ ์์ต๋๋ค.
๋ฐ๋๋ก ๋งํ๋ฉด, ์ฌ๋ฌ๋ถ์ด ๋ง๋ค๊ฒ ๋ ํจํค์ง๋ launch ํ์ผ์ ์ ์ ๋ฆฌํด๋์ด์ผ ๊ฐ์ด ํ๋ ฅํ๋ ๊ฐ๋ฐ์๊ฐ ๋ณด๋ค ์ดํดํ๊ธฐ ์ฌ์ธ ๊ฒ์ ๋๋ค.