2015-08-05 3 views
1

В настоящее время я работаю над проектом по управлению роботом с 6 ногами. У меня установлены мои скрипты для индивидуального совместного управления, и он работает нормально. У меня есть индивидуальные скрипты для совместных контроллеров для каждой ножки, leg_1_joint_control, leg_2_joint_control и т. Д. ..., все эти скрипты имеют 3 ПИД-регулятора для двигателей на каждой ноге под названием PID1, PID2 & PID3. Я хочу, чтобы динамически вызывать мои PID1,2 & 3 метода в моем скрипте leg_'leg_no'_joint_control.py (где «leg_no» - номер ноги [1-6]) без необходимости писать отдельный случай для каждой ноги ,Python: Динамический вызов метода в отдельном скрипте

Вот идеальный фрагмент моего кода управления ноги, чтобы попытаться объяснить:

import leg_1_joint_control 
import leg_2_joint_control 
import leg_3_joint_control 
... 

def leg(args, leg_no): 
    ... 
    e1[t] = leg_'leg_no'_joint_control.PID1(args) 
    ... 

и мой leg_'leg_no'_joint_control сценарий

... 
def PID1(args): 
    ... 
    return ek 

Так что я хочу сделать, это когда я изменяю переменную leg_no, я хочу вызвать PID1 в скриптах для соответствующей ножки. Это возможно? Я пробовал такие методы, как getattr(), но не имел успеха.

+0

Являются ли ноги такими разными, что вам нужны три разных сценария для управления ими? Один класс управления с одним экземпляром на каждую ногу кажется более простым. – chepner

ответ

3

Не пытайтесь использовать динамические имена для переменных, это вызовет головные боли для развития и кошмары для поддержания. Просто используйте массив:

import leg_1_joint_control 
import leg_2_joint_control 
import leg_3_joint_control 
... 

legs_joint_control = [ leg_1_joint_control, leg_2_joint_control, ... ] 

def leg(args, leg_no): 
    ... 
    e1[t] = legs_joint_control[leg_no].PID1(args) 
    ... 
+0

Приветствия! это его решило. это также можно сделать для PID1, 2 & 3? например. pid = [PID1, PID2, PID3] для i in (0, 3): ... = legs_joint_control [leg_no] .pid [i] (args) –

Смежные вопросы