この記事はROS新人教育用です。ROSでHellow Worldと表示するプログラムを作り、ビルドして実行してみましょう。この記事は以下のROS Wikiの記事を参考に、ビルドコマンドとして新しいcatkin buildを使います。catkin_makeコマンドと比較して、パッケージ毎に違う環境(isolated environment)でビルドできたり、並列ビルドできたり、ROSのパスが通っていればどこでもbuildできたり、一つのパッケージだけ簡単にビルドできたりするところが違う優れた特徴があります。
- catkin_tool
- ROSパッケージを作る
- ROSのパッケージをビルドする
- エラー
- すでにcatkin_makeでビルドした場合は、~/catkin_wsにあるdevel、buildのディレクトリを消してからcatkin buildし直す必要があります。それでもエラーが出る場合は、ホームディレクトリに.catkin_toolsというフォルダがないかls -aコマンドで確認して、あったらフォルダ毎削除してください。
1. インストール
(1) まず、以下のコマンドでcatkinツールをインストールします。
$ sudo apt install python-catkin-tools
(2) セットアップする。なお、sourceコマンドはファイルに書かれたコマンドを現在のシェルで実行するコマンドです。
$ source /opt/ros/melodic/setup.bash
(3) mkdirコマンドでディレクトリを作る。-pのオプションはcatkin_wsディレクトリがない場合はそれを作り、その中にsrcディレクトリを作ってくれる便利なオプション。なお、~はホームディレクトリの意味。
$ mkdir -p ~/catkin_ws/src
(4) cdコマンドでディレクトリを移動する。
$ cd ~/catkin_ws
(5) 次のコマンドでワークスペースを初期化する。
$ catkin init
(6) ワークスペースをビルドする.
$ catkin build
2. 設定
ここで作成したcatkin_wsを有効にするためには以下のコマンドを実行する必要があります。
$ source ~/catkin_ws/devel/setup.bash
毎回、実行するのは面倒なので~/.bashrcの一番最後にテキストエディターgeditで、上のコマンドを付け加え保存しましょう。まず、geditがインストールされていない場合は次のコマンドでインストールしてください。
$ sudo apt install gedit
ホームディレクトリに移動します。
$ cd
次のコマンドでgeditを実行します。
$ gedit .bashrc
.bashrcの中にsource /opt/ros/melodic/setup.bashがない場合は、下のように2行追加してください。
source /opt/ros/melodic/setup.bash
source ~/catkin_ws/devel/setup.bash
保存はgeditの上ツールバー右にある「Save」をクリックします。では、うまく設定されたか、次のコマンドで確認しましょう。
$ source .bashrc
$ echo $ROS_PACKAGE_PATH
つぎのように表示されたら成功です。
失敗した場合は、設定をもう一度実行してください。打ち間違えがないか注意しましょう。
3. パッケージの作成
準備ができたので早速、パッケージを作りましょう。パッケージは次のcatkin_create_pkgコマンドで作ります。依存パッケージはそのパッケージを作るために必要なパッケージです。
catkin_create_pkg <パッケージ名> [依存パッケージ1] [依存パッケージ2] [依存パッケージ3]
helloパッケージを作りましょう!
$ cd ~/catkin_ws/src
$ catkin_create_pkg hello rospy
上手く作成できたか確認します。
$ cd ~/catkin_ws/src/hello
$ ls
CMakeLIsts.txt, include, package.xml, srcができていれば成功です。
CMakeLists.txtの160~163行目の部分を以下のように変更します。
## Mark executable scripts (Python etc.) for installation ## in contrast to setup.py, you can choose the destination install(PROGRAMS scripts/hello_node.py DESTINATION ${CATKIN_PACKAGE_BIN_DESTINATION} )
package.xmlに作成者(maintainer)の情報などを書きます。ここでは省略します。ROS Wikiのpackage.xmlを参考にしてください。
4. ソースコードの作成
$ cd ~/catkin_ws/src/hello/scripts
$ gedit hello_node.py
エディタが開くので以下をソースコードを打ち込み「保存(S)」をクリックして保存する。
#!/usr/bin/env python import rospy rospy.init_node('hello_node') rospy.loginfo('Hello World') rospy.spin()
5. コード解説
- 1行目:pythonのインタプリタを使うことを示しています。Linux環境でpythonのようなスクリプト言語を使う場合に必要となります。
- 2行目:ROSでpythonを使う場合に必要となるrospyモジュールをインポートしています。 loginfo()は標準出力(画面)と/rosoutトピックに文字列を出力します。
- 3行目:init_node()でノードに名前つけて初期化しています。この例ではノード名はhello_node、ノード名はユニークでなければいけません。同じノード名のノードを作ってはいけないのです。
- 4行目:loginfo()は引数の文字列を標準出力と/rosoutトピックとして送信します。
- 5行目:spin()はノードを終了させないように留めますが、CTRL+Cキー(Controlキーを押しながらCキーを押す)でノードは終了します。これがないと標準出力に文字列を出力したらノードは終了し、/rosoutにも文字列を送信しません。
6. 実 行
pythonノードが実行できるように実行権を与えます。
$ chmod +x hello_node.py
pythonノードが使用するメッセージが確実に生成されるようにビルドします。
$ cd ~/catkin_ws
$ catkin build
以下のroscoreコマンドでMaster(マスター)を実行する。他のノードを実行する前に必要です。
$ roscore
ノードを実行するためにはrosrunコマンドを使います。使い方は次のとおり。
rosrun パッケージ名 実行ファイル名
別の端末を開き、rosrunコマンドでhello_nodeノードを実行する。
$ rosrun hello hello_node.py
次のように表示されたら成功。終わり。お疲れ様!
7.ホームワーク
- 以下のノードを作成しよう!
- “I Love KIT”と表示するkitノードを作ろう。ただし、ダブルクォーテーションは表示しなくて良い。
- キーボードから打たれ文字列をそのまま表示するechoノードを作ろう。ただし、文字列に空白は含まないとものとします。
- キーボードから打たれた文字列を”I Love”の後につける、loveノードを作ろう。
- 次のROSチュートリアル(初級)をやろう!
コメント
1.インストール
の(3)は
mkdir -p ~/catkin_ws/src
と書きたかったのですよね?
ご指摘ありがとうございます!修正しました.
バイトでROSを使うことになり非常に助けになりました!
一つ、本当の初心者にとっては「1.インストール」の2つ目の?(4)の直後にcatkin_makeを実行することを書いていただけると困ることはないかと思います。私がここで引っかかっていたので。。。
匿名さん.ご指摘ありがとうございます.このページではcatkin_makeではなく,catkin buildを使っているのでそれを追加しました.
ありがとうございます!