Internship Progress Week 12 (September 17 ~ September 23)
Porting and Testing ROS 2 Jazzy and Amazon Warehouse
This week, we focused on testing and extending the cross-platform capabilities of Robotics Academy on macOS Apple Silicon, validating the core stack on ROS 2 Jazzy and running the Amazon Warehouse exercise.
1. Testing and Validating ROS 2 Jazzy
We began by testing our updated environment running ROS 2 Jazzy Jalisco. All primary subsystems—including workspace compilation, node execution, and bridging with the new Gazebo Jetty environment—passed validation without requiring Rosetta 2 translation.
2. Implementing Amazon Warehouse
Following the environment tests, we tackled the Amazon Warehouse exercise, which involves an autonomous holonomic robot navigating warehouse aisles to pick up pallets and deliver them to a packing zone.
Nav2 Architecture vs. Classical Approach
Initially, the objective was targeted towards running the exercise through the Nav2 (Navigation2) stack, using action clients to send target poses. However, the fundamental design of this exercise in Robotics Academy emphasizes learning low-level robotics concepts (such as coordinate transformations, A* path planning, and direct motor velocity control). In this container configuration, the full Nav2 background server stack is not spun up by default.
To achieve full autonomy while honoring the container environment, we developed an autonomous navigation and task execution state machine using odometry feedback and velocity commands.
Resolving Backend Template Bugs
During testing, we discovered two major bugs in the upstream HAL.py and WebGUI.py templates for Gazebo Jetty:
- Namespace Mismatch: The default templates attempted to publish and subscribe under the
/amazon_robot/namespace (e.g.,/amazon_robot/odomand/amazon_robot/cmd_vel). In Gazebo Jetty, the active robot entity publishes under/logistic_robot/. - Platform Actuator Topic Bug: The pallet lift function published to
/platform/cmd_vel, whereas the simulator listens on/logistic_robot/platform/cmd_vel. - Map Display Synchronization: The web map viewer was bound to the legacy odometry topic, preventing the position indicator (red marker) from updating.
By applying monkey-patches in our control script, we re-routed all motor controllers, odometry streams, platform lift triggers, and the GUI map pose callback to the active /logistic_robot topics.
Manhattan Routing (Aisle Navigation)
To prevent collisions with warehouse shelves, we implemented Manhattan Routing (corridor navigation). Instead of driving along a direct diagonal vector—which clips the corners of adjacent shelves—the robot navigates along the main aisle before making a 90-degree turn directly into the target shelf.
Using coordinates extracted directly from Gazebo state telemetry:
- Pallet 0:
(X: 3.84, Y: 0.54) - Packing Area:
(X: 0.0, Y: 0.0)
The robot aligns with the aisle, enters the pod bay, activates the platform lift, exits back into the clear corridor, and delivers the pallet to the packing station.
Demonstration Video
Watch the complete autonomous execution of the Amazon Warehouse pallet pick-and-place sequence:
(Click the image above to watch the video on YouTube)
Simulation Screenshots
Below are screenshots of the Amazon Warehouse simulation and navigation interface:


