ROS覚え書き「ROSノードの理解」

http://www.ros.org/wiki/ROS/Tutorials/UnderstandingNodes より

ROSにおけるグラフの概念

ノード(Node):ノードはROSを使う実行形式で、他のノードと互いに通信できる。

トピック(Topic):ノードはトピックに対してメッセージを配信(Publish)する。また、メッセージを受信するためにトピックを購読(Subscribe)する。

メッセージ(Message):トピックへの配信や購読の際に用いられるROSデータ型のこと。

マスター(Master):ROSのネームサービスのこと。互いにノードを見つける助けとなる。

rosout:ROS版のstdout, stderrのこと。

roscore:マスター+rosout+パラメーターサーバー

ノードはROSクライアントライブラリを使って他のノードと通信し、トピックに対して配信・購読できる。また、サービスを提供したり利用できる。

ROSクライアントライブラリは、他のプログラミング言語で書かれたノードと通信できるようにするためのライブラリである。rospyはPython用のクライアントライブラリであり、roscppはC++用のクライアントライブラリである。

roscoreは、ROSを利用する際に実行しなければならない。以下のように実行する。

roscore

roscoreが起動しない場合は、ネットワーク設定に問題のある可能性がある。なお、roscoreは多重起動はできずエラーメッセージが表示される。

rosnodeは、実行中のノードに関する情報を表示する。rosnode listで、実行中のノードの一覧が表示される。

rosoutは常に実行されているノードで、デバッグ出力を記録するためのものである。

rosnode infoは、特定のノードに関する情報を表示する。以下は使用例。

rosnode info /rosout

rosnode infoにより、ノードが配信・購読するトピックやサービスがわかる。

rosrunは、パッケージ内のノードを直接実行するコマンドである。

rosrun [パッケージ名] [ノード名]

turtlesimパッケージのturtlesim_nodeを実行するには、以下のようにする。

rosrun turtlesim turtlesim_node

ノードに別途名前を付けることもできる。

rosrun turtlesim turtlesim_node __name:=my_turtle

rosnode pingで、名前を付けたノードが起動しているか確認できる。

rosnode ping my_turtle

ROS覚え書き「パッケージのビルド」

http://www.ros.org/wiki/ROS/Tutorials/BuildingPackages より

システム依存物(System Dependencies)とは、パッケージが必要とする外部ライブラリやツールで、特にOSが提供するようなもののこと。デフォルトでは、システム依存物がインストールされないので、ダウンロードやインストールを行うrosdepというコマンドが用意されている。

パッケージが必要とするシステム依存物は、マニフェストに記述されている必要があるので、manifest.xmlを見れば必要なシステム依存物を確認できる。

rosdepコマンドは、パッケージに必要なシステム依存物をインストールするのに使うコマンドである。

rosdep install [パッケージ]

上記のようにすれば、パッケージに対するシステム依存物がダウンロードされる。

rosmakeは、パッケージをビルドするコマンドである。パッケージのビルドだけでなく、依存するパッケージなどのビルドも適切な順序で行う。

rosmake [パッケージ]

以下のようにして複数のパッケージを一度にビルドできる。

rosmake [パッケージ1] [パッケージ2] [パッケージ3]

ROS覚え書き「パッケージの作成」

http://www.ros.org/wiki/ROS/Tutorials/CreatingPackage より

roscreate-pkgは、ROSのパッケージを作成するためのコマンドである。パッケージ内のファイルは共通するものが多いため、ミスを避けるためにも直接作成するのではなくroscreate-pkgを使う。

roscreate-pkg パッケージ名

依存物(Dependencies)を指定して作成することもできる。

roscreate-pkg [パッケージ名] [依存パッケージ1] [依存パッケージ2] [依存パッケージ3]

rospackを使うと、パッケージの一次依存物を調べられる。(以下は使用例)

rospack depends1 beginner_tutorial

マニフェストファイル(manifest.xml)のdependタグ内に一次依存物が書かれている。

全ての依存パッケージを調べるにも以下のようrospackコマンドを使う。

rospack depends beginner_tutorial

ROS覚え書き「ファイルシステムの操作」

http://www.ros.org/wiki/ROS/Tutorials/NavigatingTheFilesystem より

パッケージ(Package):最も低レベルのROSソフトウェア構成。パッケージにはライブラリ、ツール、実行形式などが含まれる。

マニフェスト(Manifest):パッケージに関する記述をマニフェストという。マニフェストの役割は、パッケージ間の依存関係を定義すること。

スタック(Stack):スタックはパッケージの集まりで、より高レベルのライブラリを形成する。

スタックマニフェスト(Stack manifest):通常のマニフェストと同様でスタックに関するものである。

ファイルシステム上でパッケージとスタックを識別することは容易で、manifest.xmlファイルを持つディレクトリならパッケージ、stack.xmlファイルを持つディレクトリならスタックである。

パッケージに関する情報を得るにはrospackを用い、スタックについてはrosstackを用いる。

rospack find パッケージ名
rosstack find スタック名

とすると、環境変数ROS_PACKAGE_PATH上にあるパッケージやスタックの場所を知ることができる。

roscdは、パッケージやスタックのあるディレクトリに移動(cd)するコマンドである。

roscd [パッケージ名(またはスタック名)[/サブディレクトリ

パラメータなしでroscdを実行すると、環境変数ROS_ROOTで示されたディレクトリに移動する。

roslsは、指定されたパッケージやスタックのディレクトリ内容を表示するコマンドである。パラメータ形式はroscdと同じである。

roscdやroslsのパラメータはTABキー入力で補完される。

Installing and Configuring Your ROS Environment

よくわからないのでチュートリアルを片っ端からやる。

http://www.ros.org/wiki/ROS/Tutorials

http://www.ros.org/wiki/ROS/Tutorials/InstallingandConfiguringROSEnvironment

このチュートリアルは単に作業用ディレクトリを作るのと、それを環境変数にセットすることだけのようだ。

実質的に端末でやった作業は以下の通り。

mkdir ~/ros_workspace
echo "export ROS_PACKAGE_PATH=~/ros_workspace:/opt/ros/diamondback/stacks" > setup.sh

これで次回以降、以下のように入力すれば全ての環境が整えられるみたい。

. setup.sh

ROSのインストール

まずはROSがサポートしているubuntu 11.04をインストールしておく。(省略)

http://www.ros.org/wiki/diamondback/Installation/Ubuntu

上記ページに従ってROSのインストールを進める。

1.インストール

1-1. ubuntuのリポジトリを設定する。

 特に何もしなかった。

1-2. sources.listを編集する。

端末を起動して以下を実行すればよい。

sudo sh -c 'echo "deb http://packages.ros.org/ros/ubuntu natty main" > /etc/apt/sources.list.d/ros-latest.list'

1-3. キーを設定する。

以下を実行する。

wget http://packages.ros.org/ros.key -O - | sudo apt-key add -

1-4. インストール

あらかじめ、updateしておく。

sudo apt-get update

とりあえず「Desktop-Full Install」をインストールしてみる。以下を実行する。

sudo apt-get install ros-diamondback-desktop-full

1-5. 環境設定

以下を実行して環境設定を行う。

echo "source /opt/ros/diamondback/setup.bash" >> ~/.bashrc
. ~/.bashrc

とりあえず以上まですんなり進んだ。

MSI U135でubuntuがシャットダウンできない

MSI U135にubuntu 11.04をインストールしてみた。

基本的に問題がないと思ったところでシャットダウンしてみたら、背景画面が表示された状態でハングしてしまう。リブートも同様。

ググってみたら解決方法は簡単だった。

/etc/modprobe.d/blacklist.conf

rootになって上記のファイルをviで開き、以下の1行を最後に加えるというもの。

blacklist rt2800pci

どうやらwifiドライバが悪さをするようなので、読み込まないようにすればいいらしい。

元ネタはこちら。MSIのノートブックに共通する問題らしい。

http://askubuntu.com/questions/21749/msi-u130-freezes-on-shutdown

MacPortsのselfupdate失敗

久しぶりにselfupdateしたら失敗した。新しいバージョンになってイロイロ変わったらしい。

$ sudo port selfupdate
port registry doesn't exist at "/opt/local/var/macports/registry/registry.db" and couldn't write to this location
... 省略 ...

http://logrepo.blogspot.com/2010/08/macports-18x-19x.html

上のサイトのように、/opt/local/etc/macports/ のmacports.conf.defaultをmacports.confに上書きして、sudo port installedを実行したらデータベースが作成された。

余談だが、「はてな記法」って何年使ってもしっくりこないな。

PharoでのSound

ダウンロードした状態のPharoでは音が鳴らない。

SettingsBrowserのAppearanceにSoundがあるが、オンにできない。

Soundを有効にするには、ワークスペースで以下の式を実行する必要がある。

AbstractSoundSystem soundEnabled: true.

BaseSoundSystem soundEnabled: true.

これでバッハのフーガを演奏できるようになる。

AbstractSound stereoBachFugue play.

SettingsBrowserのSoundもオンになるが、画面上でオフにすることはできないようだ。どうなっているの?

まあ、PharoではSoundに注意が払われていないようなので仕方ないか。

追記:goonshさんの指摘によりSound有効化の式を修正しました。