2016-07-29 1 views
4

나는 ROS Indigo를 실행중인 Clearpath Husky에 대한 다양한 데모를 시작하는 PyQt4 및 Python 2.7로 작성된 GUI로 작업하고 있습니다. GUI는 launching navigation demos 사이를 전환하고 실제 로봇을 시각화합니다. 이렇게하려면 로컬 ROS의 데모를 실행하고 허스키의 ROS를 시작해야합니다. 두 개의 다른 ROS 인스턴스간에 전환 할 때 패키지가 올바르게 빌드되고 Rviz 내부의 Husky를 시각화 할 수 있도록 각 OS에 대해 devel/setup.bash를 "소스"할 수 있어야합니다 (TF 프레임의 오류는 " tf 데이터가 없습니다. 실제 오류 : 고정 프레임 [odom]이 존재하지 않습니다. "RobotModel"URDF 모델을 구문 분석하지 못했습니다. "). 내 .bashrc에서 Husky의 setup.bash를 소스로 사용하면 로컬 데모를 실행하기 전까지는 시각화가 제대로 작동합니다. 이것도 마찬가지입니다. 로컬 setup.bash를 소싱하는 것은 로컬 데모를 정상적으로 실행할 것입니다. Husky의 시각화는 중단됩니다.PyQt4 GUI 내에서 bash 파일 소싱

파이썬의 하위 프로세스 (또는 다른 대안)를 사용하여 시각화가 중단되지 않도록 GUI의 인스턴스 내에 적절한 devel/setup.bash를 제공 할 수 있습니까?

+0

내 답변이 도움이 되었습니까? –

+0

네, 정말 감사했습니다! – dicegame

답변

2

예, 예를 들어, 당신이 원하는 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>이 포함되어 있습니다. 일반 POSIX 셸이 Popen에서 사용되기 때문에 .sh 파일의 소스는 .bash이 아닙니다.