参考文献
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