Note: This tutorial assumes that you have completed the previous tutorials: Arduino IDE Setup.
(!) Please ask about problems and questions regarding this tutorial on answers.ros.org. Don't forget to include in your question the link to this page, the versions of your OS & ROS, and also add appropriate tags.

Hello World (example publisher)

Description: This tutorial shows step by step how to create a publisher using rosserial.

Tutorial Level: BEGINNER

Next Tutorial: ja/rosserial_arduino/jaTutorials/Blink

Hello World: パブリッシャーを作る

コード

Arduinoのための"hello wolrd"プログラムの作成からrosserialのたびをはじめよう。 (注意:Arudinoのコミュニティはよくプログラムのためのソースコードを"スケッチ"と呼びます。以下でもその表現を使います。).Arduino IDE Setupのチュートリアルにしたがって来ているなら、Arudino IDE の例のメニューからros_libHellowWorldを選ぶことによってスケッチを開くことができる。

これで以下のようなコードがIDEに現れるでしょう。

   1 /*
   2  * rosserial Publisher Example
   3  * Prints "hello world!"
   4  */
   5 
   6 #include <ros.h>
   7 #include <std_msgs/String.h>
   8 
   9 ros::NodeHandle nh;
  10 
  11 std_msgs::String str_msg;
  12 ros::Publisher chatter("chatter", &str_msg);
  13 
  14 char hello[13] = "hello world!";
  15 
  16 void setup()
  17 {
  18   nh.initNode();
  19   nh.advertise(chatter);
  20 }
  21 
  22 void loop()
  23 {
  24   str_msg.data = hello;
  25   chatter.publish( &str_msg );
  26   nh.spinOnce();
  27   delay(1000);
  28 }

コード解説

さて、コードを読み解いていきましょう。

   6 #include <ros.h>
   7 #include <std_msgs/String.h>
   8 

すべてのROSのArduinoのプログラムの一部として、ros.hのヘッダーファイルと使いうるメッセージのヘッダーファイルをインクルードする必要があります。

   9 ros::NodeHandle nh;

つぎに、nodeハンドラをインスタンス化する必要があり、それをするとプログラムはパブリッシャーやサブスクライバーを作ることができます。nodeハンドラはまた、シリアルポート接続も管理します。

  11 std_msgs::String str_msg;
  12 ros::Publisher chatter("chatter", &str_msg);

使うパブリッシャーとサブスクライバーをインスタンス化する必要があります。ここで"chatter"という名前のパブリッシャーをインスタンス化しています。二つ目のパラメータはパブリッシュに使用するメッセージのインスタンスへの参照です。

  16 void setup()
  17 {
  18   nh.initNode();
  19   nh.advertise(chatter);
  20 }

Arudinoのsetupの関数の中で、あなたは、ROSのハンドルを初期化する必要があり、パブリッシュされたりサブスクライブされるtopicをアドバタイズする必要があります。

  22 void loop()
  23 {
  24   str_msg.data = hello;
  25   chatter.publish( &str_msg );
  26   nh.spinOnce();
  27   delay(1000);
  28 }

最後に、loop関数の中で、nodeは"Hello World"をパブリッシュしてすべてのROSの通信のコールバックを呼び出すros::spinOnce()を呼んでいます。

コードを転送する

Arduinoにコードを送るには、Arduino IDEにあるupload関数を使いなさい。これは他のスケッチのアップロードとなんら変わりません。

コードを実行する

さて、roscoreを新しいターミナルのウィンドウで立ち上げてください。

roscore

次に、ROSの残りにArduinoのメッセージを送り出すrosserialクライアントアプリケーションを実行します。正しいシリアルポートを使っていることを確認してください。

rosrun rosserial_python serial_node.py /dev/ttyUSB0

最終的に、新しいターミナルで以下を打つことで、Arduinoからの挨拶(Hello world)を見ることができます。

rostopic echo chatter

さらに読むもの

パブリッシャーとサブスクライバーに関するさらなる情報はrosserial/Overviewをご覧ください. 複雑なデータのタイプについての更なる情報はlimitationsをご覧ください。

Wiki: ja/rosserial_arduino/jaTutorials/Hello World (last edited 2012-12-22 20:42:36 by Yuto Inagaki)