2016-07-29 5 views
4

私はPyQt4とPython 2.7で構築されたGUIで、ROS Indigoを実行しているClearpath Huskyのさまざまなデモを起動しています。 GUIでlaunching navigation demosが切り替わり、私の物理的なロボットが視覚化されます。これを行うには、ローカルROSのデモとHuskyのROSを起動する必要があります。 2つの異なるROSインスタンスを切り替えるときには、各OSのdevel/setup.bashを "ソース"して、パッケージが正しく構築され、Huskyをビジュアル化する必要がある必要があります。Rvizは中断しません(TFフレームのエラー、実際のエラー:固定フレーム[odom]は存在しません "とRobotModel" URDFモデルは解析できませんでした ")。私の.bashrcでは、ハスキーのsetup.bashをソースすると、ローカルのデモを実行しようとするまで視覚化がうまくいきます。これは逆も同様です。ローカルのsetup.bashを入手すると、ローカルのデモが正常に実行され、ハスキーの視覚化は中断されます。PyQt4 GUI内でbashファイルをソーシングする

GUIのインスタンス内で適切なdevel/setup.bashをソースとしてPythonのサブプロセス(または別の代替手段)を使用してビジュアライゼーションが中断しないようにする方法はありますか?

+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の代わりにソースになっています。

関連する問題