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中)

<?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>



留言

這個網誌中的熱門文章

ROS_建地圖_Octomap[1]:安裝及測試

C#_練習_[3]:對發票程式