Error spawning many urdf's in Gazebo
Hi, I observe strange behavior in Gazebo when I'm trying to spawn many objects.
I created this xacro file for the object:
<?xml version="1.0"?>
<robot xmlns:xacro="http://www.ros.org/wiki/xacro" name="box_obstacle">
<xacro:arg name="row" default="0"/>
<xacro:arg name="col" default="0"/>
<xacro:arg name="width" default="1"/>
<xacro:arg name="height" default="1"/>
<link name="obstacle" type="fixed">
<inertial>
<origin xyz="$(arg row) $(arg col) 0.5" />
<mass value="1.0" />
<inertia ixx="0.0" ixy="0.0" ixz="0.0" iyy="0.0" iyz="0.0" izz="0.0" />
</inertial>
<visual>
<origin xyz="$(arg row) $(arg col) 0.5"/>
<geometry>
<box size="$(arg width) $(arg height) 1" />
</geometry>
</visual>
<collision>
<origin xyz="$(arg row) $(arg col) 0.5"/>
<geometry>
<box size="$(arg width) $(arg height) 1" />
</geometry>
</collision>
</link>
<gazebo reference="obstacle">
<static>true</static>
<material>Gazebo/Black</material>
</gazebo>
</robot>
and my launch file looks like this:
<launch>
<arg name="world" default="$(find my_package)/worlds/empty.world"/>
<!-- 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="$(arg world)"/>
</include>
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=6.5 col:=4.0 width:=3 height:=6" name="obstacle_0" />
<node args="-urdf -param obstacle_0 -model obstacle_0" name="spawn_obstacle_0" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=4.5 col:=4.0 width:=1 height:=2" name="obstacle_1" />
<node args="-urdf -param obstacle_1 -model obstacle_1" name="spawn_obstacle_1" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=-4.5 col:=-9.0 width:=9 height:=2" name="obstacle_2" />
<node args="-urdf -param obstacle_2 -model obstacle_2" name="spawn_obstacle_2" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
</launch>
This works fine with few "obstacles", but when I try about 10 (instead of 3 here) the simulator doing unexpected things (I'm trying to attach images but >5 points are needed :(, the linkes below will be valid only for 1 week).
<launch>
<arg name="world" default="$(find my_package)/worlds/empty.world"/>
<!-- 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="$(arg world)"/>
</include>
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=6.5 col:=4.0 width:=3 height:=6" name="obstacle_0" />
<node args="-urdf -param obstacle_0 -model obstacle_0" name="spawn_obstacle_0" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=4.5 col:=4.0 width:=1 height:=2" name="obstacle_1" />
<node args="-urdf -param obstacle_1 -model obstacle_1" name="spawn_obstacle_1" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=-4.5 col:=-9.0 width:=9 height:=2" name="obstacle_2" />
<node args="-urdf -param obstacle_2 -model obstacle_2" name="spawn_obstacle_2" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=-5.0 col:=-7.5 width:=2 height:=1" name="obstacle_3" />
<node args="-urdf -param obstacle_3 -model obstacle_3" name="spawn_obstacle_3" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=-2.0 col:=-1.5 width:=16 height:=1" name="obstacle_4" />
<node args="-urdf -param obstacle_4 -model obstacle_4" name="spawn_obstacle_4" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=-6.0 col:=-0.5 width:=4 height:=1" name="obstacle_5" />
<node args="-urdf -param obstacle_5 -model obstacle_5" name="spawn_obstacle_5" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=-0.5 col:=0.5 width:=19 height:=1" name="obstacle_6" />
<node args="-urdf -param obstacle_6 -model obstacle_6" name="spawn_obstacle_6" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=-2.5 col:=1.5 width:=1 height:=1" name="obstacle_7" />
<node args="-urdf -param obstacle_7 -model obstacle_7" name="spawn_obstacle_7" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=-0.5 col:=-5.0 width:=5 height:=4" name="obstacle_8" />
<node args="-urdf -param obstacle_8 -model obstacle_8" name="spawn_obstacle_8" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
<param command="$(find xacro)/xacro.py $(find my_package)/objects/obstacle.urdf.xacro row:=0.0 col:=8.5 width:=20 height:=1" name="obstacle_9" />
<node args="-urdf -param obstacle_9 -model obstacle_9" name="spawn_obstacle_9" output="screen" pkg="gazebo_ros" respawn="false" type="spawn_model" />
</launch>
Is there a way to fix this? How can I tell the pyhsics engine to ignore these obstacles. They should be static and fixed to the ground.
Screen snapshots:
10 objects: http://uploadpie.com/7egqg http://uploadpie.com/hlGOO http://uploadpie.com/Xrlak
3 objects: http://uploadpie.com/Za3Bb http://uploadpie.com/FmSjl http://uploadpie.com/QlgJO
Thanks a lot
Asked by sefi_roee on 2016-04-16 12:34:23 UTC
Answers
There is a static tag for models : http://sdformat.org/spec?ver=1.6&elem=model
You can try to add the following lines to your urdf file (inside the robot tags) :
Update :
<gazebo>
<static>true</static>
</gazebo>
<gazebo reference="obstacle">
<material>Gazebo/Black</material>
</gazebo>
Asked by F.Brosseau on 2016-04-18 02:08:30 UTC
Comments
Thanks. As you can see, I already have similar line in my .xacro file
<gazebo reference="obstacle">
<static>true</static>
<material>Gazebo/Black</material>
</gazebo>
Do you think there is a difference between "1" and "true"?
Asked by sefi_roee on 2016-04-18 02:26:40 UTC
Sorry I didn't saw these lines. Can you check in Gazebo GUI that your models are really static ?
Asked by F.Brosseau on 2016-04-18 02:51:08 UTC
NP. In the Gazebo GUI i can see that the "static" attribute of the model is checked, but the models are still being affected by the physics. (For example, when i put two model on top of each other, I can see the gravity and other forces moving both the models).
Asked by sefi_roee on 2016-04-18 03:10:44 UTC
I use also gazebo with static = true and I have no problem. I also had
Asked by F.Brosseau on 2016-04-18 04:47:46 UTC
Hi, Tnx. I tried gravity=0, objects now flying around :( Did you see the pics i attached? Is this happening to you too?
Asked by sefi_roee on 2016-04-19 22:05:27 UTC
I saw the pics but I didn't had this problem. Maybe you can try to add a fixed joint between your flying objects and the world. Maybe you can have more help on this forum : http://answers.gazebosim.org/questions/
Asked by F.Brosseau on 2016-04-20 01:51:37 UTC
Could you please give me pic of the objects in your environment? Tnx a lot
Asked by sefi_roee on 2016-04-20 02:15:55 UTC
I used your code and I saw obstacle 4,6 and 9 "shaking". In your obstacle.urdf.xacro file, I changed <gazebo reference="obstacle">
to <gazebo>
and there is no problem anymore
Answer updated
Asked by F.Brosseau on 2016-04-22 03:34:39 UTC
Bless you my friend. Finally it's working :)
Asked by sefi_roee on 2016-04-22 04:08:32 UTC
Comments