在PyQt4 GUI中查找bash文件
我正在开发一个使用PyQt4和Python2.7构建的GUI,它为运行的RosIndigo启动了各种演示。图形用户界面在虚拟和可视化我的物理机器人之间切换。要做到这一点,它必须在本地ROS和我的哈士奇上的ROS之间切换。在两个不同的ROS实例之间切换时,我需要能够为每个操作系统“源”devel/setup.bash,以便正确构建包,并且可视化Rviz中的Husky不会中断(TF帧错误,如“无TF数据。实际错误:固定帧[odom]不存在”和RobotModel错误“URDF Model无法解析”). 在我的.bashrc中,如果我为Husky的setup.bash提供源代码,那么在我尝试运行本地演示之前,可视化效果很好。反之亦然;虽然寻源本地setup.bash可以很好地运行本地演示,但Husky的可视化功能中断了在PyQt4 GUI中查找bash文件,bash,python-2.7,subprocess,pyqt4,ros,Bash,Python 2.7,Subprocess,Pyqt4,Ros,我正在开发一个使用PyQt4和Python2.7构建的GUI,它为运行的RosIndigo启动了各种演示。图形用户界面在虚拟和可视化我的物理机器人之间切换。要做到这一点,它必须在本地ROS和我的哈士奇上的ROS之间切换。在两个不同的ROS实例之间切换时,我需要能够为每个操作系统“源”devel/setup.bash,以便正确构建包,并且可视化Rviz中的Husky不会中断(TF帧错误,如“无TF数据。实际错误:固定帧[odom]不存在”和RobotModel错误“URDF Model无法解析”)
是否有一种方法可以使用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
包含代码>在执行命令之前,它将生成安装脚本。请注意,.sh
文件的来源不是.bash
,因为Popen可能会使用通用POSIX shell。我的答案对您有用吗?是的,很有用,谢谢!