gazebo 如何添加两个机器人

参考文献

gazebo有关这方面的官方教程地址
http://gazebosim.org/tutorials?tut=ros_roslaunch&cat=connect_ros#URDFExamplewithBaxter

关键内容

我总结一下,就是通过一个小的python脚本
gazebo_ros包中的 spawn_model 其中里面有各种参数

 <param name="robot_description1" command="$(find xacro)/xacro '$(find my_ball)/urdf/turtlebot3_burger.urdf.xacro'" />
 
  <node pkg="gazebo_ros" type="spawn_model" name="urdf_spawner1" respawn="false" output="screen"
        args="-urdf -model turtlebot3_burger -z 0.285 -x 2.0 -y 2.0 -param robot_description1"/>

参数解释 (重要)

robot_description1 可以看作一个参数,command里的值是这个robot_description1的值。

第二句调用gazebo_ros包里的spawn_model脚本,这个脚本以一个ros节点运行,因为要运行2个节点,节点的名字不能一样,所以用name=“urdf_spawner1"为节点重命名。
重要的是 args=”-urdf -model turtlebot3_burger -z 0.285 -x 2.0 -y 2.0 -param robot_description1"

这个args是向gazebo_ros包里的spawn_model脚本发送参数的
-urdf表示加载的是urdf文件。
-model表示为模型的命名 ,后面接一个参数表示模型的名字
-x -y -z表是模型的位置
-param表示urdf文件 文件是robot_description1里的值

我的代码与结果

下面是我的launch文件与图片

<?xml version="1.0" ?>
<launch>
  <arg name="position_controller" default="true"/>

  <!-- these are the arguments you can pass this launch file, for example paused:=true -->
  <arg name="paused" default="true"/>
  <arg name="use_sim_time" default="true"/>
  <arg name="gui" default="true"/>
  <arg name="headless" default="false"/>
  <arg name="debug" default="false"/>
  
  <!-- We resume the logic in empty_world.launch, changing only the name of the world to be launched -->
  <include file="$(find gazebo_ros)/launch/empty_world.launch">
    <arg name="world_name" value="$(find my_ball)/worlds/robot_ground.world"/>
    <arg name="debug" value="$(arg debug)" />
    <arg name="gui" value="$(arg gui)" />
    <arg name="paused" value="$(arg paused)"/>
    <arg name="use_sim_time" value="$(arg use_sim_time)"/>
    <arg name="headless" value="$(arg headless)"/>
  </include>

  <!-- Load the URDF into the ROS Parameter Server -->
  <param name="robot_description" command="$(find xacro)/xacro '$(find op3_description)/urdf/robotis_op3.urdf.xacro'" />


  <param name="robot_description1" command="$(find xacro)/xacro '$(find my_ball)/urdf/turtlebot3_burger.urdf.xacro'" />

  <!--  $(find xacro)/xacro.py                      .py is deprecated -->



  <!-- Run a python script to the send a service call to gazebo_ros to spawn a URDF robot -->
  <node pkg="gazebo_ros" type="spawn_model" name="urdf_spawner" respawn="false" output="screen"
        args="-urdf -model robotis_op3 -z 0.285 -x 1.0 -y 2.0  -param robot_description"/>

        <node pkg="gazebo_ros" type="spawn_model" name="urdf_spawner1" respawn="false" output="screen"
        args="-urdf -model turtlebot3_burger -z 0.285 -x 2.0 -y 2.0 -param robot_description1"/>

  <!-- ros_control robotis humanoid launch file -->
  <group if ="$(arg position_controller)">
    <include file="$(find op3_gazebo)/launch/position_controller.launch" />
  </group>
</launch>

在这里插入图片描述

方法总结

ROS服务调用生成方法

第一种方法可以使您的机器人的ROS软件包在计算机和存储库检出之间更加便携。它可以让您保持机器人相对于ROS包路径的位置,而且还要求您使用小的(python)脚本进行ROS服务调用。

1通过不同命名空间来调用两个这个脚步
2通过不同组(lanch文件的组)来调用
3就是我用的,同过不同参数,并且为这个节点改名字

模型数据库方法

第二种方法允许您将机器人包括在文件中,这看起来更干净,更方便,但需要您通过设置环境变量将机器人添加到Gazebo模型数据库中。.world


版权声明:本文为qq_44365861原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。