Ask Your Question

Zephyrin's profile - activity

2014-04-29 20:35:11 -0500 received badge  Nice Answer (source)
2014-04-28 18:07:41 -0500 received badge  Famous Question (source)
2014-04-07 09:56:12 -0500 received badge  Teacher (source)
2014-04-07 09:56:12 -0500 received badge  Necromancer (source)
2014-03-26 06:00:43 -0500 commented answer Problem with multiple navigation on Gazebo

I made some test to know if it's better to use same map or one map per robot. The config you have is each robot has its own map, so in rviz, you need modify the topics where the map is received : "/turtlebot_1/map" (if my memory is good). Gazebo : 1.9.3 or .4

2014-03-25 10:40:38 -0500 commented answer Problem with multiple navigation on Gazebo

try to do : roslaunch exploration gazebo_2_robots.launch and then roslaunch exploration view_navigation.launch Without modify anything.

2014-03-25 06:50:40 -0500 commented answer Problem with multiple navigation on Gazebo

I made a git : Main launch are in "expolation/launch" and they call the other ones on "exploration/config". You need compile all source file to use the package.

2014-03-25 04:27:24 -0500 commented answer Problem with multiple navigation on Gazebo

Hi did you know which pluggin is used by Gazebo to launch your Turtlebot ? I think it's not the modified plugin but not sure. When I run tf2 I have the frame map shared between the two Turtlebot. Each Turtlebot have all other frames begining with /turtlebot_1/odom.

2014-03-11 05:15:50 -0500 received badge  Notable Question (source)
2014-03-10 01:37:26 -0500 commented answer Problem with multiple navigation on Gazebo

Hi Prima89, do you have a correct tf_transform tree ? And how do you do for your navigation ? I also remap some node of kobuki to have a correct graph on rqt but I don't have my source right now.

2014-02-25 04:08:02 -0500 received badge  Popular Question (source)
2014-02-24 21:18:11 -0500 commented answer Positioning multi-robot on static map

Thank, I use these config at first. But with this, my robot was jumping between the center of static map and his real position. I made an exploration of unknown environment so I need a stable robot which doesn't jump. Do you think if I plublish on the initialpose topics it can help me to fixe it ?

2014-02-21 05:15:18 -0500 received badge  Organizer (source)
2014-02-20 22:20:00 -0500 asked a question Positioning multi-robot on static map


I make a package with two Turtlebots and share a static map on Gazebo. My problem is that I can positionning Turtlebots where I want on a static global map.

I use GMapping and MoveBase and I try to make an exploration of an unknown environment.

When I use AMCL, turtlebots move between the center of the map and the real robot's position.

Is it possible to initialise the position of each Turtlebot on static map, and how ?


2014-02-19 06:31:35 -0500 commented answer Problem with multiple navigation on Gazebo

Still have problem with move_base which don't want to connect to robot_name/base_footprint...

2014-02-19 03:42:30 -0500 commented answer Problem with multiple navigation on Gazebo

If you use tho odom frame and base footprint frame of gmapping didn't do the trick ? When I do that, I get the warning : Waiting on transform from turtlebot_2/base_footprint to turtlebot_2/map to become available before running costmap, tf error And after a while, target odom drop 100.00% of message. My tf tree seems to be correct and when I compare the rqt_graph with 1 robot spawn without prefix and group is seems good. I'm running out of ideas … Did you get the joint_states node distinct for each robot and connect to gazebo ?

2014-02-19 00:03:46 -0500 commented answer Problem with multiple navigation on Gazebo

I tried to change all odom frame and base frame for every part of my launch but it changes nothing.

2014-02-19 00:01:39 -0500 received badge  Editor (source)
2014-02-18 23:19:39 -0500 received badge  Enthusiast
2014-02-14 01:42:18 -0500 answered a question Problem with multiple navigation on Gazebo


The question is number 1 :

How can we connected robot_name/odom -> robot_name/base_footprint on Hydro ?

The question 2 :

How can we connected /map -> /robot_name/odom still on Hydro ?

Question 1: So it's the gazebo plugin's of kobuki ros which it's does not take the namespace of robot. To get two branches robot1/odom -> robot1/basefootprint and robot2/odom -> robot2/basefootprint we need to edit the plugin.

I don't know yet how I can tell to gazebo to use the modified plugin so I make a backup :

mv /opt/ros/hydro/lib/ /opt/ros/hydro/lib/

Then in my Ros workspace I clone the Git repot :

cd ~/ros_workspace/src
git clone h t t p s : //

Don't have enouth karma to put a link.

Once you have all file you can edit the file locate :


For every publisher and subscriber I add

XXX.subscribe(node_name_ + "/XXXX");

Below all the edited file :

 * @author Marcus Liebhardt
 * This work has been inspired by Nate Koenig's Gazebo plugin for the iRobot Create.

#include <cmath>
#include <cstring>
#include <boost/bind.hpp>
#include <sensor_msgs/JointState.h>
#include <tf/LinearMath/Quaternion.h>
#include <gazebo/math/gzmath.hh>
#include "kobuki_gazebo_plugins/gazebo_ros_kobuki.h"

namespace gazebo

  enum {LEFT= 0, RIGHT=1};

  GazeboRosKobuki::GazeboRosKobuki() : shutdown_requested_(false)
    // Make sure the ROS node for Gazebo has already been initialized
    if (!ros::isInitialized())
    ROS_FATAL_STREAM("A ROS node for Gazebo has not been initialized, unable to load plugin. "
             << "Load the Gazebo system plugin '' in the gazebo_ros package)");

    // Initialise variables
    wheel_speed_cmd_[LEFT] = 0.0;
    wheel_speed_cmd_[RIGHT] = 0.0;
    cliff_detected_left_ = false;
    cliff_detected_center_ = false;
    cliff_detected_right_ = false;

    //  rosnode_->shutdown();
    shutdown_requested_ = true;
    // Wait for spinner thread to end
    //  ros_spinner_thread_->join();

    //  delete spinner_thread_;
    //  delete rosnode_;

  void GazeboRosKobuki::Load(physics::ModelPtr parent, sdf::ElementPtr sdf)
    model_ = parent;
    if (!model_)
    ROS_ERROR_STREAM("Invalid model pointer! [" << node_name_ << "]");
    // Get then name of the parent model and use it as node name
    std::string model_name = sdf->GetParent()->Get<std::string>("name");
    gzdbg << "Plugin model name: " << model_name << "\n";
    nh_ = ros::NodeHandle("");
    // creating a private name pace until Gazebo implements topic remappings
    nh_priv_ = ros::NodeHandle("/" + model_name);
    node_name_ = model_name;

    world_ = parent->GetWorld();
     * Prepare receiving motor power commands
    motor_power_sub_ = nh_priv_.subscribe(node_name_ + "/commands/motor_power", 10, &GazeboRosKobuki::motorPowerCB, this);
    motors_enabled_ = true;

     * Prepare joint state publishing
    if (sdf->HasElement("left_wheel_joint_name"))
    left_wheel_joint_name_ = sdf->GetElement("left_wheel_joint_name")->Get<std::string>();
    ROS_ERROR_STREAM("Couldn't find left wheel joint in the model description!"
             << " Did you specify the correct joint name?" << " [" << node_name_ <<"]");
    if (sdf->HasElement("right_wheel_joint_name"))
    right_wheel_joint_name_ = sdf->GetElement("right_wheel_joint_name")->Get<std::string>();
    ROS_ERROR_STREAM("Couldn't find right wheel joint in the model description!"
             << " Did you specify the correct joint name?" << " [" << node_name_ <<"]");
    joints_[LEFT] = parent->GetJoint(left_wheel_joint_name_);
    joints_[RIGHT] = parent->GetJoint(right_wheel_joint_name_);
    if (!joints_[LEFT] || !joints_[RIGHT])
    ROS_ERROR_STREAM("Couldn't find specified wheel joints in the model! [" << node_name_ <<"]");
    joint_state_.header.frame_id = "Joint States";;
    joint_state_.velocity.push_back(0 ...