Dronekit API Python: как подключиться к одному и тому же транспортному средству из двух разных процессов?

Мне нужна помощь в работе с одним и тем же автомобилем из двух разных процессов.

У меня запущен один экземпляр SITL. Я пытаюсь подключиться к этому же экземпляру как из основного процесса моего скрипта DroneKit, так и из подпроцесса, созданного в том же скрипте.

Оба соединения работают нормально (объект MPAPIConnection возвращается в обоих случаях с одной и той же ссылкой @), но в подпроцессе объект соединения не выглядит активным, а параметры автомобиля не обновляются.

В приведенном ниже примере местоположение, возвращаемое основным процессом при движении дрона, является фактическим местоположением, но местоположение, возвращаемое подпроцессом, остается в исходном местоположении при первом запуске подпроцесса.

Пример:

import time
from pymavlink import mavutil
import multiprocessing


class OtherProcess(multiprocessing.Process):
    def __init__(self):
        super(OtherProcess,self).__init__()

    def run(self):
        sp_api = local_connect()
        sp_v = api.get_vehicles()[0]

        while True:
            print "SubProcess : " + str(sp_v.location)
            time.sleep(1)

api = local_connect()
v = api.get_vehicles()[0]

sp = OtherProcess()
sp.start()

while True:
    print "MainProcess : " + str(v.location)
    time.sleep(1)

Итак, есть ли способ получить доступ к одному и тому же транспортному средству из разных процессов в одном и том же экземпляре mavproxy?


person benblass    schedule 19.07.2015    source источник


Ответы (1)


Вы должны попробовать это снова - DKPY2 (только что выпущенный) использует автономные сценарии и разработан с идеей, что каждый объект Vehicle, возвращаемый с помощью функции connect(), полностью независим. Безусловно, можно подключаться к разным автомобилям в одном скрипте (один и тот же процесс), поэтому, скорее всего, вы сможете подключиться к одному и тому же автомобилю и из разных процессов.

person Hamish Willee    schedule 28.10.2015
comment
Да, я следил за обсуждениями DKPY2 на github, попробую еще раз. В противном случае с DKPY1 необходим прокси-менеджер. Спасибо ! - person benblass; 28.10.2015
comment
Я думаю, что ваши шансы на эффективную работу с DKPY2 довольно высоки, но очень малы с DKPY1 - это просто не было требованием дизайна. - person Hamish Willee; 29.10.2015