LoginSignup
1
0

More than 5 years have passed since last update.

Cursesで作るROSのメッセージモニター

Posted at

まだ製作途中ですが、コードは以下のリポジトリにあるので、興味があれば見てみてください。
https://github.com/nakano16180/ros_control

きっかけ

ROSでメッセージを確認したいとき、rostopic echoを使っていました。
しかし、複数メッセージを確認したいときにrostopic listをしてからrostopic echoをすると、echoで確認したメッセージで端末が埋まってしまい、その前のrostopic listの結果が流れてしまう

なんとかできないかと調べていると、こんな記事を見つけました。
コンソールへの出力を上書きしてゆく方法

これだ!でもこれ、1行しかだめじゃん(泣)
複数行上書き出来る方法はないかと思い、もう少し調べているとCursesというライブラリを見つけました。

Cursesとは

Pythonの標準ライブラリで、組み込み関数のinputやprintを使うより高度なCUIアプリケーションを作成できます。

とりあえずコードを見てみる

sample.py
#!/usr/bin/env python3

import curses
import time

if __name__ == "__main__":
    try:
        stdscr = curses.initscr()
        curses.noecho()

        for t in range(0, 10):
            stdscr.clear()
            stdscr.addstr(0, 0, 'Program will be terminated after %s seconds' % (10 - t))
            stdscr.refresh()
            time.sleep(1)
    except:
        # Exception by Ctrl + C
        pass
    finally:
        curses.echo()
        curses.endwin()

コードはここから→Python:cursesライブラリの使い方

コード中のstdscr.addstr(y, x, string)という形で、指定した座標に文字を表示させることができます。
stdscr.addstr()のx,yを変更しながら追加していけば表示させる内容も増えるので、割りと使いやすいのではないかと思いました。

実行結果は以下の通り
curses_sample1.gif

おわりに

今回紹介したCursesを調べている途中で、TUI(Text User Interface)というものを知りました。ちょっとしたコマンドや小さなツールでもUIなどにこだわってみると開発も楽しくなるのではないかと思いました。

今後の目標として、topicのリストとtopic内容の表示を同時にできたらいいなと思います。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0