この記事は私が金沢工業大学ロボティクス学科で担当している2019年度後学期開講の講義ロボットプログラミングⅡ用です。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) まず、以下のコマンドで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
(4) 次のコマンドでワークスペースを初期化する。
$ catkin init
2. ビルドの方法
ROSではソースコードをビルドするときにcatkin buildコマンドを使います。このコマンドを実行するときは~/catkin_ws以下のディレクトリならどこでも良いところがcatkin_makeと違い便利なところです。
次のコマンドを実行してください。
$ cd ~/catkin_ws
$ catkin build
実行後にlsコマンドを実行すると、build、develとlogのディレクトリが新たに作成されていることがわかります。
3. 設定
ここで作成した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
つぎのように表示されたら成功です。
失敗した場合は、設定をもう一度実行してください。打ち間違えがないか注意しましょう。
4. パッケージの作成
準備ができたので早速、パッケージを作りましょう。パッケージは次のcatkin_create_pkgコマンドで作ります。依存パッケージはそのパッケージを作るために必要なパッケージです。
catkin_create_pkg <パッケージ名> [依存パッケージ1] [依存パッケージ2] [依存パッケージ3]
helloパッケージを作りましょう!
$ cd ~/catkin_ws/src
$ catkin_create_pkg hello roscpp
上手く作成できたか確認します。
$ cd ~/catkin_ws/src/hello
$ ls
CMakeLIsts.txt, include, package.xml, srcができていれば成功です。
package.xmlに作成者(maintainer)の情報などを書きます。ここでは省略します。ROS Wikiのpackage.xmlを参考にしてください。
5. ソースコードの作成とビルド
$ cd ~/catkin_ws/src/hello/src
$ gedit hello_node.cpp
エディタが開くので以下をソースコードを打ち込み「保存(S)」をクリックして保存する。
geditで~/catkin_ws/src/hello/CMakeLists.txtを開き、134行目のadd_executableで始まる行と147~149行目のtarget_link_librariesで始まる3行のコメントを次のように外して保存する(つまり、#を消す)。
ビルドします。まず、catkin_wsディレクトリへ移動します。
$ cd ~/catkin_ws
今回はhelloノードだけをビルドすればよいのでcatkin buildの後にビルドしたhelloノードを指定します。全パッケージをビルドしたいときはcatkin buildだけでOKです。
$ catkin build hello
6. 実行
以下のroscoreコマンドでMaster(マスター)を実行する。他のノードを実行する前に必要です。
$ roscore
ノードを実行するためにはrosrunコマンドを使います。使い方は次のとおり。
rosrun パッケージ名 実行ファイル名
別の端末を開き、rosrunコマンドでhello_nodeノードを実行する。
なお、hello_nodeは~/catkin_ws/devel/lib/hello/hello_nodeにcatkin buildコマンドで作られたものです。
$ rosrun hello hello_node
次のように表示されたら成功。終わり。お疲れ様!
7.ホームワーク
- 以下のノードを作成しよう!
- “I Love KIT”と表示するkitノードを作ろう。ただし、ダブルクォーテーションは表示しなくて良い。
- キーボードから打たれ文字列をそのまま表示するechoノードを作ろう。ただし、文字列に空白は含まないとものとします。
- キーボードから打たれた文字列を”I Love”の後につける、loveノードを作ろう。
- 次のROSチュートリアル(初級)をやろう!
コメント
okanoさん、
ありがとうございます。修正しました。
– $ mkdir -p ~/catkin_ws
+ $ mkdir -p ~/catkin_ws/src
mkdirの-pオプションは親ディレクトリが無い場合は作ってくれるオプションなので、上記のコマンドのようになるのが正しいです。