- 准备DAE文件,我是在网上找到了一个dae文件进行测试,也可以用3DMAX导出DAE文件。
- 在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>
- 进入文件所在目录,在gazebo中打开launch文件即可打开dae文件
gazebo hokuyo.world
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文件可同时看到环境和机器人模型,如果发生节点覆盖,则只能加载一个模型。