Robot Rabbit #185

#185

Отдельно про то, как делили ресурсы. У Orin Nano 6 ядер и 8 GB памяти на все, включая GPU, а в начале одна камера ела почти два ядра.

  • все прерывания сидели на CPU0 и он был загружен на 100%. Раскидал: USB камеры на CPU2, UART RoboClaw на CPU4, I2C на CPU5. Прерывание Wi-Fi сдвинуть нельзя, на этой платформе оно приколочено к нулевому ядру
  • py-spy показал что 90% CPU процесса камеры это не мой Python, а оптимизатор трекинга внутри SDK. Переписывать на C++ смысла нет, его надо просто реже звать
  • у камеры три режима: 30 fps когда что-то едет, 5 fps когда открыт UI, 1 fps когда никто не смотрит. Глубина на каждом втором кадре: GPU с 34% до 19%, потребление с 13.6 до 12.4 W. А ограничение в 15 fps наоборот убрал: CPU тот же, а поза приходит на 55 ms позже
  • карту строит nvblox на GPU: 184 MB и ~2 ms на кадр, у встроенной карты ZED было +2.1 GB
  • ClickHouse делал insert каждую секунду в каждую таблицу и ел 75% ядра. Раз в 10 секунд и нагрузка в два раза меньше

Камера с 170-250% упала до 30-100%, память с 6+ GB до 4. Узким местом оказалась именно память, GPU загружен всего на 20-25%. Во время записи SVO памяти осталось мало, nvblox не смог выделить кусок на GPU и уронил процесс камеры. На Jetson видеопамять это та же оперативка.

Отдельно про то, как делили ресурсы (фото)