0
$\begingroup$

Rosanswers logo

Hi ,

i am trying to setup a multi-robot-exploration like shown in the video of the explorer package (http://wiki.ros.org/explorer). Did someone successfully get that setup running? (explorer + map_merger + adhoc_communication)

Here is what i got so far: I started with files from https://github.com/OSLL/aau_multi_robot, which is a fork of the aau-ros/aau_multi_robot repository containing some new launch files. If i run my launch file, based on them, the 2 robots start exploration, but in an uncoordinated way.

I then read a bit in the source code and found a comment stating that the robot names have to be added to the source code (in explorer.cpp at line 103 of the explorer package). I added my robot names and recompiled explorer. but unfortunately that doesn't change anything.

Last thing i found was a commented Preprocessor directive #define JOIN_ALL_GROUPS (in define.h of the adhoc_communication package), which activates a code block (in adhoc_communication.cpp at line 1208) in which this adhoc_communication node tries to join all existing multicast groups. I uncommented this directive and compiled adhoc_communication again. Then i get error messages (from adhoc_communication) like this:

DROP FRAME: ID[36] CONFIRMER MAC[00-00-00-00-00-11] SOURCE HOST[] TYPE[MC ACTIVATION]
REMOVE DOWNLINK: GROUP[mc_robot_1]  HOST[robot_0] 

and from explorer i get warnings like:

Failed to call service sendToMulticast [/robot_0/adhoc_communication/send_frontier]

So i guess i configured something wrong with the adhoc_communication package. Any help would be appreciated. Thanks!

Here is my current launch file (aau_multi_robot_simulation is a package i created containing parameter and configuration files; i don't think the problem is related to them, so i omit them):

<?xml version="1.0"?>
<launch>

<arg name="num_of_robots" default="2" />
<arg name="robot_macs" default="robot_0,00:00:00:00:00:11!robot_1,00:00:00:00:00:22!" />
<arg name="log_path" default="$(env HOME)/logs" />
<arg name="robot_local_map_frame" default="map" />
<arg name="output" default="log" />
<arg name="frontier_selection" default="1"/>
<param name="/use_sim_time" value="true"/>


<node pkg="stage_ros" type="stageros" name="simulation" args="$(find aau_multi_robot_simulation)/world/sim_world.world" />

<!-- ROBOT 1 !-->
<node pkg="adhoc_communication" type="adhoc_communication" name="robot_0" respawn="true" launch-prefix="xterm -e">
    <param name="mac" value="00:00:00:00:00:11"/>
    <param name="robot_name" value="robot_0"/>
    <param name="interface" value="lo"/>
    <param name="num_link_retrans" value="3" />
    <param name="num_e2e_retrans" value="3" />
    <param name="num_rreq" value="1" />
    <param name="max_frame_size" value="1500" />
    <param name="hop_limit_min" value="0" />
    <param name="hop_limit_max" value="0" />
    <param name="hop_limit_increment" value="3" />
    <param name="max_packet_size" value="1500000" />
    <param name="beacon_interval" value="100" />
    <param name="enable_cooperative_relaying" value="true" />
    <param name="simulation_mode" value="true"/>
    <param name="robots_in_simulation" value="$(arg num_of_robots)" />
    <param name="sim_robot_macs" value="$(arg robot_macs)" />
    <param name="p_tx" value="1" />
                
</node>

<node name="teleop_0" pkg="teleop_twist_keyboard" type="teleop_twist_keyboard.py" output="$(arg output)" launch-prefix="xterm -e" args="-t /robot_0/cmd_vel" />

<node pkg="map_merger" type="map_merger" name="map_merger" output="$(arg output)" ns="robot_0" respawn="true" launch-prefix="xterm -e">
    <param name="log_path" value="$(arg log_path)" />
    <param name="robot_name" value="robot_0" />
    <param name="robot_prefix" value="" />
    <param name="local_map_frame_id" value="$(arg robot_local_map_frame)"/>
    <param name="exchange_position" value="true" />
    <param name="has_local_map" value="true" />
    <param name="position_local_robot_topic" value="/robot_0/odom" />
    <param name="seconds_send_timer" value="8" />
    <param name="seconds_pub_timer" value="6" />
    <param name="seconds_recompute_transform" value="25" />
    <param name="seconds_send_position" value="6" />
    <param name="position_other_robots_topic" value="/robot_0/position_other_robots"/>       
        <param name="split_size" value="2048" />
        <param name="splitted" value="true" />
        <param name="local_map_topic" value="/robot_0/map" />
        <param name="meta_topic_over_network" value="/robot_0/map_meta" />
        <param name="local_map_metadata_topic" value="/robot_0/map_metadata" />
        
    <remap from="/map_other" to="/robot_0/map_other"/>
    <remap from="/control" to="/robot_0/control"/>
    <remap from="/adhoc_communication/new_robot" to="/robot_0/adhoc_communication/new_robot"/>
    <remap from="/all_positions" to="/robot_0/all_positions"/>
    <remap from="/adhoc_communication/get_neighbors" to="/robot_0/adhoc_communication/get_neighbors"/>
    <remap from="/adhoc_communication/send_position" to="/robot_0/adhoc_communication/send_position"/>
    <remap from="/adhoc_communication/send_map_update" to="/robot_0/adhoc_communication/send_map_update"/>
    <remap from="/adhoc_communication/send_control_message" to="/robot_0/adhoc_communication/send_control_message"/>
    <remap from="/adhoc_communication/send_map" to="/robot_0/adhoc_communication/send_map"/>
</node>

<node name="slam_gmapping_0" pkg="gmapping" type="slam_gmapping" output="$(arg output)" ns="robot_0" respawn="true">
    <param name="odom_frame" value="/robot_0/odom" />
    <param name="base_frame" value="/robot_0/base_link" />
    <remap from="scan" to="/robot_0/base_scan"/>
    <remap from="map" to="/robot_0/map"/>
    <remap from="map_metadata" to="/robot_0/map_metadata"/>
</node>


<!-- 
        Start navigation stack
    -->
    <node respawn="true" pkg="move_base" type="move_base" name="move_base" ns="robot_0">
        <!-- <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS"/> -->
        <param name="base_local_planner" value="base_local_planner/TrajectoryPlannerROS"/>
        <param name="controller_frequency" value="5"/>
        
        <rosparam command="load" file="$(find aau_multi_robot_simulation)/param/base_local_planner_params.yaml"/>
        <!-- <rosparam command="load" file="$(find aau_multi_robot_simulation)/param/dwa_local_planner_params.yaml"/> -->
                    
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_costmap_common_params.yaml" command="load" ns="global_costmap" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_costmap_common_params.yaml" command="load" ns="local_costmap" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_local_costmap_params.yaml" command="load" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_global_costmap_params.yaml" command="load" />
        
        <param name="global_costmap/laser_scan_sensor/sensor_frame" value="/robot_0/base_laser_link" />
        <param name="global_costmap/laser_scan_sensor/topic" value="/robot_0/base_scan" />
        <param name="global_costmap/robot_base_frame" value="/robot_0/base_footprint" />
        <param name="global_costmap/map_topic" value="/robot_0/map_merger/global_map" />            
            
        <param name="local_costmap/laser_scan_sensor/sensor_frame" value="/robot_0/base_laser_link" />
        <param name="local_costmap/laser_scan_sensor/topic" value="/robot_0/base_scan" />
        <param name="local_costmap/global_frame" value="/robot_0/odom" />
        <param name="local_costmap/map_topic" value="/robot_0/map_merger/global_map" />     
        <param name="local_costmap/robot_base_frame" value="/robot_0/base_footprint" />
                    
    </node>
    <!-- 
        Start exploration package
    -->
    <node respawn="true" pkg="explorer" type="explorer" name="explorer" output="$(arg output)" ns="robot_0" launch-prefix="xterm -e">
        <!-- costmaps -->
        <param name="robot_prefix" value=""/>
    
        <!-- simulation parameters -->
        <param name="log_path" value="$(arg log_path)" />
        <param name="robot_name" value="robot_0" />
    
        <!-- params for move_base -->
        <param name="base_link" value="/robot_0/base_link" />
        <param name="move_base_frame" value="/map" />
    
        <!-- exploration parameters -->
        <param name="frontier_selection" value="$(arg frontier_selection)" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_costmap_common_params.yaml" command="load" ns="global_costmap" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_costmap_common_params.yaml" command="load" ns="local_costmap" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_local_costmap_params.yaml" command="load" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_global_costmap_params.yaml" command="load" />
        
        <param name="global_costmap/laser_scan_sensor/sensor_frame" value="/robot_0/base_laser_link" />
        <param name="global_costmap/laser_scan_sensor/topic" value="/robot_0/base_scan" />
        <param name="global_costmap/robot_base_frame" value="/robot_0/base_footprint" />
        <param name="global_costmap/map_topic" value="/robot_0/map_merger/global_map" />    
                    
        <param name="local_costmap/laser_scan_sensor/sensor_frame" value="/robot_0/base_laser_link" />
        <param name="local_costmap/laser_scan_sensor/topic" value="/robot_0/base_scan" />
        <param name="local_costmap/global_frame" value="/robot_0/odom" />
        <param name="local_costmap/map_topic" value="/robot_0/map_merger/global_map" />     
        <param name="local_costmap/robot_base_frame" value="/robot_0/base_footprint" />
        
        <remap from="/adhoc_communication/send_frontier" to="/robot_0/adhoc_communication/send_frontier"/>
        <remap from="/adhoc_communication/send_auction" to="/robot_0/adhoc_communication/send_auction"/>
        <remap from="/map_merger/logOutput" to="/robot_0/map_merger/logOutput"/>
            
    
</node>




<!-- ROBOT 2 !-->
<node pkg="adhoc_communication" type="adhoc_communication" name="robot_1" respawn="true" launch-prefix="xterm -e">
    <param name="mac" value="00:00:00:00:00:22"/>
    <param name="robot_name" value="robot_1"/>
    <param name="interface" value="lo"/>
    <param name="num_link_retrans" value="3" />
    <param name="num_e2e_retrans" value="3" />
    <param name="num_rreq" value="1" />
    <param name="max_frame_size" value="1500" />
    <param name="hop_limit_min" value="0" />
    <param name="hop_limit_max" value="0" />
    <param name="hop_limit_increment" value="3" />
    <param name="max_packet_size" value="1500000" />
    <param name="beacon_interval" value="100" />
    <param name="enable_cooperative_relaying" value="true" />
    <param name="simulation_mode" value="true"/>
    <param name="robots_in_simulation" value="$(arg num_of_robots)" />
    <param name="sim_robot_macs" value="$(arg robot_macs)" />
    <param name="p_tx" value="1" />
                
</node>

<node name="teleop_1" pkg="teleop_twist_keyboard" type="teleop_twist_keyboard.py" output="$(arg output)" launch-prefix="xterm -e" args="-t /robot_1/cmd_vel" />

<node pkg="map_merger" type="map_merger" name="map_merger" output="$(arg output)" ns="robot_1" respawn="true" launch-prefix="xterm -e">
    <param name="log_path" value="$(arg log_path)" />
    <param name="robot_name" value="robot_1" />
    <param name="robot_prefix" value="" />
    <param name="local_map_frame_id" value="$(arg robot_local_map_frame)"/>
    <param name="exchange_position" value="true" />
    <param name="has_local_map" value="true" />
    <param name="position_local_robot_topic" value="/robot_1/odom" />
    <param name="seconds_send_timer" value="8" />
    <param name="seconds_pub_timer" value="6" />
    <param name="seconds_recompute_transform" value="25" />
    <param name="seconds_send_position" value="6" />
    <param name="position_other_robots_topic" value="/robot_1/position_other_robots"/>       
        <param name="split_size" value="2048" />
        <param name="splitted" value="true" />
        <param name="local_map_topic" value="/robot_1/map" />
        <param name="meta_topic_over_network" value="/robot_1/map_meta" />
        <param name="local_map_metadata_topic" value="/robot_1/map_metadata" />  
        
    <remap from="/map_other" to="/robot_1/map_other"/>
    <remap from="/control" to="/robot_1/control"/>
    <remap from="/adhoc_communication/new_robot" to="/robot_1/adhoc_communication/new_robot"/>
    <remap from="/all_positions" to="/robot_1/all_positions"/>
    <remap from="/adhoc_communication/get_neighbors" to="/robot_1/adhoc_communication/get_neighbors"/>
    <remap from="/adhoc_communication/send_position" to="/robot_1/adhoc_communication/send_position"/>
    <remap from="/adhoc_communication/send_map_update" to="/robot_1/adhoc_communication/send_map_update"/>
    <remap from="/adhoc_communication/send_control_message" to="/robot_1/adhoc_communication/send_control_message"/>
    <remap from="/adhoc_communication/send_map" to="/robot_1/adhoc_communication/send_map"/>
</node>

<node name="slam_gmapping_1" pkg="gmapping" type="slam_gmapping" output="$(arg output)" ns="robot_1" respawn="true">
    <param name="odom_frame" value="/robot_1/odom" />
    <param name="base_frame" value="/robot_1/base_link" />
    <remap from="scan" to="/robot_1/base_scan"/>
    <remap from="map" to="/robot_1/map"/>
    <remap from="map_metadata" to="/robot_1/map_metadata"/>
</node>


    <!-- 
        Start navigation stack
    -->
    <node respawn="true" pkg="move_base" type="move_base" name="move_base" ns="robot_1">
        <!-- <param name="base_local_planner" value="dwa_local_planner/DWAPlannerROS"/> -->
        <param name="base_local_planner" value="base_local_planner/TrajectoryPlannerROS"/>
        <param name="controller_frequency" value="5"/>
        
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_costmap_common_params.yaml" command="load" ns="global_costmap" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_costmap_common_params.yaml" command="load" ns="local_costmap" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_local_costmap_params.yaml" command="load" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_global_costmap_params.yaml" command="load" />
        <rosparam command="load" file="$(find aau_multi_robot_simulation)/param/base_local_planner_params.yaml"/>
        <!-- <rosparam command="load" file="$(find aau_multi_robot_simulation)/param/dwa_local_planner_params.yaml"/> -->

        <param name="global_costmap/laser_scan_sensor/sensor_frame" value="/robot_1/base_laser_link" />
        <param name="global_costmap/laser_scan_sensor/topic" value="/robot_1/base_scan" />
        <param name="global_costmap/robot_base_frame" value="/robot_1/base_footprint" />
        <param name="global_costmap/map_topic" value="/robot_1/map_merger/global_map" />            
            
        <param name="local_costmap/laser_scan_sensor/sensor_frame" value="/robot_1/base_laser_link" />
        <param name="local_costmap/laser_scan_sensor/topic" value="/robot_1/base_scan" />
        <param name="local_costmap/global_frame" value="/robot_1/odom" />
        <param name="local_costmap/map_topic" value="/robot_1/map_merger/global_map" />     
        <param name="local_costmap/robot_base_frame" value="/robot_1/base_footprint" />     
    </node>
    <!-- 
        Start exploration package
    -->
    <node respawn="true" pkg="explorer" type="explorer" name="explorer" output="$(arg output)" ns="robot_1" launch-prefix="xterm -e">
        <!-- costmaps -->
        <param name="robot_prefix" value=""/>
    
        <!-- simulation parameters -->
        <param name="log_path" value="$(arg log_path)" />
        <param name="robot_name" value="robot_1" />
    
        <!-- params for move_base -->
        <param name="base_link" value="/robot_1/base_link" />
        <param name="move_base_frame" value="/map" />
    
        <!-- exploration parameters -->
        <param name="frontier_selection" value="$(arg frontier_selection)" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_costmap_common_params.yaml" command="load" ns="global_costmap" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_costmap_common_params.yaml" command="load" ns="local_costmap" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_local_costmap_params.yaml" command="load" />
        <rosparam file="$(find aau_multi_robot_simulation)/param/simulation_global_costmap_params.yaml" command="load" />

        <param name="global_costmap/laser_scan_sensor/sensor_frame" value="/robot_1/base_laser_link" />
        <param name="global_costmap/laser_scan_sensor/topic" value="/robot_1/base_scan" />
        <param name="global_costmap/robot_base_frame" value="/robot_1/base_footprint" />
        <param name="global_costmap/map_topic" value="/robot_1/map_merger/global_map" />            
            
        <param name="local_costmap/laser_scan_sensor/sensor_frame" value="/robot_1/base_laser_link" />
        <param name="local_costmap/laser_scan_sensor/topic" value="/robot_1/base_scan" />
        <param name="local_costmap/global_frame" value="/robot_1/odom" />
        <param name="local_costmap/map_topic" value="/robot_1/map_merger/global_map" />     
        <param name="local_costmap/robot_base_frame" value="/robot_1/base_footprint" />
                
        <remap from="/adhoc_communication/send_frontier" to="/robot_1/adhoc_communication/send_frontier"/>
        <remap from="/adhoc_communication/send_auction" to="/robot_1/adhoc_communication/send_auction"/>
        <remap from="/map_merger/logOutput" to="/robot_1/map_merger/logOutput"/>

        
                    
    </node>


<!--
  Visualising the robot while building a map or navigating.
!-->
<node pkg="rviz" type="rviz" name="rviz" args="-d $(find aau_multi_robot_simulation)/rviz/test_merging_for_three.rviz"/>
</launch>

edit:

If i start my launch file without modifing explorer.cpp and adhoc_communication.cpp i get the same log output sequence as with the launch files posted by Micha. e.g.:

Robot 1 starting an auction
sending auction to multicast group 'mc_robot_1' on topic 'auction'
Service called to send Auction..
DESTINATION: [mc_robot_1]
DESTINATION IS A MC GROUP: [mc_robot_1]
THERE ARE NO OTHER MEMBERS IN THE MC GROUP [mc_robot_1]
Successfully called service sendToMulticast
Auction was multicasted successfully.

So i think uncommenting #define JOIN_ALL_GROUPS is necessary (or calling the Service for joining a multicast group). But if i uncomment that define i get errors as mentioned above with my launch file as well as with Michas.


Originally posted by js4 on ROS Answers with karma: 35 on 2015-11-14

Post score: 0

$\endgroup$

1 Answer 1

0
$\begingroup$

Rosanswers logo

Hi, I'm running the configuration with the launch files I attached. Give it a try and let me know if it works for you. Regards, Micha

master.launch which starts everything needed:

<?xml version="1.0"?>
<launch>
    <node name="stage" pkg ="stage_ros" type="stageros" args="$(find multi_robot_simulation)/world/world.world" />
    <param name="use_sim_time"  value="true"/>
    <group ns="robot_0">
        <include file="$(find adhoc_communication)/launch/adhoc_communication.launch">
            <arg name="log_path" value="logs/15-11-20/14-06-42/1" />
            <arg name="robot_name" value="robot_0" />
            <arg name="robot_prefix" value="/robot_0" />
            <arg name="interface" value="lo" />
            <arg name="use_sim_time" value="true" />
            <arg name="mac" value="02:01:00:00:00:00" />
            <arg name="sim_robot_macs" value="robot_0,02:01:00:00:00:00!robot_1,02:02:00:00:00:00" />
        </include>
        <include file="$(find multi_robot_simulation)/launch/move_base.launch">
            <arg name="robot" value="robot_0" />
            <arg name="robot_pref" value="/robot_0" />
            <arg name="output" value="log" />
        </include>
        <include file="$(find multi_robot_simulation)/launch/mapping.launch">
            <arg name="robot" value="robot_0" />
            <arg name="robot_prefix" value="/robot_0" />
            <arg name="robot_local_map_frame" value="robot_0/map" />
            <arg name="output" value="log" />
            <arg name="log_path" value="logs/15-11-20/14-06-42/1" />
            <arg name="use_sim_time" value="true" />
            <arg name="xmax" value="35" />
            <arg name="xmin" value="-35" />
            <arg name="ymax" value="35" />
            <arg name="ymin" value="-35" />
        </include>
        <include file="$(find map_merger)/launch/map_merger.launch">
            <arg name="robot_name" value="robot_0" />
            <arg name="robot_prefix" value="/robot_0" />
            <arg name="robot_local_map_frame" value="robot_0/map" />
            <arg name="output" value="log" />
            <arg name="log_path" value="logs/15-11-20/14-06-42/1" />
            <arg name="use_sim_time" value="true" />
        </include>
        <include file="$(find explorer)/launch/exploration.launch">
            <arg name="robot_name" value="robot_0" />
            <arg name="robot_prefix" value="/robot_0" />
            <arg name="output" value="log" />
            <arg name="log_path" value="logs/15-11-20/14-06-42/1" />
            <arg name="frontier_selection" value="1" />
            <arg name="use_sim_time" value="true" />
        </include>
    </group>
    <group ns="robot_1">
        <include file="$(find adhoc_communication)/launch/adhoc_communication.launch">
            <arg name="log_path" value="logs/15-11-20/14-06-42/1" />
            <arg name="robot_name" value="robot_1" />
            <arg name="robot_prefix" value="/robot_1" />
            <arg name="interface" value="lo" />
            <arg name="use_sim_time" value="true" />
            <arg name="mac" value="02:02:00:00:00:00" />
            <arg name="sim_robot_macs" value="robot_0,02:01:00:00:00:00!robot_1,02:02:00:00:00:00" />
        </include>
        <include file="$(find multi_robot_simulation)/launch/move_base.launch">
            <arg name="robot" value="robot_1" />
            <arg name="robot_pref" value="/robot_1" />
            <arg name="output" value="log" />
        </include>
        <include file="$(find multi_robot_simulation)/launch/mapping.launch">
            <arg name="robot" value="robot_1" />
            <arg name="robot_prefix" value="/robot_1" />
            <arg name="robot_local_map_frame" value="robot_1/map" />
            <arg name="output" value="log" />
            <arg name="log_path" value="logs/15-11-20/14-06-42/1" />
            <arg name="use_sim_time" value="true" />
            <arg name="xmax" value="35" />
            <arg name="xmin" value="-35" />
            <arg name="ymax" value="35" />
            <arg name="ymin" value="-35" />
        </include>
        <include file="$(find map_merger)/launch/map_merger.launch">
            <arg name="robot_name" value="robot_1" />
            <arg name="robot_prefix" value="/robot_1" />
            <arg name="robot_local_map_frame" value="robot_1/map" />
            <arg name="output" value="log" />
            <arg name="log_path" value="logs/15-11-20/14-06-42/1" />
            <arg name="use_sim_time" value="true" />
        </include>
        <include file="$(find explorer)/launch/exploration.launch">
            <arg name="robot_name" value="robot_1" />
            <arg name="robot_prefix" value="/robot_1" />
            <arg name="output" value="log" />
            <arg name="log_path" value="15-11-20/14-06-42/1" />
            <arg name="frontier_selection" value="1" />
            <arg name="use_sim_time" value="true" />
        </include>
    </group>
</launch>

mapping.launch:

<?xml version="1.0"?>
<launch>
    <arg name="robot" />
    <arg name="robot_prefix" />
    <arg name="robot_local_map_frame" />
    <arg name="log_path" />
    <arg name="use_sim_time" default="true" />
    <arg name="output" default="log" />
    <arg name="xmax" default="35" />
    <arg name="xmin" default="-35" />
    <arg name="ymax" default="35" />
    <arg name="ymin" default="-35" />

    <param name="use_sim_time"  value="$(arg use_sim_time)"/>

    <node pkg="gmapping" type="slam_gmapping" name="mapping">
        <param name="base_frame" value="$(arg robot_prefix)/base_footprint" />
        <param name="odom_frame" value="$(arg robot_prefix)/odom" />
        <param name="map_frame" value="$(arg robot_prefix)/map" />
        <param name="scan_topic" value="$(arg robot_prefix)/base_scan" />
        <param name="xmax" value="$(arg xmax)" />
        <param name="ymax" value="$(arg ymax)" />
        <param name="xmin" value="$(arg xmin)" />
        <param name="ymin" value="$(arg ymin)" />
        <param name="transform_publish_period " value="1.00" />
        <param name="particles" value="5" />
        <param name="maxRange" value="60" />
        <param name="maxUrange" value="59.9" />
        <param name="temporalUpdate" value="2.0" />

        <remap from="scan" to="base_scan" />
    </node>
</launch>

move_base.launch:

<?xml version="1.0"?>
<launch>
    <arg name="robot" />
    <arg name="robot_pref" />
    <arg name="output" default="log" />

    <node pkg="move_base" type="move_base" name="move_base" >
        <param name="local_costmap/robot_base_frame" value="$(arg robot_pref)/base_footprint" />
        <param name="local_costmap/global_frame" value="$(arg robot_pref)/odom" />
        <param name="global_costmap/robot_base_frame" value="$(arg robot_pref)/base_footprint" />
        <param name="global_costmap/global_frame" value="$(arg robot_pref)/map" />
        <param name="global_costmap/map_topic" value="map_merger/global_map" />
        <param name="local_costmap/observation_sources" value="scan" />
        <param name="local_costmap/scan/topic" value="base_scan" />
        <param name="local_costmap/scan/data_type" value="LaserScan" />
        <param name="local_costmap/map_topic" value="map_merger/global_map" />
        <param name="local_costmap/scan/clearing" value="true" />
        <param name="local_costmap/scan/marking" value="true" />
        <param name="observation_persistence" value="0.1" />

        <rosparam file="common_costmap.yaml" command="load" ns="global_costmap" />
        <rosparam file="common_costmap.yaml" command="load" ns="local_costmap" />
        <rosparam file="navigation.yaml"     command="load" />
        <rosparam file="local_costmap.yaml"  command="load" />
        <rosparam file="global_costmap.yaml" command="load" />

        <remap from="$(arg robot_pref)$(arg robot_pref)/map" to="$(arg robot_pref)/map" />
    </node>
</launch>

common_costmap.yaml:

map_type: costmap
transform_tolerance: 50
obstacle_range: 2.5
raytrace_range: 4.0
inscribed_radius: 0.35
circumscribed_radius: 0.4
inflation_radius: 0.6
cost_scaling_factor: 15.0
lethal_cost_threshold: 100
footprint: [[-0.12, -0.12], [-0.12, 0.12], [0.12, 0.12],[0.12, -0.12]]

global_costmap.yaml:

global_costmap:
   update_frequency: 0.2
   publish_frequency: 0.5
   static_map: true
   rolling_window: false
   width: 150.0
   height: 150.0
   max_obstacle_height: 1.0

local_costmap.yaml:

local_costmap:
  update_frequency: 6
  publish_frequency: 6
  static_map: false
  rolling_window: true
  width: 8.0
  height: 8.0
  publish_voxel_map : true
  unknown_cost_value : 255
  track_unknown_space : true
  origin_x: 0.0
  origin_y: 0.0
  origin_z: 0.0
  unknown_threshold: 15
  resolution: 0.05
  restore_defaults: false
  mark_threshold: 0
  max_obstacle_height: 2.0
  max_obstacle_range: 2.5
  map_topic: map
  z_resolution: 0.2
  z_voxels: 10

navigation.yaml:

controller_frequency: 5.0
TrajectoryPlannerROS:
  max_vel_x: 0.50
  min_vel_x: 0.10
  max_rotational_vel: 1.5
  min_in_place_rotational_vel: 1.0
  acc_lim_th: 0.75
  acc_lim_x: 0.50
  acc_lim_y: 0.50

  transform_tolerance: 5
  default_tolerance: 5

  holonomic_robot: false
  yaw_goal_tolerance: 0.3
  xy_goal_tolerance: 0.25
  goal_distance_bias: 0.8
  path_distance_bias: 0.6
  sim_time: 1.5
  heading_lookahead: 0.325
  oscillation_reset_dist: 0.05

  vx_samples: 6
  vtheta_samples: 20
  dwa: false

Originally posted by Micha Sende with karma: 65 on 2015-11-20

This answer was ACCEPTED on the original site

Post score: 0


Original comments

Comment by js4 on 2015-11-20:
Hi Micha,

thanks for your answer! With that launch files i get exactly the same results as with my files. Are you sure the robots explore in a coordinated way on your machine? I am adding some information in my question above since the space for comments is limited.

Comment by dbcampbell92 on 2017-09-11:
I know this is a pretty old thread but do you know where the exploration.launch file is located? I can't find it anywhere but it would appear that it is not something that you simply have to make on your own.

On that note, did either of your finally get this to work correctly?

Comment by js4 on 2017-09-11:
Hi, seems like they updated their repository. Here is the version of the file i used https://github.com/OSLL/multibot/commit/411f8bfa03d9bfeed091210cf1de2b4ed293dd53#diff-ef6db82473c0731b27a43e75e21a0989 . I had to stop working with ros, so i can´t help you any further.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.