Today’s pool test marked several major milestones. This was the first time that our new minibot, named Crush, was submerged in the pool. This was also the first time that we tested the torpedo launcher in the pool. And it was also the first time that all code migrated to ROS2 was tested together, in the pool, on Oogway.
We brought the pre-qualification equipment to the pool, including the pre-qualification gate, marker, and two kettlebell weights, as well as the red buoy.
Crush
Today, we put Crush in the pool for the first time. Crush doesn’t have any electronics mounted yet, so our goal today was to estimate the number of buoyancy blocks required to make Crush positively buoyant. We found that Crush was slightly positively buoyant with 7.5 buoyancy blocks. Since the electronics will add more weight, we estimate needing 12 buoyancy blocks in the final version.

Torpedo Launcher
The mechanical team mounted the torpedo launcher on the robot today. Although we didn’t get a chance to fire it by sending a command to the servo, we did test the torpedo launcher independently and firing it manually. It went straight and eventually dropped down, traveling a distance of about two meters. You can see it in the video below.

Oogway
Since August 2024, the CS team has been working on migrating our codebase from ROS1 to ROS2. Although we’ve tested a few systems in previous pool tests, today was our first comprehensive test where we tested all software systems together.
- Controls: Worked flawlessly.
- CV: The USB camera, bin detector, blue rectangle detector, and buoy detector scripts worked. DepthAI spatial detection was run, but failed to connect to the DepthAI camera. The path marker detector and pink bins detector were not tested, as the associated objects were not available for testing.
- Execute: Will’s work-in-progress version of the execute package was copied into the pool test branch. A few modifications were required, but it worked. It launched all nodes typically needed to run the system.
- Offboard comms: Worked well, but we noticed one issue: the script that interfaces with the Peripheral Arduino via serial would, after running for a few minutes, read empty lines from serial, even though the Arduino was still printing data to serial as normal. The script would automatically reset its serial connection after reading five empty lines, which would fix the issue until it happened again a few minutes later. This happened most times the script was run.
- Sensor fusion: Worked well, except it would occasionally throw the error “Failed to meet update rate!”. We changed a few sensor fusion settings, but aren’t sure if it fixed the issue. This issue may also be related to the aforementioned issue with offboard comms.
- Static transforms: Worked flawlessly, although its launch file was modified to avoid printing log messages to the terminal to reduce clutter when launching motion.
- System utils: Worked well, although a few bugs were fixed in topic transforms.
- Task planning: We encountered many bugs when running task planning, which we fixed one-by-one.
- Vectornav: Worked flawlessly.
- GUI: Worked well. A few panels were updated to reflect changes introduced by other packages that we hadn’t accounted for before.
Overall, with various bug fixes, all systems worked well. We were able to move the robot with the joystick, move it in a square with task planning, and run part of the pre-qualification task. The robot struggled to stay level because its buoyancy was off balance due to the addition of the torpedo launcher – it made the front of the robot dip down and the back side came up.
We used the fiber tether throughout the pool test, and didn’t run into any issues with it.
Looking Ahead
At the next pool test, we’ll first tune buoyancy and static power. Our main goal will be to complete the pre-qualification with Oogway. The attempt we made today showed that we’ll be able to largely reuse the pre-qualification code from last year.
