System documentation for the autonomous mobile robot (TurtleBot3 Burger) designed for smart warehouse intralogistics.
System architecture overview.
The Group 1 AMR is a TurtleBot3 Burger-based autonomous mobile robot with a custom launcher payload. Its mission is to autonomously navigate an unknown warehouse maze, detect ArUco-marked delivery stations, and deliver ping pong balls into static and oscillating receptacles β all within a 25-minute window with no human teleoperation.
| Parameter | Value |
|---|---|
| Platform | TurtleBot3 Burger + custom payload |
| Total Mass | 1402.24 g (1.40 kg) |
| Dimensions (L Γ W Γ H) | 138 mm Γ 178 mm Γ 192 mm |
| Battery | Li-Po 11.1V, 1800 mAh |
| Compute | Raspberry Pi 4B + OpenCR 1.0 |
| Sensors | LDS-02 LiDAR, RPi Camera V2 (8 MP) |
| Launcher | Dual counter-rotating flywheels + SG90 servo gate |
| Ball Capacity | 9 ping pong balls |
| Mission Window | 25 minutes |
| Estimated Runs per Charge | ~4β5 |
The mechanical and electrical is assumed to be complete. However a detailed explanation is provided for configuring the electrical subsystems and attaching the ball-launching mechanisms onto a standard, unmodified Turtlebot3.
A ROS 2 Humble environment must be installed on the operatorβs laptop. Follow the setup process at: https://emanual.robotis.com/docs/en/platform/turtlebot3/quick-start/#pc-setup
cp ~/[YOUR_ROS2_WORKSPACE]/src ~/[YOUR_DESIRED_BACKUP_PATH]
rm -rf ~/[YOUR_ROS2_WORKSPACE]/src
git clone https://github.com/Russell501/CDE2310_Group1.git
rosdep install --from-paths src --ignore-src -r -y
colcon build --symlink-install
source install/setup.bash
Before running the full mission, execute the system integration test to verify all components:
ball_launcher.py and aruco_live.py.python3 system_test.py.If specific subsystems need to be verified in isolation, use the following standalone test scripts. All RPi scripts should be run via SSH on the TurtleBot; local scripts should be run on the operatorβs laptop.
1. Test Flywheels
Spins up the flywheel motors to verify both are operational and spinning at matched speeds.
# Copy the script from software/docking/rpi
# On RPi (via SSH):
python3 ball_launcher_test.py
2. Test Servo
Cycles the SG90 servo through its range to verify the feeder gate mechanism is responding to PWM signals.
# Copy the script from software/docking/rpi
# On RPi (via SSH):
python3 servo.py
3. Test Station A Docking & Launching (Full Sequence)
Runs the complete Station A sequence: ArUco detection, approach, docking alignment, and ball firing.
# On laptop:
python3 software/docking/local/aruco_dock_and_launch_test.py
4. Test Docking Only
Runs the docking approach sequence (ArUco detection and alignment) without firing any balls.
# On laptop:
python3 software/docking/local/aruco_dock_test.py
5. Test Station B Launching
Tests the Station B firing sequence, which synchronises ball launches with the moving receptacle.
# On laptop:
python3 software/docking/local/station_b_launcher.py
Turn on the TurtleBot3 Burger. Wait for the Raspberry Pi to boot (indicated by the green LED activity on the Pi).
Open a terminal on your laptop and SSH into the TurtleBot3:
ssh ubuntu@[TURTLEBOT_IP]
In the SSH terminal, run the RPi launch script:
python3 main_launch.py
This starts the ArUco detection pipeline (aruco_live.py) and the launcher hardware controller (ball_launcher.py).
In a new terminal on your laptop:
ros2 run auto_nav mission_gui
This opens the Tkinter-based mission monitoring GUI showing real-time phase status, marker detections, and delivery logs.
In another terminal on your laptop:
ros2 launch auto_nav bringup_all.launch.py
This starts the mission in dependency order:
Observe the robotβs progress through:
No physical intervention is permitted after the mission starts.
| Phase | What Happens | Approximate Duration |
|---|---|---|
| Boot & Init | SLAM starts mapping, Nav2 initialises | 1β2 min |
| Exploration | Robot explores the maze autonomously, detects station markers | 5β12 min |
| Station A | Robot docks at the static station and fires 3 balls with timed delays | 2β4 min |
| Transit | Robot navigates from Station A to Station B | 1β2 min |
| Station B | Robot docks and fires 3 balls synchronised to the moving receptacle | 2β4 min |
| Complete | Mission controller logs completion | < 1 min |
Wait at least 30 seconds for the topics to be published. If still unavailable, terminate the launch files and run them again.
ball_launcher.py output).The Nav2 costmap inflation radius may be too conservative. Possible tuning (in burger.yaml):
inflation_radius (currently 0.25 m).cost_scaling_factor (currently 1.5).SmacPlanner2D for better tight-space path planning.Suspected cause: power supply noise on the 5V rail from shared peripherals, or unintended PWM signals on the servo GPIO during boot. Mitigations:
Solder all critical connections instead of using jumper wires. Apply heat shrink tubing over exposed wire joints. Minimise female-to-male pin connections on the Raspberry Pi β share 5V and GND on a proto board with soldered joints.
| Date | Component | Action / Reason | By |
|---|---|---|---|
| 19/03/2026 | RPi Camera | Camera not working after testing with different RPi and FFC | Russell Ng |
| 07/04/2026 | 11.1V Li-ion Battery | Battery cable broken | Alex |