注目キーワード
  1. Photoshop
  2. Python
  3. Raspberry Pi
  4. Arduino

ROS1インストール~TOPIC通信 on JETSON Nano

  • 2022年2月13日
  • ROS1

ここでは「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を使用するので下記コマンを使用してインストールしていきます。

git clone https://github.com/karaage0703/jetson-nano-tools
cd jetson-nano-tools
./install-ros-melodic.sh

参考

Qiita:Jetson NanoにROSをインストールする方法 karaage0703さん

↑ROS1のインストールはこちらの記事が物凄く参考になります。

 

jetson_ros_test_pubsub_01

実行すると、すんなりとインストールされます。

 

インストールが終わったら、実際に作業ディレクトリを作製します。

source ~/.bashrc
mkdir -p ~/catkin_ws/src
cd ~/catkin_ws

 

ここでは、一般的にROS1で使用されることが多い「catkin_ws」という名前でディレクトリを作製しました。

※ROS2 Tutorialでは「dev_ws」というディレクトリを作製する

 

ディレクトリの作製、初期化、ビルドを行ってROS1の準備を完了させましょう。

catkin init           //ワークスペースの初期化
catkin build     //ワークスペースのビルド
source ~/.bashrc

 

また、「catkin build」は「catkin make」よりも新しコマンドで、使い勝手も改善されているため「catkin build」を使用します。

 

また、上記の方法を除き、catkin buildはデフォルトでROS1に含まれていないので、インストールする必要があります。

sudo apt install python-catkin-tools

実際にワークスペースを作製し、初期化するとこんな感じです。↓↓

jetson_ros_test_pubsub_02

 

buildまで上手く実行できると

roscore

コマンドが動くようになるので、確認できたらROS1のインストールは終了です。

 

ROS1でTopic通信を実行する

ROS1のインストールが完了したら、実際にTOPIC通信で、ROSっぽいことを試してみましょう。

 

cd ~/catkin_ws/src

catkin_create_pkg rostest std_msgs roscpp

から、catkin_ws/src下に「rostest」というフォルダ名のパッケージを作製します。

 

依存関係である「roscpp」を「rospy」などに変えると依存言語を変えることも可能です。

 

パッケージが作製されたら

cd ~/catkin_ws/src/rostest/src
sudo nano test_talker.cpp
sudo nano test_listener.cpp

と順に実行し、C++プログラムを記述していきます。

 

JETSONの場合、nanoコマンドが実行できない場合がありますが

sudo apt install 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++のプログラムを準備できたら

cd ~/catkin_ws/src
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

 

ここまで準備できたら

cd ~/catkin_ws
catkin build

でパッケージをビルドします。

 

パッケージを選択してビルドする場合は

catkin build rostest

とコマンドを打つことで、選択したパッケージのみをビルドすることができます。

 

ビルドが成功したら

ターミナル1(Ctrl + Alt + T)

roscore

 

ターミナル2(Ctrl + Alt + T)

rosrun rostest talker

 

ターミナル3(Ctrl + Alt + T)

rosrun rostest listener

とそれぞれ実行しTOPIC通信が行われているかを確認します。

 

ros1_pubsub_topic

 

talkerで送ったTOPICがlistener側のターミナルで表示されれば、完了となります。

 

お疲れ様でした。

ros1-on-jetson-install
学びに関する情報をチェック!