Я работаю над новым оборудованием для активных протезов ног. В моей системе есть встроенный компьютер BeagleBone Black RevC и несколько нестандартных плат. BeagleBone Black (BBB) работает под управлением Debian Linux.
Я написал консольное приложение C, чтобы общаться с другими платами из Linux. С терминала я могу отправить команду типа «./plan execute_1 set_pid_gains 10 50 0», чтобы изменить коэффициенты усиления контура управления, работающего на моем драйвере двигателя. Функция «план» написана на C. Она отправляет сообщение через SPI.
Программа отлично работает сама по себе, я могу отправить все команды, которые хочу. Однако когда мы начали тестировать его из Python (используя Popen для вызова программы на C), мы поняли, что он выполняется не так быстро, как хотелось бы.
Чтобы воспроизвести и изолировать проблему, я написал сценарий оболочки (fxa_test_z_1), который отправляет в мою сеть 3 команды:
#!/bin/bash
# Places FlexSEA in Impedance control mode
# Use with care!
# Set control mode to 'z' (4)
./plan execute_1 set_control 4
# Current loop gains:
./plan execute_1 set_current_gains 10 50 0
# Choose from one of these:
./plan execute_1 set_z_gains 1 0 0
echo "FlexSEA in Stiffness mode"
Между каждой функцией есть задержка 14 мс (измеренная с помощью осциллографа). Я провел много небольших экспериментов, чтобы изолировать проблему. Открытие и закрытие порта SPI, отправка команд SPI и анализ agv[] не являются проблемой. Если я вызываю их несколько раз в одном вызове программы, задержка составляет порядка 700 мкс между каждым последовательным пакетом.
Вызов «nice -n -19 ./fxa_test_z_1» ничего не изменил.
==
Что я могу сделать, чтобы эти вызовы функций выполнялись быстрее? Есть ли надежда, что я смогу заставить их стать субмс?
Прямо сейчас я стараюсь не вносить серьезные изменения в свой код, так как завтра мы хотим протестировать наши циклы управления.
Спасибо!
Джефф
plan
. Создание процесса происходит медленно. Вместо этого вы хотели бы иметь циклplan
на стандартном вводе или файл, читающий каждую команду одну за другой, чтобыplan
не приходилось разрывать и перезапускать для каждой команды. - person indiv   schedule 13.08.2014