ここでは「ROS1 Melodic」のインストールから、実際にTOPIC通信までを行う方法をまとめました。
この記事を読むことで
ROS1のインストール方法
ROS1のパッケージ作製方法
ROS1のTOPIC通信
について知ることができます。
自身の実行環境は
OS:JetPack 4.6 (Ubuntu 18.04) on Jetson Nano B01 DevKit
ミドルウェア:ROS Melodic
を使用しました。
Jetson Nano B01を使って、ROS1を学習する方は、ぜひご覧ください!
それでは早速始めていきましょう!
ROS1 Melodicをインストール
まずは使用するデバイスへROS1をインストールしていきます。
今回は、JETSONを使用するので下記コマンを使用してインストールしていきます。
cd jetson-nano-tools
./install-ros-melodic.sh
参考
Qiita:Jetson NanoにROSをインストールする方法 karaage0703さん
↑ROS1のインストールはこちらの記事が物凄く参考になります。
実行すると、すんなりとインストールされます。
インストールが終わったら、実際に作業ディレクトリを作製します。
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws
ここでは、一般的にROS1で使用されることが多い「catkin_ws」という名前でディレクトリを作製しました。
※ROS2 Tutorialでは「dev_ws」というディレクトリを作製する
ディレクトリの作製、初期化、ビルドを行ってROS1の準備を完了させましょう。
catkin build //ワークスペースのビルド
source ~/.bashrc
また、「catkin build」は「catkin make」よりも新しコマンドで、使い勝手も改善されているため「catkin build」を使用します。
また、上記の方法を除き、catkin buildはデフォルトでROS1に含まれていないので、インストールする必要があります。
実際にワークスペースを作製し、初期化するとこんな感じです。↓↓
buildまで上手く実行できると
コマンドが動くようになるので、確認できたらROS1のインストールは終了です。
ROS1でTopic通信を実行する
ROS1のインストールが完了したら、実際にTOPIC通信で、ROSっぽいことを試してみましょう。
cd ~/catkin_ws/src
catkin_create_pkg rostest std_msgs roscpp
から、catkin_ws/src下に「rostest」というフォルダ名のパッケージを作製します。
依存関係である「roscpp」を「rospy」などに変えると依存言語を変えることも可能です。
パッケージが作製されたら
sudo nano test_talker.cpp
sudo nano test_listener.cpp
と順に実行し、C++プログラムを記述していきます。
JETSONの場合、nanoコマンドが実行できない場合がありますが
でnanoコマンドを使えるようにすればOKです。
下記に必要なC++プログラムを記載するので、コピペしましょう。
test_talker.cpp
#include <ros/ros.h> #include <std_msgs/String.h> int main(int argc, char **argv) { ros::init(argc, argv, "talker"); ros::NodeHandle n; ros::Publisher test_pub = n.advertise<std_msgs::String>("chatter",1000); ros::Rate loop_rate(10); int count = 0; while(ros::ok()) { std_msgs::String msg; std::stringstream ss; ss << "hello world"<< count; msg.data = ss.str(); ROS_INFO("%s",msg.data.c_str()); test_pub.publish(msg); ros::spinOnce(); loop_rate.sleep(); ++count; } return 0; }
test_listener.cpp
#include <ros/ros.h> #include <std_msgs/String.h> void chatterCallback(const std_msgs::String::ConstPtr& msg) { ROS_INFO("I heard: [%s]", msg->data.c_str()); } int main(int argc, char **argv) { ros::init(argc, argv, "listener"); ros::NodeHandle n; ros::Subscriber test_sub = n.subscribe("chatter", 1000, chatterCallback); ros::spin(); return 0; }
C++のプログラムを準備できたら
sudo nano CMakeLists.txt
でCMakeListsにパッケージの依存関係を追記します。
CMakeLists.txt
add_executable(talker src/test_talker.cpp) add_executable(listener src/test_listener.cpp) target_link_libraries(talker ${catkin_LIBRARIES}) target_link_libraries(listener ${catkin_LIBRARIES})
参考URL
上記のプログラム解説はROS Wikiに詳しく記載してあるため、こちらを参照して頂くのが良いと思います。
ROS Wiki WritingPublisherSubscriber
ここまで準備できたら
catkin build
でパッケージをビルドします。
パッケージを選択してビルドする場合は
とコマンドを打つことで、選択したパッケージのみをビルドすることができます。
ビルドが成功したら
ターミナル1(Ctrl + Alt + T)
ターミナル2(Ctrl + Alt + T)
ターミナル3(Ctrl + Alt + T)
とそれぞれ実行しTOPIC通信が行われているかを確認します。
talkerで送ったTOPICがlistener側のターミナルで表示されれば、完了となります。
お疲れ様でした。