Simulation worlds, maps, CAD models, and game behavior nodes for the VEX Push Back field + a few test envionments. See the repository Autonomous-VEXU/otto_gazebo for robot simulation assets.
Note: If you want to prevent infinite rolling, refer to this section
In order to launch a world, the workspace must first be built and sourced. Make sure you are in the correct directory before running the commands: colcon build --symlink-install and then source install/setup.bash.
Here is a general command to launch a specific world:
ros2 launch pushback_sim world_select.launch.py world:=<world>
Note:
<world>is where you put the name of the world that you want to launch.
block_test: Empty world with one of each block model
empty: Just as it sounds, a completely empty world
sensor_test: Asymmetric field used for testing sensors setups
empty_field: An empty field with no blocks
pushback: VEX Push Back field with all blocks in place
pushback_sim/
├── launch/
│ ├── basic_field.launch.py
│ ├── full_sim.launch.py
│ ├── tb3_field.launch.py
│ └── world_select.launch.py
├── maps/
│ ├── keepout_full_goal.pgm
│ ├── keepout_full_goal.yaml
│ ├── vex_field_map.pgm
│ └── vex_field_map.yaml
├── models/
│ ├── blue-sphere
│ ├── clear-objects
│ ├── lidar-test-field
│ ├── red-sphere
│ └── vex-field
├── msg/
│ ├── Ball.msg
│ └── BallArray.msg
├── src/
│ ├── pose_bridge.py
│ └── scoring.py
├── worlds/
│ ├── block_test.sdf
│ ├── empty_field.sdf
│ ├── empty.sdf
│ ├── pushback.sdf
│ └── sensor_test.sdf
├── CMakeLists.txt
├── package.xml
└── resources.txt
models/
└── model-name/
├── meshes/
│ ├── model-part.dae
│ └── model-part-collision.dae
├── model.config
└── model.sdf
Purpose of this node is to listen to the gazebo topic /world/default/dynamic_pose/info, parse the data (JSON) reformat it to include the name of the model and its ID number and republishes it on the /object_locations topic.
This node has a few functions:
- Validates picking up blocks by comparing the robot pose to all the blocks that are available to be picked up (on the floor)
- Compares robot pose to a required pose needed to score. Also assigns ID numbers to all of the actionable locations (goals, loaders, park zones)
coming soon:
- calls services to update intake status and goal status
- calls services to add blocks to the loaders
Both the blue and red spheres use a gazebo plugin called rolling_friction::RollingFrictionPlugin the plugin + install instructions can be found here: kmhswimgirl/gz_rolling_friction
ROS2 Jazzy Jalisco Documentation
ROS Index
Nav2 Documentation
Gazebo Harmonic Documentation
Open Robotics Discourse
Robotics Stack Exchange
Simulation Description Format (SDF)
RGBA 0-1 Color Picker