fzfとROSを連携してデバッグ効率を向上させる

できること

トピック名をうろ覚えのときに、対話的に絞り込み検索をしながら、ROSコマンドを実行することができる。

例: rostopic echo <topic name> でトピックの値を調べたいが、トピック名を後ろの方しか覚えてない

before

after

導入方法

~/.bashrcに以下を追記

if [ ! -f ~/.fzf.zsh ] ;then
git clone https://github.com/junegunn/fzf.git ~/.fzf
bash ~/.fzf/install
fi
source ~/.fzf.zsh

さらに下記~/.bashrcに追記

alias roste='rostopic echo -c $(rostopic list | fzf)'
alias rosti='rostopic info $(rostopic list | fzf)'
alias rosni='rosnode info $(rosnode list | fzf)'
alias rosmi='rosmsg info $(rosmsg list | fzf)'
alias rossi='rosservice info $(rosservice list | fzf)'

背景

ROSを使ってロボット開発をしていると、システムの状態を調べるときにrostopic echoなどのROSコマンドを頻繁に使うと思います。
基本的にトピック名を途中まで入力して、TABキーを押せば、名前を補完してくれるようになってますが、深いネームスペースのトピックを見たいときは、後方補完ができないので、トピックを頭から順番に打ち込む必要がありちょっと面倒になります。

なので最初はrostopic listでトピック名を調べて、クリップボードにコピーしてから、rostopic echoに渡していましたが、何度もやってるとだんだん面倒になってくるので、楽な方法はないかと考えた結果fzfで検索と実行を同時に行う方法に落ち着きました。

何やってるの?

fzfはインクリメンタルな絞り込み検索ができるCUIツールです。

何かしらのリスト(文字列)をパイプ経由でfzfに渡してあげると、絞り込み検索ビューが表示されるので、探したい名前を入力すると素早く絞り込み検索ができます。
また、文字を入力するごとに逐次検索結果が表示されるので、途中まで打ち込んで検索終了、みたいなことができます。

今回はこの機能を使って、ROSのトピック/ノード/メッセージなどの名前を曖昧検索し、別のROSコマンドに渡すことで、1コマンドで即座にほしい情報が得られるようにしました。

コメントをどうぞ

メールアドレスが公開されることはありません。 が付いている欄は必須項目です