C++を使って,ROSでHello, ROS!をしてみる。
以前,カメさんを走らせたので今度はハロー,ロス!していきたいと思います。C++で。
*もちろんROSを入れていなければ出来ません。
1.ROSで遊ぶためのWorkspaceを作る
まず,ROSを動かすためのファイルたちを入れる,ディレクトリを作成します。ROSにおいてこのディレクトリのことをWorkspaceと呼ぶようです。ディレクトリというのはほぼフォルダと同義です。難しく考えすぎないように(それは自分)。まあ,文字通り作業場所をあらかじめ作っておくということですね。では作っていきましょう。
まずターミナルを開きます。デフォルトで現在のディレクトリが /homeになっていると思うので,そのまま
mkdir ros
とブチ込んでrosというディレクトリを作成しましょう。mkdirはそのままmake directoryということですね。ここで,
ls
というコマンドをブチ込むと現在のディレクトリに入っているファイルの一覧を確認できます。便利です。
続いてさらに,rosディレクトリの中にsrcというディレクトリを作成します。そのためにひとまず
cd ros
とブチ込んでrosディレクトリに移動しましょう。そんでそこでまた
mkdir src
とブチ込んでsrcというディレクトリを作成します。そしたら最後にまた
cd src
とブチ込んで場所をsrcに移動してから
catkin_create_pkg agitr
とブチ込みます。このagitrつーのは僕が参考にしてる本からの抜粋なので,そこの部分の名前はなんでも良いです。なんでもよいのです。そうすると,agitrというディレクトリがsrcの中に生成されまして,そしてその中にpackage.xml, CMakeLists.txt という2つのファイルが生み出されます。よろしいでしょうか。
なので,構造としては
ros---src---agitr--package.xml, CMakeLists.txt
という感じになります。
2.C++でHello, ROS!を書く
次に,agitrの中でヘロー,ロス!のプログラムを書きます。つまりhello.cppというテキストファイルをagitrの中にブチ込むことになります。なのでagitrの中に存在するファイルは合計3つ,hello.cpp, package.xml, CMakeLists.txtですね。
気になるhello.cppの中身はこうです。
#include <ros/ros.h>
int main(int argc, char **argv) {
ros::init(argc, argv, "hello_ros");
ros::NodeHandle nh;
ROS_INFO_STREAM("Hello, ROS!");
}
間違っていたらごめんなさい。例によってコードの意味は省きます。C++全くわからないので。
ros---src---agitr--package.xml, CMakeLists.txt, hello.cpp
3.コンパイルする
次に,さきほど書いたC++のプログラムを認識してもらうために,同じディレクトリの中に入っているCMakeLists.txtの中身をちょろっと書き換えます。中身は,非常に丁寧にたくさんのコメントがついているのですが,もともとの,実質のコード部分はこうです。
cmake_minimum_required(VERSION 2.8.3)
project(agitr)
find_package(catkin REQUIRED)
catkin_package()
include_directories(include ${catkin_INCLUDE_DIRS})
そんで,元々のやつをこう書き換えます。
cmake_minimum_required(VERSION 2.8.3)
project(agitr)
find_package(catkin REQUIRED COMPONENTS roscpp)
catkin_package()
include_directories(include ${catkin_INCLUDE_DIRS})
add_executable(hello hello.cpp)
target_link_libraries(hello ${catkin_LIBRARIES})
はい,それではついにコンパイルです。ターミナルにこうブチ込みましょう。
catkin_make
成功したら,ダダダっといろいろなメッセージが流れに流れます。コンパイル成功です。
4.プログラムを実行する
コンパイルに成功するとですね,rosの中にdevel, buildというディレクトリが出現します。はい,あともうちょっとです。
ros---src ---agitr---package.xml
--- build --- CMakeLists.txt
---devel ---hello.cpp
まず現在のターミナルでroscoreをブチ込みましょう。roscoreっていうのはROSというシステムを動かす上での中核となるやつですね。マスターです。管理人です。
roscore
そして,新たにターミナルを開いて,そこで
source devel/setup.bash
とブチ込みます。続けてそのまま,,,,
rosrun agitr hello
とブチコメば・・・・?
やったね!!!!!!ハロー!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!ROS!!!!!!!!!!!!!!
参考
A gentle introduction to ROS