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_libのHellowWorldを選ぶことによってスケッチを開くことができる。
これで以下のようなコードが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 }
コード解説
さて、コードを読み解いていきましょう。
すべてのROSのArduinoのプログラムの一部として、ros.hのヘッダーファイルと使いうるメッセージのヘッダーファイルをインクルードする必要があります。
9 ros::NodeHandle nh;
つぎに、nodeハンドラをインスタンス化する必要があり、それをするとプログラムはパブリッシャーやサブスクライバーを作ることができます。nodeハンドラはまた、シリアルポート接続も管理します。
使うパブリッシャーとサブスクライバーをインスタンス化する必要があります。ここで"chatter"という名前のパブリッシャーをインスタンス化しています。二つ目のパラメータはパブリッシュに使用するメッセージのインスタンスへの参照です。
Arudinoのsetupの関数の中で、あなたは、ROSのハンドルを初期化する必要があり、パブリッシュされたりサブスクライブされるtopicをアドバタイズする必要があります。
最後に、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をご覧ください。