在PyQt4 GUI中导入bash文件

5
我正在使用PyQt4和Python 2.7构建GUI,为在ROS Indigo上运行的Clearpath Husky启动各种演示。该GUI在导航演示和可视化我的物理机器人之间进行切换。为此,它必须在本地ROS和我的Husky上启动演示之间进行切换。在切换两个不同的ROS实例时,我需要能够“source”每个操作系统的devel/setup.bash,以便正确构建软件包并且在Rviz中可视化Husky不会出错(TF帧错误,如“无tf数据。实际错误:固定帧[odom]不存在”以及与RobotModel“URDF模型无法解析”的错误)。在我的.bashrc中,如果我source Husky的setup.bash,则可视化工作正常,直到我尝试运行本地演示。反之亦然;虽然在源本地setup.bash时可以很好地运行本地演示,但Husky的可视化会出现问题。
有没有一种方法可以使用Python的subprocess(或其他替代方案)在GUI实例中源化适当的devel/setup.bash,以便可视化不会中断?

我的回答对你有用吗? - Andrzej Pronobis
是的,非常感谢,那个很好用! - dicegame
1个回答

3

是的,只需要在执行所需的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,这将在子shell中执行cmd。然后,cmd包含. <shell_setup_script>; <command>,在执行命令之前会先源化设置脚本。请注意,由于Popen可能使用通用的POSIX shell,因此源文件是.sh而不是.bash


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接