This repository contains an old version of the virtual_maize_field
package. For the maintained package, see FieldRobotEvent/virtual_maize_field.
This is a package to procedurally generate randomized fields with rows of plants for Gazebo.
This package has been tested on ROS melodic
and ROS noetic
.
Additional you'll need the following packages:
# melodic
rosdep install virtual_maize_field
sudo apt install python3-pip
sudo pip3 install -U jinja2 rospkg opencv-python matplotlib shapely
# noetic
rosdep install virtual_maize_field
This package includes a script (scripts/generate_world.py
) that can generate randomized agricultural worlds. All parameters are optional and have default values. You can call the script using
rosrun virtual_maize_field generate_world.py
The resulting file will be placed in worlds/generated.world
.
usage: generate_world.py [-h] [--row_length ROW_LENGTH] [--rows_curve_budget ROWS_CURVE_BUDGET] [--row_width ROW_WIDTH] [--rows_left ROWS_LEFT] [--rows_right ROWS_RIGHT] [--row_segments ROW_SEGMENTS]
[--row_segment_straight_length_min ROW_SEGMENT_STRAIGHT_LENGTH_MIN] [--row_segment_straight_length_max ROW_SEGMENT_STRAIGHT_LENGTH_MAX]
[--row_segment_curved_radius_min ROW_SEGMENT_CURVED_RADIUS_MIN] [--row_segment_curved_radius_max ROW_SEGMENT_CURVED_RADIUS_MAX]
[--row_segment_curved_arc_measure_min ROW_SEGMENT_CURVED_ARC_MEASURE_MIN] [--row_segment_curved_arc_measure_max ROW_SEGMENT_CURVED_ARC_MEASURE_MAX]
[--row_segment_island_radius_min ROW_SEGMENT_ISLAND_RADIUS_MIN] [--row_segment_island_radius_max ROW_SEGMENT_ISLAND_RADIUS_MAX] [--ground_resolution GROUND_RESOLUTION]
[--ground_elevation_max GROUND_ELEVATION_MAX] [--ground_headland GROUND_HEADLAND] [--ground_ditch_depth GROUND_DITCH_DEPTH] [--plant_spacing_min PLANT_SPACING_MIN]
[--plant_spacing_max PLANT_SPACING_MAX] [--plant_height_min PLANT_HEIGHT_MIN] [--plant_height_max PLANT_HEIGHT_MAX] [--plant_radius PLANT_RADIUS]
[--plant_radius_noise PLANT_RADIUS_NOISE] [--plant_placement_error_max PLANT_PLACEMENT_ERROR_MAX] [--plant_mass PLANT_MASS] [--hole_prob HOLE_PROB] [--hole_size_max HOLE_SIZE_MAX]
[--crop_types CROP_TYPES] [--litters LITTERS] [--litter_types LITTER_TYPES] [--weeds WEEDS] [--weed_types WEED_TYPES] [--ghost_objects GHOST_OBJECTS] [--location_markers LOCATION_MARKERS] [--load_from_file LOAD_FROM_FILE]
[--seed SEED]
Generate a virtual maize field world for gazebo
optional arguments:
-h, --help show this help message and exit
--row_length ROW_LENGTH
default_value: 12.0
--rows_curve_budget ROWS_CURVE_BUDGET
default_value: 1.5707963267948966
--row_width ROW_WIDTH
default_value: 0.75
--rows_left ROWS_LEFT
default_value: 2
--rows_right ROWS_RIGHT
default_value: 2
--row_segments ROW_SEGMENTS
default_value: straight,curved
--row_segment_straight_length_min ROW_SEGMENT_STRAIGHT_LENGTH_MIN
default_value: 1
--row_segment_straight_length_max ROW_SEGMENT_STRAIGHT_LENGTH_MAX
default_value: 2.5
--row_segment_curved_radius_min ROW_SEGMENT_CURVED_RADIUS_MIN
default_value: 3.0
--row_segment_curved_radius_max ROW_SEGMENT_CURVED_RADIUS_MAX
default_value: 10.0
--row_segment_curved_arc_measure_min ROW_SEGMENT_CURVED_ARC_MEASURE_MIN
default_value: 0.3
--row_segment_curved_arc_measure_max ROW_SEGMENT_CURVED_ARC_MEASURE_MAX
default_value: 1.0
--row_segment_island_radius_min ROW_SEGMENT_ISLAND_RADIUS_MIN
default_value: 1.0
--row_segment_island_radius_max ROW_SEGMENT_ISLAND_RADIUS_MAX
default_value: 3.0
--ground_resolution GROUND_RESOLUTION
default_value: 0.02
--ground_elevation_max GROUND_ELEVATION_MAX
default_value: 0.2
--ground_headland GROUND_HEADLAND
default_value: 2.0
--ground_ditch_depth GROUND_DITCH_DEPTH
default_value: 0.3
--plant_spacing_min PLANT_SPACING_MIN
default_value: 0.13
--plant_spacing_max PLANT_SPACING_MAX
default_value: 0.19
--plant_height_min PLANT_HEIGHT_MIN
default_value: 0.3
--plant_height_max PLANT_HEIGHT_MAX
default_value: 0.6
--plant_radius PLANT_RADIUS
default_value: 0.3
--plant_radius_noise PLANT_RADIUS_NOISE
default_value: 0.05
--plant_placement_error_max PLANT_PLACEMENT_ERROR_MAX
default_value: 0.02
--plant_mass PLANT_MASS
default_value: 0.3
--hole_prob HOLE_PROB
default_value: 0.0
--hole_size_max HOLE_SIZE_MAX
default_value: 7
--crop_types CROP_TYPES
default_value: maize_01,maize_02
--litters LITTERS default_value: 0
--litter_types LITTER_TYPES
default_value: ale,beer,coke_can,retro_pepsi_can
--weeds WEEDS default_value: 0
--weed_types WEED_TYPES
default_value: nettle,unknown_weed
--ghost_objects GHOST_OBJECTS
default_value: False
--location_markers LOCATION_MARKERS
default_value: False
--load_from_file LOAD_FROM_FILE
default_value: None
--seed SEED default_value: -1
In the script folder, bash files to generate sample worlds are located. The parameters are chosen to match the task description from https://www.fieldrobot.com/event/index.php/contest/
Name | Parameters | Description |
---|---|---|
create_task_1.sh | --row_length 10 --rows_left 0 --rows_right 11 --rows_curve_budget 0.78539816339 --row_segments straight,curved --row_segment_curved_radius_min 4.0 --row_segment_curved_radius_max 5.0 |
Task 1, curved rows without holes |
create_task_1_mini.sh | --row_length 5 --rows_left 0 --rows_right 5 --rows_curve_budget 0.78539816339 --row_segments straight,curved --row_segment_curved_radius_min 4.0 --row_segment_curved_radius_max 5.0 |
A smaller version of task 1, requiring less computer power |
create_task_2.sh | --row_length 7 --rows_left 0 --rows_right 11 --row_segments straight --hole_prob 0.04 --hole_size_max 7 |
Task 2, straight rows with holes |
create_task_2_mini.sh | --row_length 3.5 --rows_left 0 --rows_right 7 --row_segments straight --hole_prob 0.04 --hole_size_max 7 |
A smaller version of task 2, requiring less computer power |
create_task_3.sh | --row_length 7 --rows_left 0 --rows_right 11 --row_segments straight --hole_prob 0.04 --hole_size_max 7 --litters 5 --weeds 5 --ghost_objects true --location_markers true |
Task 3, similar crop rows as in task_2 but with cans, bottles and weeds spread throughout the field. The cans, bottles and weeds have no collision box and are static. |
create_task_3_mini.sh | --row_length 3.5 --rows_left 0 --rows_right 7 --row_segments straight --hole_prob 0.04 --hole_size_max 7 --litters 5 --weeds 5 --ghost_objects true --location_markers true |
A smaller version of task 3, requiring less computer power |
create_task_4.sh | --row_length 7 --rows_left 0 --rows_right 11 --row_segments straight --hole_prob 0.04 --hole_size_max 7 --litters 5 --weeds 5 --location_markers true |
Task 4, similar crop rows as in task_2 but with cans, bottles and weeds spread throughout the field. The cans, bottles and weeds have a collision box and can be picked up. |
create_task_4_mini.sh | --row_length 3.5 --rows_left 0 --rows_right 7 --row_segments straight --hole_prob 0.04 --hole_size_max 7 --litters 5 --weeds 5 --location_markers true |
A smaller version of task 4, requiring less computer power |
The launch file to launch the worlds is called simulation.launch
. You can launch the launch file by running roslaunch virtual_maize_field jackal_simulation.launch
. By default the launch file will launch generated_world.world
. You can launch any world by using the world_name
arg. e.g. roslaunch virtual_maize_field jackal_simulation.launch world_name:=simple_row_level_1.world
.
Virtual Maize Field is copyright (C) 2021 Farm Technology Group of Wageningen University & Research and Kamaro Engineering e.V. and licensed under .
Name | Path | Copyright | License |
---|---|---|---|
Maize 01 | models/maize_01/ |
2021 Kamaro Engineering e.V. | |
Maize 02 | models/maize_02/ |
2021 Kamaro Engineering e.V. | |
Stone 01 | models/stone_01/ |
2020 Andrea Spognetta | |
Stone 02 | models/stone_02/ |
2014 Sascha Henrichs | |
Ale | models/ale/ |
2017 elouisetrewartha | |
Beer | models/beer/ |
? Maurice Fallon | ? |
Coke Can | models/coke_can/ |
? John Hsu | ? |
Nettle | models/nettle/ |
2019 LadyIReyna | |
Retro Pepsi Can | models/retro_pepsi_can/ |
2018 FWTeastwood | |
Unknown Weed | models/unknown_weed/ |
2016 aaron_nerlich |
Name | Path | Copyright | License |
---|---|---|---|
grass | Media/models/materials/textures/ |
2018 CC0Textures.com |