This ROS 2 package provides simulation environments for the AUSRA omnidirectional robot using Gazebo Fortress (gz-sim).
The ausra_simulation package contains:
- Worlds: Multiple simulation environments (empty, room, warehouse)
- Models: Gazebo models for obstacles and environments
- Maps: Pre-generated 2D maps for navigation testing
- Launch files: Per-world launch files for easy simulation startup
ausra_simulation/
├── CMakeLists.txt
├── package.xml
├── README.md
├── config/
│ └── gazebo_params.yaml # Gazebo simulation parameters
├── gui/
│ └── gui.config # Gazebo GUI layout configuration
├── launch/
│ ├── empty_world.launch.py # Empty world simulation
│ ├── room_world.launch.py # Indoor room with walls
│ └── warehouse.launch.py # Warehouse with obstacles
├── maps/
│ ├── room.yaml # Room world map config
│ ├── room.png # Room world map image
│ ├── warehouse.yaml # Warehouse map config
│ └── warehouse.pgm # Warehouse map image
├── models/
│ ├── construction_cone/ # Traffic cone obstacle
│ ├── neo_office_box/ # Stackable office boxes
│ ├── neo_wall_box/ # Wall segment
│ ├── neo_workshop_walls/ # Workshop wall structure
│ ├── room_with_walls_1/ # Room with internal walls
│ └── yellow_bin/ # Yellow garbage bin
├── rviz/
│ └── simulation.rviz # RViz configuration for simulation
└── worlds/
├── empty_world.sdf # Empty world (ground plane only)
├── room_world.sdf # Room with walls for indoor nav
└── warehouse.sdf # Warehouse with obstacles
ausrabot_description- Robot URDF and configurationomnidirectional_driver- Custom omnidirectional wheel driverros_gz_sim- Gazebo Fortress simulationros_gz_bridge- ROS-Gazebo topic bridgegz_ros2_control- ros2_control integration with Gazebo
Basic simulation with just a ground plane:
ros2 launch ausra_simulation empty_world.launch.pyIndoor simulation with walls for navigation testing:
ros2 launch ausra_simulation room_world.launch.pyComplex environment with obstacles (boxes, cones, walls):
ros2 launch ausra_simulation warehouse.launch.pyStructured office environment with hallways and rooms:
ros2 launch ausra_simulation office_world.launch.pyGarden path environment with configurable robot start position and orientation:
# Default spawn (2, 2, 0.1)
ros2 launch ausra_simulation outdoor_plaza.launch.py
# Custom spawn at x=2.0, y=1.0, rotated 90 degrees
ros2 launch ausra_simulation outdoor_plaza.launch.py x:=2.0 y:=1.0 yaw:=1.57- Simple ground plane
- Good for basic robot testing and debugging
- Minimal computational load
- 10x10m indoor room with walls
- Ideal for indoor navigation testing
- Pre-generated map available:
maps/room.yaml
- Warehouse environment with:
- Workshop walls
- Stacked office boxes
- Construction cones
- Various obstacles
- Pre-generated map available:
maps/warehouse.yaml - Great for obstacle avoidance and path planning tests
- Structured office floor plan with:
- Central Corridor: Long hallway for narrow navigation.
- Connected Rooms: Conference room and cubicle areas.
- Doorways: Strategic gaps for room transition testing.
- Open-air garden path environment:
- Garden Paths: Defined walking loops with low curbs (0.3m).
- Entry/Exits: Gaps in the central square loop for multiple approach angles.
- Obstacles: Static debris on paths to force local replanning.
- Launch with configurable spawn position (see below).
Maps are provided for navigation testing with Nav2:
| World | Map File | Resolution |
|---|---|---|
| Room | maps/room.yaml |
0.10 m/px |
| Warehouse | maps/warehouse.yaml |
0.05 m/px |
To use with Nav2 map server:
ros2 run nav2_map_server map_server --ros-args -p yaml_filename:=/path/to/ausra_simulation/share/ausra_simulation/maps/room.yamlThe following topics are bridged between Gazebo and ROS 2:
| Topic | Type | Direction |
|---|---|---|
/clock |
rosgraph_msgs/msg/Clock |
GZ → ROS |
/scan |
sensor_msgs/msg/LaserScan |
GZ → ROS |
/imu |
sensor_msgs/msg/Imu |
GZ → ROS |
/camera/image_raw |
sensor_msgs/msg/Image |
GZ → ROS |
/camera/camera_info |
sensor_msgs/msg/CameraInfo |
GZ → ROS |
Each launch file spawns:
joint_state_broadcaster- Publishes joint statesjoint_group_velocity_controller- Velocity control for wheelsomnidirectional_driver- Custom omni-wheel kinematics driver
Use teleop_twist_keyboard or publish to /cmd_vel:
# Install teleop if needed
sudo apt install ros-${ROS_DISTRO}-teleop-twist-keyboard
# Run teleop
ros2 run teleop_twist_keyboard teleop_twist_keyboardLaunch RViz with the provided configuration:
Launch RViz with the provided configuration:
ros2 run rviz2 rviz2 -d $(ros2 pkg prefix ausra_simulation)/share/ausra_simulation/rviz/simulation.rvizThe simulation uses a custom GUI configuration (gui.config) that includes:
- Component Inspector: View detailed entity properties (Pose, Collisions).
- Entity Tree: Inspect scene hierarchy.
- Transform Control: Interactive object manipulation tools.
- View Angle: Quick camera snapping controls.
- Create a new SDF world file in
worlds/ - Add any required models to
models/ - Create a new launch file in
launch/(copy and modify existing one) - Optionally generate a 2D map using SLAM and add to
maps/
Ensure the GZ_SIM_RESOURCE_PATH environment variable includes the models directory. The launch files set this automatically.
Check that ausrabot_description package is built and the URDF is valid:
ros2 pkg prefix ausrabot_descriptionTry reducing physics complexity or use a simpler world (empty_world).
MIT License - See LICENSE file for details.