ROS_建立多台_[1]:複製多台
複製多台
此處建立多台連線的程式,是使用ROS 的Turtlebot_gazebo檔案中,
原先既有的模擬檔turtlebot_world.launch修改而來。
如:
此處我建立了一個新的launch檔(multi_turtlebot_walls.launch )來啟動。
並且,此 multi_turtlebot_walls.launch 中的模擬環境,
是直接使用前面文章所建的多牆地形。
1.建立一個新launch執行檔。
multi_turtlebot_walls.launch (位於turtlebot_gazebo/launch中)
2.加上冠名。
若直接複製單台程式建立多台模擬時,會遇到因為主題(Topic)名稱相同,
使得控制及讀取參數時出現錯誤的情況。
建立多台時,是使用加入的指令將機台「包起來」的方式,
使其所有的主題前都掛有特別的名稱,
如此既可使用同樣的單台程式建立多台的控制,
並且不會有互相影響的情況產生。
如:
此處我是建立一個新launch檔,robots.launch (位於turtlebot_gazebo/launch中)
其中:
此處建立多台連線的程式,是使用ROS 的Turtlebot_gazebo檔案中,
原先既有的模擬檔turtlebot_world.launch修改而來。
如:
此處我建立了一個新的launch檔(multi_turtlebot_walls.launch )來啟動。
並且,此 multi_turtlebot_walls.launch 中的模擬環境,
是直接使用前面文章所建的多牆地形。
1.建立一個新launch執行檔。
multi_turtlebot_walls.launch (位於turtlebot_gazebo/launch中)
<?xml version="1.0"?>
<launch>
<arg name="paused" default="false"/>
<arg name="use_sim_time" default="true"/>
<arg name="gui" default="true"/>
<arg name="headless" default="false"/>
<arg name="debug" default="false"/>
<arg name="base" value="$(optenv TURTLEBOT_BASE kobuki)"/> <!-- create, roomba -->
<arg name="battery" value="$(optenv TURTLEBOT_BATTERY /proc/acpi/battery/BAT0)"/> <!-- /proc/acpi/battery/BAT0 -->
<arg name="stacks" value="$(optenv TURTLEBOT_STACKS hexagons)"/> <!-- circles, hexagons -->
<arg name="3d_sensor" value="$(optenv TURTLEBOT_3D_SENSOR kinect)"/> <!-- kinect, asus_xtion_pro -->
<arg name="map_file" value="/home/q200/wallmap/wallsmap.yaml"/>
<arg name="model" default="$(find urdf_tutorial)/urdf/wallworld.urdf.xacro"/>
<param name="/use_sim_time" value="true" />
<param name="map_description" command="$(find xacro)/xacro.py $(arg model)" />
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model"
args="-z 1.0 -unpause -urdf -model robot -param map_description" respawn="false" output="screen" />
<include file="$(find gazebo_ros)/launch/empty_world.launch">
<arg name="debug" value="$(arg debug)" />
<arg name="gui" value="$(arg gui)" />
<arg name="paused" value="$(arg paused)"/>
<arg name="use_sim_time" value="$(arg use_sim_time)"/>
<arg name="headless" value="$(arg headless)"/>
</include>
<!-- include our robots -->
<include file="$(find turtlebot_gazebo)/launch/robots.launch">
<arg name="map_file" value="$(arg map_file)"/>
<arg name="base" value="$(arg base)"/>
<arg name="stacks" value="$(arg stacks)"/>
<arg name="3d_sensor" value="$(arg 3d_sensor)"/>
</include>
</launch>
2.加上冠名。
若直接複製單台程式建立多台模擬時,會遇到因為主題(Topic)名稱相同,
使得控制及讀取參數時出現錯誤的情況。
建立多台時,是使用加入
使其所有的主題前都掛有特別的名稱,
如此既可使用同樣的單台程式建立多台的控制,
並且不會有互相影響的情況產生。
如:
此處我是建立一個新launch檔,robots.launch (位於turtlebot_gazebo/launch中)
其中:
<!-- BEGIN ROBOT 1-->
<group ns="robot1">
<arg name="robot_name" value="/robot1"/>
<arg name="initial_pose_x" value="0.0"/>
<arg name="initial_pose_y" value="0.0"/>
<arg name="initial_pose_z" value="0.0"/>
<node name="map_relay" type="relay" pkg="topic_tools" args="/map $(arg robot_name)/map" />
<arg name="odom_frame_id" value="$(arg robot_name)/odom"/>
<arg name="base_frame_id" value="$(arg robot_name)/base_footprint"/>
<arg name="global_frame_id" value="/map"/>
<arg name="odom_topic" value="$(arg robot_name)/odom" />
<arg name="laser_topic" value="$(arg robot_name)/scan" />
<param name="tf_prefix" value="$(arg robot_name)" />
<!-- OPEN One_robot launch-->
<include file="$(find turtlebot_gazebo)/launch/one_robot.launch" >
<arg name="base" value="$(arg base)"/>
<arg name="stacks" value="$(arg stacks)"/>
<arg name="3d_sensor" value="$(arg 3d_sensor)"/>
<arg name="init_pose" value="-x $(arg initial_pose_x) -y $(arg initial_pose_y) -z $(arg initial_pose_z)" />
<arg name="robot_name" value="$(arg robot_name)" />
</include>
<!-- AMCL and MOVE BASE-->
<include file="$(find turtlebot_gazebo)/launch/amcl_demo_multiturtlebot.launch" >
<arg name="robot_name" value="$(arg robot_name)" />
<arg name="map_file" value="$(arg map_file)"/>
<arg name="3d_sensor" value="$(arg 3d_sensor)"/>
<arg name="odom_frame_id" value="$(arg odom_frame_id)"/>
<arg name="base_frame_id" value="$(arg base_frame_id)"/>
<arg name="global_frame_id" default="$(arg global_frame_id)"/>
<arg name="odom_topic" value="$(arg odom_topic)" />
<arg name="laser_topic" value="$(arg laser_topic)" />
</include>
</group>
留言
張貼留言