Тема ROS Remap не работает - несколько роботов - PullRequest
0 голосов
/ 23 марта 2019

На основе учебного пособия здесь я пытался создать свои запуски для запуска нескольких роботов в беседке.У каждого робота есть узел [называемый стопором], который заботится о его перемещении.Я хочу, чтобы каждый робот перемещался отдельно, поэтому я буду публиковать в теме {robot_name} / cmd_vel_mux / input / teleop.

при запуске «rostopic info / cmd_vel_mux / input / teleop» я заметил, что у меня есть только mobile_base_nodelet_managerкак подписчик, без издателя (издатель существует в теме {robot_name} / cmd_vel_mux / input / teleop. Поэтому я использовал перенаправление, но оно все еще не работает, и появляется та же проблема.

one_robot.lanuch

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

   <arg name="robot_name"/>
   <arg name="init_pose"/>

   <node name="spawn_minibot_model" pkg="gazebo_ros" type="spawn_model"
     args="$(arg init_pose) -urdf -param /robot_description -model $(arg robot_name)"
    respawn="false" output="screen" />

    <!-- Launch stopper node -->
    <node name="stopper" pkg="stopper" type="stopper" output="screen" args="$(arg robot_name)">
     <remap from="scan" to="$(arg robot_name)/scan"/>
     <remap from="cmd_vel_mux/input/teleop" to="$(arg robot_name)/cmd_vel_mux/input/teleop"/>

    </node>
</launch>

robots.launch

 <?xml version="1.0"?>
<launch>
  <!-- No namespace here as we will share this description. 
         Access with slash at the beginning -->
  <param name="robot_description"
          command="$(find xacro)/xacro.py $(find turtlebot_description)/robots/kobuki_hexagons_asus_xtion_pro.urdf.xacro"/>

 <!-- BEGIN ROBOT 1-->
 <group ns="robot1">
    <param name="tf_prefix" value="robot1_tf" />
    <include file="$(find stopper)/launch/one_robot.launch" >
      <arg name="init_pose" value="-x 1 -y 1 -z 0" />
      <arg name="robot_name"  value="Robot1" />
    </include>
 </group>

 <!-- BEGIN ROBOT 2-->
 <group ns="robot2">
    <param name="tf_prefix" value="robot2_tf" />
   <include file="$(find stopper)/launch/one_robot.launch" >
     <arg name="init_pose" value="-x -1 -y 1 -z 0" />
     <arg name="robot_name"  value="Robot2" />
   </include>
 </group>
</launch>

multiple_robots.launch

   <?xml version="1.0"?>
   <launch>
      <param name="/use_sim_time" value="true" />

      <!-- include our robots -->
      <include file="$(find stopper)/launch/robots.launch"/>

      <!-- start world -->
      <include file="$(find turtlebot_gazebo)/launch/turtlebot_world.launch"/>       
   </launch>
  • Как это выглядит, я попытался переназначить в one_robot.launch, но он все еще не работал, как я уже упоминал ранее. Я замечаю, что переназначение работает, только если я делаю это в multiple_robots.launch, но это на самом деле невозможноя, потому что там мы не знаем имен роботов, но только в one_robot.launch.

Я хотел бы получить вашу помощь, чтобы решить эту проблему, я потратил много времени на это.Большое спасибо!

Ответы [ 2 ]

0 голосов
/ 31 марта 2019

Когда вы говорите это, это заставляет меня думать, что remap работает:

при запуске "rostopic info / cmd_vel_mux / input / teleop" Я заметил, что у меня есть только mobile_base_nodelet_manager в качестве подписчика, без издателя(издатель существует в теме {robot_name} / cmd_vel_mux / input / teleop.

Старая тема /cmd_vel_mux/input/teleop больше не имеет издателя, что было бы верно, если бы переназначение работало. И вы говорите,издатель существует для переназначенной темы, {robot_name}/cmd_vel_mux/input/teleop, что означает, что переназначение работает.

Вы говорите, что mobile_base_nodelet_manager подписывается на старую тему, но она должна подписываться на новую тему. Remap неизмените тему как для издателей, так и для подписчиков. Remap не является глобальным.

Я бы удостоверился, что узлы, которые подписывались на старую тему, теперь подписываются на новую тему.переназначить подписчиков тоже, чтобы они знали, что такое новая тема и что они могут подписаться на нее.

Документы ROS описывают переназначение на узле подписчика: Пересмотреть документы

0 голосов
/ 27 марта 2019

- это опция для данного узла. Таким образом, я считаю, что его нужно добавить под тегом узла. Так что это должно быть в блоке <node> ... </node>.

Кроме того, то, что вы пытаетесь сделать, может быть достигнуто путем запуска ваших телеобъектов в соответствующем пространстве имен, либо используя <group ns="XXX"> в файле запуска или в терминале, выполнив export ROS_NAMESPACE=XXX перед запуском телеоперационного узла.

...