Получение файла bash внутри графического интерфейса PyQt4

Я работаю над графическим интерфейсом, созданным с помощью PyQt4 и Python 2.7, который запускает различные демонстрации для Clearpath Husky под управлением ROS Indigo. Графический интерфейс пользователя переключается между запуском демонстраций навигации и визуализацией моего физического робота. Для этого он должен переключаться между запуском демонстраций на локальной ROS и ROS на моем Husky. При переключении между двумя разными экземплярами ROS мне нужно иметь возможность «исходить» из devel / setup.bash для каждой ОС, чтобы пакеты были собраны правильно и визуализация Husky внутри Rviz не ломалась (ошибки с кадрами TF, например " Нет данных tf. Фактическая ошибка: Фиксированный фрейм [одом] не существует », а с RobotModel« Модель URDF не удалось проанализировать »). В моем .bashrc, если я использую setup.bash для Husky, визуализация работает нормально, пока я не попробую запустить локальную демонстрацию. Так бывает и наоборот; в то время как источник локального setup.bash будет нормально запускать локальные демонстрации, визуализация Husky прерывается.

Есть ли способ использовать подпроцесс python (или другую альтернативу) для получения соответствующего файла devel / setup.bash в экземпляре GUI, чтобы визуализация не нарушалась?


person dicegame    schedule 29.07.2016    source источник
comment
Мой ответ сработал для вас?   -  person Andrzej Pronobis    schedule 01.08.2016
comment
Да, это сработало, спасибо!   -  person dicegame    schedule 01.08.2016


Ответы (1)


Да, этого должно быть достаточно, чтобы установить скрипт установки непосредственно перед выполнением нужной команды ROS, например:

#!/usr/bin/env python

from subprocess import Popen, PIPE

shell_setup_script = "/some/path/to/workspace/devel/setup.sh"
command = "echo $ROS_PACKAGE_PATH"
cmd = ". %s; %s" % (shell_setup_script, command)

output = Popen(cmd, stdout=PIPE, shell=True).communicate()[0]
print(output)

Как видите, используется shell=True, который выполняет cmd в подоболочке. Затем cmd содержит . <shell_setup_script>; <command>, который является источником сценария установки перед выполнением команды. Обратите внимание, что файл .sh используется вместо .bash, поскольку Popen, скорее всего, будет использовать общую оболочку POSIX.

person Andrzej Pronobis    schedule 30.07.2016