Работя върху нов хардуер за активни протези на краката. Моята система има вграден компютър 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"
Има 14ms забавяне между всяка функция (измерено с осцилоскоп). Проведох много малки експерименти, за да изолирам проблема. Отварянето и затварянето на SPI порта, изпращането на SPI команди и анализирането на agv[] не са проблем. Ако ги извикам няколко пъти в едно и също извикване на програма, забавянето е от порядъка на 700us между всеки сериен пакет.
Извикването на "nice -n -19 ./fxa_test_z_1" не промени нищо.
==
Какво мога да направя, за да направя тези извиквания на функции по-бързи? Има ли някаква надежда, че мога да ги накарам да минат под ms?
В момента се опитвам да избягвам да правя големи модификации на моя код, тъй като искаме да тестваме нашите контролни цикли утре.
Благодаря!
Джеф
plan
. Създаването на процес е бавно. Това, което бихте искали да направите вместо това, е да иматеplan
цикъл на stdin или файл, който чете всяка команда една след друга, така чеplan
да не се налага да се събаря и стартира отново за всяка команда. - person indiv   schedule 13.08.2014