gazebo中导入DAE文件

  1. 准备DAE文件,我是在网上找到了一个dae文件进行测试,也可以用3DMAX导出DAE文件。
    gazebo中导入DAE文件_第1张图片
  2. 在DAE所在文件目录下创建hokuyo.world文件
<?xml version="1.0"?>
<sdf version="1.0">
	<world name="default">
		<include>
			<uri>model://sun</uri>
		</include>
		<include>
			<uri>model://ground_plane</uri>
		</include>
		<model name="hokuyo">
			<pose>0 0 0.49 0 1.57079 0</pose>
			<static>true</static>
			<link name="up">
				<visual name="visual">
					<geometry>
						<mesh><uri>file://hokuyo.dae</uri></mesh>
					</geometry>
				</visual>
			</link>
		</model>
	</world>
</sdf>
  1. 进入文件所在目录,在gazebo中打开launch文件即可打开dae文件
gazebo hokuyo.world

gazebo中导入DAE文件_第2张图片
4.上面只是用gazebo打开了dae文件,但是我们要做的是连接ROS实现传感器仿真,因此需要使用roslaunch打开dae模型。
1)在功能包目录下创建urdf文件,然后新建文件simulation_dae.urdg:

<?xml version="1.0"?>

<robot xmlns:xacro="http://www.ros.org/wiki/xacro" 
 	xmlns:sensor="http://playerstage.sourceforge.net/gazebo/xmlschema/#sensor"
    	xmlns:controller="http://playerstage.sourceforge.net/gazebo/xmlschema/#controller"
    	xmlns:interface="http://playerstage.sourceforge.net/gazebo/xmlschema/#interface"
	name="hokuyo">


  <!-- Hokuyo Laser -->
  <link name="hokuyo_link">
    <collision>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
	<box size="0.1 0.1 0.1"/>
      </geometry>
    </collision>

    <visual>
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <geometry>
        <mesh filename="package://robot1_description/meshes/simulation.dae"/>
      </geometry>
    </visual>

    <inertial>
      <mass value="1e-5" />
      <origin xyz="0 0 0" rpy="0 0 0"/>
      <inertia ixx="1e-6" ixy="0" ixz="0" iyy="1e-6" iyz="0" izz="1e-6" />
    </inertial>
  </link>

</robot>

注:a. simulation.dae文件为我用3dmax建模导出的dae文件
b. dae文件需放在“/robot1_description/meshes/”(网上下载的chapter7_tutorials文件夹下),下载路径可以查看我的另外一篇文章,在网上看到说需要把dae文件加载到gazebo相应路径下,否则gazebo找不到dae文件路径,但是没搞明白,就暂时先放在这里吧。

2)在功能包目录下创建launch文件夹,然后新建文件simulation.launch:

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

  <!-- 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="false"/>
  <arg name="gui" default="true"/>
  <arg name="headless" default="false"/>
  <arg name="debug" default="true"/>

  <!-- 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="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 -->
  <arg name="model" />
  <param name="changjing_description"  command="$(find xacro)/xacro.py '$(find velodyne_gazebo)/urdf/simulation_dae.urdf'" />
<node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
		args="-urdf -model robot1 -param changjing_description -z 0.05"/> 

</launch>

注:spawn_model打开dae文件
3)使用roslaunch命令在gazebo中打开dae模型:

roslaunch oackage_name simulation.launch

此时就可以在gazebo中看到自己建的3d模型了,但是文件不要太大,可能会导致gazebo卡死闪退。
5. 有时候我们需要加载多个dae文件,比如一个场景模型,一个机器人模型,则需要重新建立一个launch文件将需要加载的多个dae文件对应的launch文件加载进来:

<?xml version="1.0"?>

<launch>

	<include file="$(find velodyne_gazebo)/launch/simulation.launch">	
	</include>
 
  <!-- Load the URDF into the ROS Parameter Server -->
  <group ns="robot">
     <arg name="model" />
    <param name="robot_description" command="$(find xacro)/xacro.py '$(find velodyne_gazebo)/urdf/robot.urdf' ns:=robot" />
  
    <node name="robot_state_publisher" pkg="robot_state_publisher" type="state_publisher"/>

     <!-- Run a python script to the send a service call to gazebo_ros to spawn a URDF robot -->
     <node name="urdf_spawner" pkg="gazebo_ros" type="spawn_model" respawn="false" output="screen"
	args="-urdf -model robot2 -param robot_description -z 0.05"/> 
  </group>
</launch>

使用加载环境模型,然后建立分组加载机器人,因为我的环境和机器人都是dae文件,均需要“urdf_spawner”这个节点打开,为了避免节点覆盖,所以建组加载,启动该launch文件可同时看到环境和机器人模型,如果发生节点覆盖,则只能加载一个模型。

你可能感兴趣的:(ROS)