【やっつけ】CGIHTTPServer.test()でウェブサーバを立ち上げるROSのノードを作る

Mon Nov 21 14:41:34 JST 2016 (modified: Fri Sep 29 21:38:45 JST 2017)
views: 2254, keywords:Python,ROS この記事は最終更新日が7年以上前のものです。

もっと簡単な方法があれば教えてくださーい

やりたいこと

roslaunchでウェブサーバを立ち上げたい。roslaunchを終わらせたらウェブサーバを落としたい。

やり方

次のようなスクリプトwebserver.pyを書いて、scriptsディレクトリに置く。

#!/usr/bin/env python
   import rospy, os
   import CGIHTTPServer
   
   def kill():
    os.system("kill -KILL " + str(os.getpid()))
   
   os.chdir(os.path.dirname(__file__))
   rospy.init_node("webserver")
   rospy.on_shutdown(kill)
   CGIHTTPServer.test()

launchファイルにノードを次のように書く。

<launch>
    <node pkg="hoge_webserver" name="webserver" type="webserver.py" required="true" args="8080" />
   </launch>

解説

スクリプト中のkillは、自分自身のプロセスをぶっ殺す関数で、CGIHTTPServer.test()もろともシステムから消し去ります。これがないと、CGIHTTPServer.test()のスレッド(?)が死にません。

また、roslaunchからこのノードを立ち上げると、システムのディレクトリがドキュメントルートになるので、8行目でディレクトリをscriptsに変更しています。

また、roslaunchからwebserver.pyを立ち上げると引数に余計なものが入るので、ローンチファイルでwebserver.pyに指定する引数をargs="8080"と明示的に指定しています。

以上。

ノート   このエントリーをはてなブックマークに追加 
 

prev:関西オープンフォーラム2016(KOF2016)で話をしました next:論文等、書き物を他人に見せる前のチェックリスト

やり散らかし一覧

記事いろいろ