Skip to content

Autonomous-VEXU/pushback_sim

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

79 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

pushback_sim

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

Launching a World

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.

World Guide + Descriptions

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

Main File Structure:

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

Model Sub-Directory File Structure:

models/
└── model-name/
    ├── meshes/
    │   ├── model-part.dae
    │   └── model-part-collision.dae
    ├── model.config
    └── model.sdf

Nodes

pose_bridge.py

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.

scoring.py

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

Rolling Friction Plugin Setup

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

ROS + Gazebo Sim Resources:

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

About

simulation stuff for MQP

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •