Ask Your Question

# Revision history [back]

### robot state publisher namespace ""problem"" - namespace variable in group

Hi,

I have created an multirobot launch for Gazebo. Now I found out that there is a solvable problem with the namespace in the robot state publisher. I solved it with adding a tf_prefix. But now here is what I am interested in.

Is it possible to get the current namespace into the

 <param name="tf_prefix" value="robotA"/>


instead of writing the namespace name? Is there an environment variable that I could for example write something like this to get the "current namespace" for a parameter?:

 <param name="tf_prefix" value="$(optenv ns)"/> <!-- CAUTION: THIS IS NOT A WORKING SOLUTION -->  Unfortunately robot state publisher does not care about the namespace like for example the gazebo plugins do, if you do not add an tf_prefix they add it automatically. Yeah I know it is kind of a luxury problem but, I am just curious. I also know that there is the possibility to include this by a separate launchfile and add an argument for that. <!--ROBOT A--> <group ns="robotA" clear_params="true"> <param name="robot_description" command= "$(find xacro)/xacro.py $(find h4r_rapid_robot_xacros)/defs/test_robots/diff_drive_bot.xacro" /> <node pkg="robot_state_publisher" type="state_publisher" name="robot_state_publisher"> <param name="tf_prefix" value="robotA"/><!-- Is needed, for adding the namespace to other links --> <param name="publish_frequency" type="double" value="30.0"/> </node> <node name="spawn_test_bot" pkg="gazebo_ros" type="spawn_model" args="-z 0.2 -x 0 -urdf -param robot_description -model robot_description" respawn="false" /> </group>  Regards, Christian ### robot state publisher namespace ""problem"" - namespace variable in group Hi, I have created an multirobot launch for Gazebo. Now I found out that there is a solvable problem with the namespace in the robot state publisher. I solved it with adding a tf_prefix. But now here is what I am interested in. Is it possible to get the current namespace into the  <param name="tf_prefix" value="robotA"/>  instead of writing the namespace name? Is there an environment variable that I could for example write something like this to get the "current namespace" for a parameter?:  <param name="tf_prefix" value="$(optenv ns)"/> <!--  CAUTION: THIS IS NOT A WORKING SOLUTION  -->


Unfortunately robot state publisher does not care about the namespace like for example the gazebo plugins do, if you do not add an tf_prefix they add it automatically.

Yeah I know it is kind of a luxury problem but, I am just curious.

I also know that there is the possibility to include this by a separate launchfile and add an argument for that.

<!--ROBOT A-->
<group ns="robotA" clear_params="true">
<param name="robot_description" command=
"$(find xacro)/xacro.py$(find h4r_rapid_robot_xacros)/defs/test_robots/diff_drive_bot.xacro" />

<node pkg="robot_state_publisher"
type="state_publisher" name="robot_state_publisher">
<param name="tf_prefix" value="robotA"/><!-- Is needed, for adding the namespace to other links -->
<param name="publish_frequency" type="double" value="30.0"/>
</node>

<node name="spawn_test_bot" pkg="gazebo_ros" type="spawn_model"
args="-z 0.2 -x 0 -urdf -param robot_description -model robot_description"
respawn="false" />
</group>


Code is here

Regards,

Christian

### robot state publisher namespace ""problem"" - namespace Is there a environmental variable for current namespace in grouplaunchfiles?

Hi,

I have created an multirobot launch for Gazebo. Now I found out that there is a solvable problem with the namespace in the robot state publisher. I solved it with adding a tf_prefix. But now here is what I am interested in.

Is it possible to get the current namespace into the

 <param name="tf_prefix" value="robotA"/>


instead of writing the namespace name? Is there an environment variable that I could for example write something like this to get the "current namespace" for a parameter?:

 <param name="tf_prefix" value="$(optenv ns)"/> <!-- CAUTION: THIS IS NOT A WORKING SOLUTION -->  Unfortunately robot state publisher does not care about the namespace like for example the gazebo plugins do, if you do not add an tf_prefix they add it automatically. Yeah I know it is kind of a luxury problem but, I am just curious. I also know that there is the possibility to include this by a separate launchfile and add an argument for that. <!--ROBOT A--> <group ns="robotA" clear_params="true"> <param name="robot_description" command= "$(find xacro)/xacro.py $(find h4r_rapid_robot_xacros)/defs/test_robots/diff_drive_bot.xacro" /> <node pkg="robot_state_publisher" type="state_publisher" name="robot_state_publisher"> <param name="tf_prefix" value="robotA"/><!-- Is needed, for adding the namespace to other links --> <param name="publish_frequency" type="double" value="30.0"/> </node> <node name="spawn_test_bot" pkg="gazebo_ros" type="spawn_model" args="-z 0.2 -x 0 -urdf -param robot_description -model robot_description" respawn="false" /> </group>  Code is here Regards, Christian ### Is there a environmental variable for current namespace in launchfiles? Hi, I have created an multirobot launch for Gazebo. Now I found out that there is a solvable problem with the namespace in the robot state publisher. I solved it with adding a tf_prefix. But now here is what I am interested in. Is it possible to get the current namespace into the  <param name="tf_prefix" value="robotA"/>  instead of writing the namespace name? Is there an environment variable that I could for example write something like this to get the "current namespace" for a parameter?:  <param name="tf_prefix" value="$(optenv ns)"/> <!--  CAUTION: THIS IS NOT A WORKING SOLUTION  -->


Unfortunately robot state publisher does not care about the namespace like for example the gazebo plugins do, if you do not add an tf_prefix they add it automatically.

I also know that there is the possibility to include this by a separate launchfile and add an argument for that.

<!--ROBOT A-->
<group ns="robotA" clear_params="true">
<param name="robot_description" command=
"$(find xacro)/xacro.py$(find h4r_rapid_robot_xacros)/defs/test_robots/diff_drive_bot.xacro" />

<node pkg="robot_state_publisher"
type="state_publisher" name="robot_state_publisher">
<param name="tf_prefix" value="robotA"/><!-- Is needed, for adding the namespace to other links -->
<param name="publish_frequency" type="double" value="30.0"/>
</node>

<node name="spawn_test_bot" pkg="gazebo_ros" type="spawn_model"
args="-z 0.2 -x 0 -urdf -param robot_description -model robot_description"
respawn="false" />
</group>


Code is here

Or can I make this code (robot_state_publisher)

  std::string tf_prefix_key;
n_tilde.searchParam("tf_prefix", tf_prefix_key);
n_tilde.param(tf_prefix_key, tf_prefix_, std::string(""));


return the current namespace into tf_prefix_ somehow?

Regards,

Christian

### Is there a environmental variable for current namespace in launchfiles?

Hi,

I have created an multirobot launch for Gazebo. Now I found out that there is a solvable problem with the namespace in the robot state publisher. I solved it with adding a tf_prefix. But now here is what I am interested in.

Is it possible to get the current namespace into the

 <param name="tf_prefix" value="robotA"/>


instead of writing the namespace name? Is there an environment variable that I could for example write something like this to get the "current namespace" for a parameter?:

 <param name="tf_prefix" value="$(optenv ns)"/> <!-- CAUTION: THIS IS NOT A WORKING SOLUTION -->  Unfortunately robot state publisher does not care about the namespace like for example the gazebo plugins do, if you do not add an tf_prefix they add it automatically. I also know that there is the possibility to include this by a separate launchfile and add an argument for that. <!--ROBOT A--> <group ns="robotA" clear_params="true"> <param name="robot_description" command= "$(find xacro)/xacro.py \$(find h4r_rapid_robot_xacros)/defs/test_robots/diff_drive_bot.xacro" />

<node pkg="robot_state_publisher"
type="state_publisher" name="robot_state_publisher">
<param name="tf_prefix" value="robotA"/><!-- Is needed, for adding the namespace to other links -->
<param name="publish_frequency" type="double" value="30.0"/>
</node>

<node name="spawn_test_bot" pkg="gazebo_ros" type="spawn_model"
args="-z 0.2 -x 0 -urdf -param robot_description -model robot_description"
respawn="false" />
</group>


Code is here

Or can I make this code (robot_state_publisher)

  std::string tf_prefix_key;
n_tilde.searchParam("tf_prefix", tf_prefix_key);
n_tilde.param(tf_prefix_key, tf_prefix_, std::string(""));


return the current namespace into tf_prefix_ somehow?

UPDATE: I added a pull request for the robot state publisher to be able to use the current namespace as prefix, as long as there is not another approach: https://github.com/ros/robot_state_publisher/pull/30

Regards,

Christian