在PyQt4 GUI中获取bash文件

我正在开发一个使用PyQt4和
Python 2.7构建的GUI,它为
Clearpath Husky运行的ROS Indigo启动了各种演示. GUI在
launching navigation demos之间切换并可视化我的物理机器人.要做到这一点,它必须在本地ROS上启动演示和我的赫斯基上的ROS之间切换.当在两个不同的ROS实例之间切换时,我需要能够为每个操作系统“获取”devel / setup.bash,以便正确构建软件包并可视化Rviz内部的Husky不会中断(错误与TF帧类似“没有tf数据.实际错误:固定框架[odom]不存在“和RobotModel”URDF模型无法解析“).在我的.bashrc中,如果我找到Husky的setup.bash,可视化工作正常,直到我尝试运行本地演示.这反过来也是如此;采购本地setup.bash将运行本地演示就好了,赫斯基的可视化打破了.

有没有办法使用python的子进程(或其他替代方法)在GUI的实例中获取适当的devel / setup.bash,以便可视化不会中断?

最佳答案 是的,在执行所需的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取代; <命令>在执行命令之前获取安装脚本.请注意,.sh文件来源而不是.bash,因为Popen可能会使用泛型POSIX shell.

点赞