CS Updates: You Only Test Once?

Welcome back to the CS blog! Last time, a major roadblock for many projects was the lack of pool time. In fact, many projects have not even been tested once! However, we are starting and continuing a variety of new projects.

Pool Testing

For the following projects, we encourage you to read the previous two pool testing updates. These projects are all in the testing and iteration phase.

  1. Pre-qualifying (awaiting re-testing)
  2. Yaw to CV Object (final changes in progress)
  3. Sonar (changes in progress)
  4. HSV Refactoring (changes in progress)
  5. DepthAI and Mono Camera Bounding Box Rendering (testing in progress)

You can find the previous pool test blogs here.

Awaiting Pool Testing

For the following projects, pool testing time is currently blocking development. No meaningful developments have been made since the previous CS blog.

  1. IVC Task Planning Cleanup (awaiting Crush availability)
  2. Crush 8 Thrusters (awaiting Crush availability)
  3. DepthAI Refactoring (awaiting testing)

In-Development

So, what is being actively developed? We have a few continuing projects as well as a few new projects.

Jetson Nano Characterization and YOLO

Previously, we ran into networking issues with our secondary Jetson Nano. In the robot, the Jetson Nano acts as a DHCP server, assigning computers connected via Ethernet an IP address and allowing LAN connections. Since this secondary Nano will not need to act as a DHCP server for some time, we decided to revisit this issue in the future.

Immediately, the priority was to get a benchmark of a YOLO model running continuously on a video stream. This would allow us to make design decisions for a new robot, seeing if A. we want a Jetson Nano in the design, and B. whether or not the Jetson Nano should act as the intended coprocessor or be the main processor (as in Crush). While it would be ideal to run this test in the ROS codebase, setting this up is time-consuming. Therefore, we decided to instead prioritize a quick test simply on the computer.

We connected a spare USB camera to the Jetson board and ran a simple pretrained YOLO model to detect people. Originally, it did one frame per 500ms, with 2.5-3.5 ms of preprocessing, 500ms of inference, and 2ms of postprocessing. This iteration used 207% CPU (technically around 2 CPU cores but split across all 6 cores). With some optimization, the model could run with 100ms inference and 70% CPU.

The next logical step was to use the CUDA present on the Nano. After all, that is the purpose of the board. When moving the model, we found that the CPU usage was still quite high at about 90%, but we found an increase in frames processed per second from 10 to around 45.

We will continue to do some benchmarking this week, with our future goal being integration into the current ROS codebase.

Benchmark Timeline: Mid-March

Crush Storage

On the Jetson Nano in Crush, we have a 1tb SSD installed. However, the system only sees around 100gb of usable space. Due to an error while the system was originally partitioned, there is 850gb of unpartitioned space past the 7th partition. Due to how the system is set up, we cannot simply extend the main partition without wiping the drive and restarting.

To solve this, we planned to mount a new partition to the bag files folder, allowing for large recordings of robot runs to be stored. However, we quickly ran into some issues due to the Docker container not recognizing the newly partitioned and mounted space. This issue is crucial for testing, since bag files allow us to develop and test outside of the pool. We will continue looking into this issue to allow for local testing.

Timeline: Late-March

Acoustics Service

The Acoustics team has been hard at work gathering data and fine-tuning their analysis code. Now, it is time to integrate some of the code into the ROS codebase to allow for interaction with task planning. This week, we began work with the Acoustics team to identify key components of their codebase, and how it will interface with a new ROS service and new ROS topics.

This addition to the codebase will allow Oogway to communicate with Crush via IVC about which task needs to be completed first. This allows each robot to react accordingly, and wait for the other to score maximum points. Please look forward to future updates!

Timeline: TBD

Final Takeaways

While we have been making progress, a lot of projects are still awaiting pool testing. However, pool testing is going smoothly (read the pool test blogs!), and we hope to have some if not most of these projects completed as task information comes out soon. That is all for this update, stay tuned for the next blog!