An open-source ROS 2 and Gazebo simulation project for a six-wheel autonomous delivery robot. The project contains a SolidWorks-derived robot description, Gazebo simulation assets, simulated onboard sensors, keyboard teleoperation, and a lightweight autonomous city-delivery demo from Shop A to Shop B with obstacle avoidance.
- ROS 2 Jazzy package for a six-wheel delivery robot.
- Xacro/URDF robot model using exported SolidWorks visual meshes.
- Gazebo Harmonic simulation with differential drive over six wheel joints.
- Simulated front LiDAR published as
/scan. - Sensor frames for Intel RealSense D435i, LiDAR, IMU, and ultrasonic sensors.
- WASD keyboard teleoperation.
- City-like Gazebo world with shops, road, sidewalks, crosswalks, trees, lamps, a parked car, and pedestrian obstacles.
- Reactive autonomous navigation from Shop A to Shop B using waypoints and LiDAR obstacle avoidance.
- Dynamic speed control based on distance to waypoints, final goal, heading error, and obstacle distance.
Delivery-Robot-ROS/
+-- docs/
| +-- images/
| +-- gazebo-city-autonomy.png
+-- src/
| +-- delivery_robot_description/
| +-- config/
| +-- launch/
| +-- meshes/
| +-- rviz/
| +-- scripts/
| +-- urdf/
| +-- worlds/
+-- .gitignore
+-- LICENSE
+-- README.md
- Ubuntu 24.04 or WSL2 Ubuntu.
- ROS 2 Jazzy.
- Gazebo Harmonic / Gazebo Sim 8.
colcon,xacro,ros_gz_sim,ros_gz_bridge,robot_state_publisher.
Install the common runtime dependencies:
sudo apt update
sudo apt install -y \
ros-jazzy-ros-gz-sim \
ros-jazzy-ros-gz-bridge \
ros-jazzy-robot-state-publisher \
ros-jazzy-joint-state-publisher-gui \
ros-jazzy-xacro \
ros-jazzy-rviz2 \
ros-jazzy-teleop-twist-keyboardFrom the repository root:
source /opt/ros/jazzy/setup.bash
colcon build --symlink-install
source install/setup.bashIf you keep this repository on Windows and build inside WSL, copy or mount it into your ROS workspace first.
This launches Gazebo with the city world, spawns the robot at Shop A, starts the Gazebo-ROS bridges, and runs the autonomous waypoint navigator toward Shop B.
source /opt/ros/jazzy/setup.bash
source install/setup.bash
ros2 launch delivery_robot_description street_autonomy.launch.pyThe robot will:
- start near Shop A,
- follow a waypoint route toward Shop B,
- slow down near waypoints and the final goal,
- use
/scanto detect obstacles, - steer around the pedestrian / parked obstacle,
- stop near Shop B.
Launch Gazebo and the bridges:
ros2 launch delivery_robot_description keyboard_drive.launch.pyIn another terminal:
ros2 run delivery_robot_description wasd_teleop.pyControls:
W forward
S backward
A turn left
D turn right
X stop
Q quit
/cmd_vel geometry_msgs/msg/Twist
/odom nav_msgs/msg/Odometry
/scan sensor_msgs/msg/LaserScan
/tf tf2_msgs/msg/TFMessage
The simulated robot is based on the real delivery robot CAD and design assumptions:
- total robot mass: 25 kg,
- payload capacity: 12 kg,
- six wheels, three per side,
- each side is driven by one 150 W geared DC motor through a chain/gear mechanism,
- wheel diameter: approximately 195 mm,
- front passive suspension,
- rear active suspension concept with approximately +/- 17 degrees of travel,
- D435i camera height: 485 mm from ground,
- LiDAR height: 445 mm from ground,
- three ultrasonic sensors in front and three in rear.
This project currently implements lightweight reactive autonomy, not a full Nav2 navigation stack. It is useful for simulation bring-up, sensor placement, Gazebo testing, and early behavior prototyping.
Planned next steps:
- Nav2 integration with costmaps and planner,
- better robot collision geometry and footprint tuning,
- D435i RGB/depth camera Gazebo plugins,
- ultrasonic range sensor plugins,
- active suspension joints and controllers,
- higher quality visual assets and textures.
Archived releases of this repository are published on Zenodo: 10.5281/zenodo.21962178.
This project is released under the MIT License. See LICENSE.

