C++でROSを用いてパッケージを書いてみよう
ROSとは?
正式名はRobot Operating Systemでロボットや電子機器を管理したシステムを作りたいときに使います。
使われる言語は主にPythonとC++ですが, 今回はC++を用いて書いてみます。
PythonはC++と違い遅いですが開発と習得にかかる時間は驚くほど短いため, プロトタイプの作成などに重宝します。
- 準備するもの
- ubuntuを搭載してあるPC
- 使っているubuntuのバージョンに適したROSのバージョンのダウンロード (こちらがまだの方はROSの公式サイト: https://wiki.ros.org/ へ行ってダウンロードしてください)
- テキストエディタ
- 前述: ここではオブジェクト指向言語の特徴でもあるクラスを用いた記述をします。ROSの詳しい説明などはされませんのでROSについて詳しく知りたい場合は自分でお願いします m(__)mスミマセン
まずはROSで開発する際にワークスペースを整えたほうが良いので, 以下のコードを元にホームディレクトリの元にcatkin_wsというワークスペースと今回のパッケージのためにhello_wsというディレクトリをcatkin_wsの下に作成してください
$ mkdir -p ~/catkin_ws/hello_ws/src
また, その後にhello_wsに入り, catkin_makeで1回ビルドしてください
$ cd ~/catkin_ws/hello_ws; catkin_make
その後, src ディレクトリの下にhello_rosというROSパッケージを作成します。
$ cd src; catkin_create_pkg hello_ros roscpp std_msgs rospy (rospyはPythonを用いて開発する際に必要ですが, 今回はいらないです。)
パッケージを作成した後に, 以下のコマンドを実行してください。(これは.bashrcにhello_rosパッケージを登録します)
$ echo "~/catkin_ws/hello_ws/devel/setup.bash" >> ~/.bashrc; source ~/.bashrc
これ以降は $ roscd (パッケージ名) のみでパッケージに移動できます (便利です)
roscdでパッケージのディレクトリに移動できることが確認できた場合は, パッケージのディレクトリのすぐ下にscriptsというディレクトリを作成してください。ここにコードなどを保存します。scripts/ディレクトリの下に以下の2つのコードを書いてください。
この2つのコードを書いた後に, hello_rosディレクトリの下にCMakeLists.txtというファイルを多少改変する必要があります。
こちらは上の2つのコードを書くより楽なので大丈夫です。^ ω ^;
CMakeLists.txtの一番下に以下の4行のコードを記述します。
add_executable(hello_pub scripts/hello_pub)
add_executable(hello_sub scripts/hello_sub)
target_link_libraries(hello_pub ${catkin_LIBRARIES})
target_link_libraries(hello_sub ${catkin_LIBRARIES})
これらのことが全て終わりましたら, hello_wsに戻ってcatkin_makeしてください。そうすることでhello_wsに入っているものがビルドされます。
動作
まずはターミナルが3つ必要です。
(ROSパッケージを動かしたい場合はterminatorというターミナルが個人的にはおすすめです)
- 1つ目のターミナルでroscoreを起動します ($ roscore)
- 2つ目のターミナルでは先程作成したhello_pubを実行します ($ rosrun hello_ros hello_pub)
- 最後の3つ目のターミナルではhello_subを実行します ($ rosrun hello_ros hello_sub)
以下のように動作することが確認できれば完了です。
まとめ
この記事を書いてみようと思った理由ですが, 結構C++でのROSを用いたコードの書き方は他の記事でもあるのですが, クラスを用いた記法がなかなか見つからなかったため書いてみました。
ちょっと文字だらけで見づらいかもしれませんでしたサーセン
追記
後に見直してみたら, hello_pubとhello_subのファイル名が逆でした。すみません。