ROS
ROSDay 5

ROS Masterの起動に合わせて自動で再起動するノード

まえがき

ROSを使ってロボット実機を動かしている人はロボットにroscore (+ロボットのコントローラノードなど)を上げておいて、各自のLaptopからROS_MASTER_URIを設定してロボットと通信して実験をしていると思います。

ここで面倒なのはロボットに何らかの問題が発生し(バッテリ・ネットワーク切れなど)てroscoreが見えなくなると、すべての関連ノードを再起動しないといけないことです。
そこで、masterを監視して、自動で再起動(ROS的にいうとrespawn)するラッパースクリプトを書いたので、共有します。

やりかた

  • セットアップ

    sudo wget https://gist.githubusercontent.com/furushchev/7cb528bdabf650bd067e26685c903a4c/raw/f88c27b225c08b67fcddc60620e5f8b9a5944afe/auto_restart -O /usr/local/bin/auto_restart
    ## Wow, too low security!
    
  • 起動

    # ロボットなど
    roscore
    
    # ラップトップ
    auto_restart rosrun rviz rviz
    

    この状態でroscoreを落とすと、rvizも落ちます。
    で、もう一度ロボットでroscoreを上げると、再度rvizが起動します。

まとめ

  • これでロボットを再起動するたびにロボット組み込みディスプレイにデモ用のRVizを上げ直す必要がなくなった。
  • PR2などではrqt_pr2_dashboardをこれで起動することで、バッテリ切れに気がつきやすくなった。

おまけ

Ubuntu限定でデスクトップアプリ?を作る方法

下のようなファイルを作ります。(ここではRViZ.desktopというファイル名)

[Desktop Entry]
Version=1.0
Type=Application
Icon[ja_JP]=task-past-due
Icon=task-past-due
Name[ja_JP]=RViz
Name=RViz
Exec=/bin/bash -l -i -c "DISPLAY=:0.0 ROS_MASTER_URI=http://robot:11311 /usr/local/bin/auto_restart rosrun rviz rviz -d $(rospack find my_awesome_pkg)/config/startup.rviz"

上のファイルを~/.local/share/applications/RViZ.desktopなどとして置きます。

Ubuntuの右上のメニューからrvizと入力するとアイコンが出ると思います。
これをデスクトップにドラッグすると、RViZをデスクトップショートカットとして登録できます。