0
$\begingroup$

Rosanswers logo

I'm trying to generate random boxes in a world file for Gazebo simulator. I know how to create a model sdf, and how to include it from the world file.

Now I want to create different sizes of boxes in the world file using xacro and width/height parameters.

I can't get it work. Please help :)


Originally posted by sefi_roee on ROS Answers with karma: 11 on 2016-04-03

Post score: 0


Original comments

Comment by dyupleks on 2016-04-04:
Do you want to place models randomly? Or Do you want to place models with different sizes in world? What should be randomly size, position or both?

Comment by sefi_roee on 2016-04-04:
Hi, tnx for responding. Right now, my world file using multiple times tag to include my object model (in the model the size is fixed to 1x1 and the position isn't determined) and adds tag for each. I'd like to be able to pass the "size" as a parameter to the included object.

$\endgroup$

2 Answers 2

0
$\begingroup$

Rosanswers logo

I think it would be right in your case to use tag. Pls, look at this tutorial . There exist random distribution of positions. Also, you can fix a size, but the size will be common size of N models, which you point in <model_count> tag.

"I'd like to be able to pass the "size" as a parameter to the included object" ---- In case, you want to put models with different size, I guess tag will be not appropriate for that ..


Originally posted by dyupleks with karma: 200 on 2016-04-04

This answer was ACCEPTED on the original site

Post score: 0


Original comments

Comment by sefi_roee on 2016-04-04:
Thanks for that. What if i have a different situation: I have a list of predetermined "size"s and "pose"s, and I want to generate world file includes them. I want the file to be as clean as possible, so I want to use single model file and include it many times and only specify size/pose for each?

Comment by dyupleks on 2016-04-04:
tag is not for this case.. Maybe, you are on right way to use multiple times .. I cant be sure, because I dont know another solution.. Sorry :)

Comment by sefi_roee on 2016-04-04:
Ty. and is there a way to pass the "size" and "pose" as parameters in the include tag?

Comment by dyupleks on 2016-04-04:
You can use tag inside of . I never note the tag in . Look at this SDF specification . You can find all documentation about a tag and be sure what to use inside one..

Comment by dyupleks on 2016-04-04:
The question "How to fix size of a model" is not answered for me too. Before, I changed it by SketchUp Make, but there must be a way to fix size in Gazebo too..

Comment by sefi_roee on 2016-04-04:
I hope there is a way to do it using xacro :)

$\endgroup$
0
$\begingroup$

Rosanswers logo

Hi, With the help I got, I was able to do the following:

I create the 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 weired things (I'm trying to attach images but >5 points are needed :()

 <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.

Thanks a lot


Originally posted by sefi_roee with karma: 11 on 2016-04-15

This answer was NOT ACCEPTED on the original site

Post score: 1


Original comments

Comment by dyupleks on 2016-04-16:
I suggest you to write new question, because the title differ from the content

Comment by sefi_roee on 2016-04-16:
Good point. Thanks

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.