Multi-robot exploration with explorer and adhoc_communication?
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 ...